개인 자료란 (JE)

  서버 커뮤니티

Profile cch 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

[마인크래프트 플러그인 제작 강의] 2강 간단한 플러그인 따라만들기

2020.04.14 조회 수 2396 추천 수 0
분야 플러그인 
장르 개발자 툴 
게임버전 모든버전 
API 스피곳, 페이퍼 


이 글은 개인 블로그에 작성한 내용을 공유하는 글 입니다.
(공유 하는 과정에서 누락된 이미지나 글이 있을 수 있습니다. )

( 해당 블로그에서 원본을 보실 수 있습니다.  https://cchplugin.tistory.com/ )



이 글은 이미지 첨부가 정상적으로 되지 않네요.

블로그 글을 참고하시는 것을 추천드립니다.

링크 : https://cchplugin.tistory.com/7



안녕하세요.

 

오늘은 저번에 세팅한 개발환경 ( eclipse )를 이용하여 간단한 플러그인 제작을 해보겠습니다.

 

제가 추천드리는 코딩 공부하는 방법은 클론 코딩입니다.

 

실행되는 코드들을 그대로 따라 타이핑을 반복하다 보면 왜 이런 위치에 이러한 코드를 사용하는지 이해가 될 때가 생길 것입니다.

 

오늘은 모든 코드들을 이해하기보다는 이런 식으로 플러그인을 제작하는구나!라는 생각 정도로 가볍게 글을 보시기를 추천드립니다.

 

 

 

 

 

먼저 프로젝트를 생성하는 방법에 대해서 알려드리겠습니다. 

 

앞으로 나오게 될 프로젝트 이름, 클래스 이름, 패키지 이름 등은 오류를 방지하기 위해

모두 영어로 작성드리는 것을 추천합니다.

 

이클립스를 킨 후 사진을 참고하여 프로젝트를 생성해주세요.

 


6a4da653fcb45218bde12319a71cef7a.jpeg


표시한 부분에 플러그인 이름을 적어주세요. (같은 제목으로 생성 불가능)

 


6a4da653fcb45218bde12319a71cef7a.jpeg


프로젝트를 생성하고 , 마인크래프트 핵심 파일을 라이브러리로 등록하는 과정입니다.

저는 1.12.2를 기준으로 하겠습니다.

마인크래프트 서버 구동기가 있는 파일에서 .jar 파일을 찾아서 등록하면 됩니다.

 


6a4da653fcb45218bde12319a71cef7a.jpeg6a4da653fcb45218bde12319a71cef7a.jpeg


 

아래와 같이 나온다면 라이브러리로 등록이 완료된 것입니다. 

finish버튼을 눌려 프로젝트 생성을 마무리해줍니다.

 


6a4da653fcb45218bde12319a71cef7a.jpeg


 

다음으로는 패키지, 클래스를 생성하겠습니다.

 다음 사진을 참고하여 따라 해 주세요.

 


e3fce80615cde3516505f16b0ae619b2.jpeg


 

Name에는 자신의 블로그 주소를 거꾸로 작성하거나 / com.이름.플러그인이름 으로 하시는 것을 추천드립니다.

package명은 다른 플러그인과 중복될 경우 에러가 발생하게 되므로 겹치지 않게 주의해서 작성해야 합니다.


6a4da653fcb45218bde12319a71cef7a.jpeg


 

패키지 생성이 완료되었습니다. 다음은 클래스를 생성하겠습니다.

 



대문자, 소문자를 잘 구분하여 작성해주세요! class의 맨 앞 문자는 대문자로 하는 게 규칙입니다. 

 


6a4da653fcb45218bde12319a71cef7a.jpeg


 

클래스 생성이 완료되었으면 드디어 코드를 작성할 시간입니다.

먼저 정상적으로 생성이 되었는지 확인해 봅시다.

 


6a4da653fcb45218bde12319a71cef7a.jpeg


빨간색으로 표시된 부분 / 파란색으로 표시된 부분들이 서로 같다면 정상적으로 생성된 것입니다.

파란색 부분이 패키지 이름, 빨간색 부분이 클래스 이름입니다. 잠시 후 사용될 예정이니 위치를 잘 기억해두세요!

 

 

형광펜으로 표시한 부분을 제외하고 아래와 똑같이 입력해주세요.

아래 코드를 전부 복사해서 붙여 넣기 해도 좋습니다.

 


6a4da653fcb45218bde12319a71cef7a.jpeg


import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
    
    ConsoleCommandSender consol = Bukkit.getConsoleSender();
    
    @Override
    public void onEnable() {
        
        consol.sendMessage( ChatColor.AQUA + "[플러그인 활성화 중 입니다.]");
        
        getServer().getPluginManager().registerEvents(this, this);
        
    }
    
    @Override
    public void onDisable() {
        
        consol.sendMessage( ChatColor.AQUA + "[플러그인 비활성화 중 입니다.]");

    }
    
    @EventHandler
    public void join(PlayerJoinEvent e) {
        
        e.setJoinMessage( ChatColor.RED + "입장했습니다!" );
        
    }
    
}

 

