본문 바로가기
코딩

[마인크래프트] 서버 플러그인 만들기 1편

by KRonae 2022. 10. 30.
반응형

안녕하세요 크로네입니다.

 

오늘은 마인크래프트 서버에서 플러그인을 만드는 방법을 알려드리겠습니다.

 

1. 설치

일단 먼저 서버 하나를 열어줍니다. (현재 다른 플러그인은 없습니다)

그리고 IntelliJ 라는 프로그램을 설치합니다.

https://www.jetbrains.com/ko-kr/idea/download/

위의 웹사이트에 들어가서 IntelliJ 를 다운로드 합니다.

Ultimate는 유료, Community는 무료입니다.

Community는 무료인데도 플러그인을 만드는데에는 무리가 없습니다.

그래서 저는 Community 버전으로 무료 설치해 보겠습니다.

자 이제 설치가 완료되었습니다.

이제 IntelliJ 를 켜서 코딩을 시작해 볼까요?

2. 프로젝트 만들기

IntelliJ의 메인화면입니다.

왼쪽에 있는 Plugins에 들어갑니다.

그리고 minecraft 를 검색하여 Minecraft Development를 설치합니다.

저는 혹시 모르니 Minecraft NBT Support 와 Minecraft Resource Support 도 설치 하겠습니다.

Install 버튼을 눌러 모두 설치하면 위쪽에 Restart IDE 가 나옵니다.

왜냐하면 Minecraft Development 를 설치하면 IntelliJ 를 다시 시작해야 하기 때문입니다.

그럼 Restart IDE 버튼을 눌러 IntelliJ 를 다시시작해 봅시다.

 

다시시작하면 IntelliJ 메인화면을 다시 볼 수 있습니다.

New Project 를 눌러 새 프로젝트를 만듭니다.

 

Minecraft Development 플러그인을 설치했다면

왼쪽에 Minecraft 를 눌러줍니다.

그리고 플랫폼을 선택합니다.

저는 Paper 를 쓰기 때문에 3번째에 있는 Paper Plugin 을 누르고

아래쪽에 Next 를 클릭하여 다음으로 넘어갑니다.

GroupId 에는 아무거나 적으세요. 저는 제 닉네임을 적겠습니다.

그리고 ArtifatId 는 플러그인 이름과 관련된 이름을 적으시면 됩니다.

저는 test 라고 하겠습니다.

 

정확히는 저도 모르지만 GroupId, ArtifactId 에서 띄어쓰기나 겹치는 글자를 적으면

오류가 날수도 있으니 되도록이면 하지 않는것을 추천드립니다.

 

어쨌든 Next 를 누르고

플러그인 이름, 메인 클래스 이름, 설명, 제작자, 웹사이트, 접두사 등을 설정합니다.

Minecraft Version 은 꼭 서버에 맞는 버전으로 설정하세요.

 

Next를 누르고 마지막으로 프로젝트 이름과 저장할 경로를 설정합니다.

 

그럼 잠시 후에 아래와 같은 화면이 나올겁니다.

우리는 이 곳에서 코딩을 하게 될겁니다.

3. 실습 - 1 이벤트 핸들러

현제 코드는 아래와 같습니다.

package kronae.test; // kronae.test 는 사람마다 다름

import org.bukkit.plugin.java.JavaPlugin;

public final class Test extends JavaPlugin { // class 다음에 적힌 Test 는 사람마다 다름

    @Override
    public void onEnable() {
        // Plugin startup logic

    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

일단 위쪽 import 부분에 다음과 같은 코드를 추가해서 Listener, Player, EventHandler 를 import 합니다.

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

그리고 메인 클래스 부분에 implements Listener 를 추가해줍니다.

그럼 메인함수 윗부분의 코드는 다음과 같습니다.

public final class Test extends JavaPlugin implements Listener {
// class 다음에 적힌 Test 는 플러그인 이름마다 다름

그리고 onEnable 에 다음과 같은 코드를 추가합니다.

getServer().getPluginManager().registerEvents(this, this);

그럼 이제 이벤트 핸들러 를 사용할 준비는 모두 완료되었습니다.

 

다음과 같은 코드를 메인 클래스에 적기만 하면 이벤트를 실행할 수 있습니다.

@EventHandler
public void 아무거나(이벤트 event) { // 아무거나는 겹치지 않아야 함
    Player player = event.getPlayer(); // 플레이어 이벤트에 경우 사용
}

저는 한번 PlayerMoveEvent 를 이용해 움직였을때에 작동하는 핸들러를 만들어 보겠습니다.

@EventHandler
public void OnPlayerMove(PlayerMoveEvent event) {
    Player player = event.getPlayer();
}

"어? 그런데 왜 오류가..."

왜냐하면 PlayerMoveEvent 를 import 하지 않았기 때문입니다.

자동완성기능을 이용하면 자동으로 윗쪽에 PlayerMoveEvent 가 import 된것을 확인할 수 있습니다.

그럼 이제 오류도 안났겠다, 한번 서버에서 실행해 볼까요?

"근데 서버에서 실행하려면 .jar 파일이 필요한데 jar파일은 어디에서 구하죠...?"

아래를 따라하면 됩니다.

 

1. Artifact 설정 (한번만)

먼저 프로젝트에서 우클릭, Open module settings 를 누릅니다. (지금 한번만 하면 되는 작업입니다)

그리고 Artifacts 에서 + 를 누르고 JAR, From modules with dependencies... 을 순서대로 누릅니다.

그럼 아래와 같은 창이 뜨는데 아무것도 건드리지 말고 OK 를 누릅니다.

그럼 잠시 뒤에 다음과 같이 창에 compile output 이 나옵니다.

OK 를 눌러 나가줍니다.

 

2. 망치 (이것도 한번만)

이제 Build 를 해봅시다.

오른쪽 위에 있는 망치를 눌러줍니다.

그럼 오른쪽 아래에서 Build 가 진행됩니다. 저기에 있는 글자가 사라지면 완료된겁니다.

3. Build (사용할때 마다)

이제 Build를 해봅시다.

이 작업은 컴파일 할때마다(사용할때마다) 해야하는 작업입니다.

위에서는 한번만 하면 되는 작업이였지만

이번 작업은 많이 사용하게 될겁니다.

 

먼저 Build - Build Artifacts 에 들어갑니다.

그 다음 test:jar 에서 build합니다.

그럼 이번에도 아래에 로딩바가 생겼다가 완료하면 없어집니다.

그럼 끝입니다.

"어... 그래서 jar 파일은 어디에 있죠?"

 

저번에 Module settings 에서 설정한 곳에 있습니다.

빌드가 성공했다면 해당 위치에 다음과 같이 파일이 하나 있을겁니다.

이 파일을 잘라내기 해서 서버 플러그인 폴더에 넣습니다.

그 다음 서버에서 서버를 리붓(껐다가 다시 키는 것) 합니다.

권장하지는 않지만 저는 reload confirm 명령어를 이용하겠습니다.

이 작업은 더 빠르긴 하지만 많은곳에서 권장하는 방법은 아닙니다.

 

그럼 결과를 확인해 볼까요?

 

2편에 계속...

반응형

댓글