코드 작성이 끝났으면 plugin.yml 파일을 생성해보겠습니다.

 



다음과 같이 plugin.yml이라는 파일을 생성해주세요.

 


6a4da653fcb45218bde12319a71cef7a.jpeg


파일이 생성되었으면 아래와 같이 해주세요.



 

파일이 열렸으면 아래와 같이 작성해주세요.

 

main : 패키지명.Main

name : 플러그인이름

version : 1.0.0

author : 제작자

description : 설명

 


6a4da653fcb45218bde12319a71cef7a.jpeg


띄어쓰기, 소문자 대문자 전부 다 중요합니다. 형식이 틀리게 될 경우 정상적으로 작동되지 않습니다. 

main의 경우 지금 작성하고 있는 패키지.Main으로 작성하셔야 합니다.

저와 똑같이 작성하면 안 됩니다!

 

여기까지 하면 플러그인을 저장할 준비가 모두 끝났습니다.

이제 플러그인을 마인크래프트에 적용해보겠습니다.

 


6a4da653fcb45218bde12319a71cef7a.jpeg


JAR 파일을 저장할 경로는 마크 서버 폴더 안의 plugins으로 지정해주세요.

 

저장이 완료되었으면 버킷을 실행해주세요.

 


4f6ed6efb916034d1e0fd36b1068d6bb.jpeg


 


6a4da653fcb45218bde12319a71cef7a.jpeg


 플러그인에서 설정한 대로 전부 정상적으로 작동되는 것을 볼 수 있습니다!

 

만약 오류가 난다면

1. 라이브러리 등록이 정상적으로 되었는지 확인하시기 바랍니다.

2. Main.java 파일이 정상적으로 작성되었는지 다시 한번 확인 하시기 바랍니다.

(빨간색, 노란색 줄이 뜨면 잘못 입력했을 가능성이 큽니다.)

3. plugin.yml 파일이 정상적으로 작성되었는지 다시 한번 확인하시기 바랍니다.

4. plugin.yml 파일의 생성 위치를 확인하시기 바랍니다. 

(src 폴더가 아닌 프로젝트 폴더에 들어있어야 합니다.)

 

 

 

오류가 난다면 오류 내용을 덧글로 남겨주시면 최대한 빨리 답변해드리겠습니다. 

 

 

 

오늘 강좌는 여기서 마치도록 하겠습니다! 

 

다음 강의에서는 오늘 작성한 플러그인을 좀 더 발전시키는 과정과 함께

JAVA에서의 데이터 타입, 변수 등에 대해서 알려드리겠습니다.

 

 

 

 

아래 코드는 어떤 역할을 하는지 주석을 달은 코드입니다. 참고하시길 바랍니다!

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {
    
    ConsoleCommandSender consol = Bukkit.getConsoleSender();
     // 버킷의 콘솔을 선언하고 대입하는 과정입니다.
    
    @Override
    public void onEnable() {    // 버킷이 켜질때 실행되는 부분입니다.
        
        consol.sendMessage( ChatColor.AQUA + "[플러그인 활성화 중 입니다.]");
          // 콘솔에 메시지를 출력합니다
        
        getServer().getPluginManager().registerEvents(this, this);
        // 서버의 플러그인매니저에 이벤트를 등록합니다.

    }
    
    @Override
    public void onDisable() {    // 버킷이 꺼질때 실행되는 부분입니다.
        
        consol.sendMessage( ChatColor.AQUA + "[플러그인 비활성화 중 입니다.]");
         // 콘솔에 메시지를 출력합니다

    }
    
    @EventHandler
    public void join(PlayerJoinEvent e) {    // 플레이어가 입장할때 실행되는 부분입니다.
        
        e.setJoinMessage( ChatColor.RED + "입장했습니다!" );
         // 플레이어의 입장 메시지를 바꿉니다.
        
    }
    
}

 




2개의 댓글

아글
2020.08.22

이미지가 다 같은것 같읍니다..

cch
2020.08.24
@아글

블로그 글을 그대로 복사하여 옮겼는데, 한디포 글쓰기 과정 중 이미지가 제대로 적용이 안된 것 같네요!

뉴스 및 창작물
/files/thumbnails/483/916/003/262x150.crop.jpg?20241127115329

레드스톤

[노트블럭 커버] 뉴진스 - ETA 2

노트블럭전문가

2024-11-27

0

/files/thumbnails/150/925/003/262x150.crop.jpg?20241123005717

건축

응답하라 1988 ?

팀뉴일리시

2024-11-23

4

/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 6

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 5

물귀신

2024-10-06

3