상세 컨텐츠

본문 제목

[Minecraft] Spigot Plugin 개발 환경 설정

Metaverse on Minecraft/개발 환경

by muckworm 2021. 12. 21. 19:37

본문

1. 준비(Prerequisite)

 - JAVA: Java17 (블로그 기준 17.0.1 2021-10-19 LTS)

 - IDE: IntelliJ IDEA (블로그 기준 2021.2.3)

 

2. 프로젝트 생성

 - Intellij IDE에서 Top 메뉴에 File - New - New Project 선택

   - Java 밑에 Kotlin/JVM 체크박스 선택

   - Use library는 KotlinJavaRuntime 선택(Default)

   - Next 누른 후 적당한 Project 이름 설정

JVM 프로젝트 생성 이후 Project Window 상태

3. Spigot-API 설정

 - spigot에서 환경설정 툴을 제공한다.

 - project root(tutorial) 밑에 server/spigot 폴더를 생성한다.

 - BuildTool을 다운받고 실행한다.

$ cd server/spigot
$ curl -L http://bit.ly/spigotmcbuild -o BuildTools.jar
$ java -jar BuildTools.jar

 - 다운받고 빌드하느라 3~4분 정도 시간이 걸린다.

    - minecraft의 코드를 decompile 한다. (.class -> .java)

    - CraftBukkit의 Patches를 적용한다. (마인크래프트에 Plugin을 붙일 수 있는 통로를 만드는 과정)

    - Patch가 적용된 java 코드들을 다시 빌드한다.

    - Plugin을 만들기 위한(API) Library를 빌드한다.

    - Spigot server (spigot-1.18.1.jar)를 빌드한다.

 - 빌드가 끝난 후 project window 모습

BuildTools.jar 실행 후 project window 모습

4. spigot 서버 실행

  - 전 단계 빌드에서 생성된 spigot-1.18.1.jar에서 마우스 우클릭 후 Modify Run Configuration.. 실행

  - Working directoryserver로 설정한다. 서버를 run하면 여러 파일들이 자동생성 되는데, 

    별도 디렉토리 설정을 안해주면, BuildTools에서 생성된 /server/spigot/ 밑에 파일들과 짬뽕되기 때문에

    한 단계 위의 directory로 구분해 주는 것이다. 

Working directory에 server만 추가로 설정해준다.

  - spigot-1.18.1.jar를 우클릭 한 뒤, Run spigot-1.18.1.jar를 선택해서 spigot 서버를 실행한다.

  - /server 밑에 eula.txt가 생겼다. 파일을 열어서 false -> true로 바꾸주고 다시 서버를 실행한다.

    (End User License Agreement 파일로, 라이센스에 관한 지켜야할 내용이다. 최초 한번만 바꾸면 된다.)

  - 최초에는 없던 서버 설정 파일들이 자동으로 생성되고, 마인크래프트 맵이 만들어진다.

마크 서버 로딩 후 대략 이런 모습

5. Plugin 모듈 생성 및 설정

  - Project 이름에서 우클릭 후 New - Module.. 을 선택

  - Minecraft 선택 후 Spigot Plugin을 체크하고 적당히 GroupId, ArtifactId를 넣는다.

   (아까 BuildTools.jar를 설치 할 때, Intellij의 Minecraft Plugin도 같이 설치됐었다. ^^b)

tutorialmod라는 module을 생성하면 보이는 화면.

  - 마지막 설정이다. 탑 메뉴의 File - Project Structure를 선택한다.

  - Artifacts 선택 후 +를 눌러 빌드 산출물을 추가한다.

  - Jar - From module with dependencies.. 를 선택한다.

  - Module에서 아까 추가했던 module(tutorialmod)을 선택한다. (project가 아니다.)

  - Output directory에서 project이름/plugins를 선택한다.

  - Include in project build를 체크한다.

    (이 과정은 모듈 빌드 후 생성되는 mod 파일 project.jar 파일이 생성되는 위치로,

    빌드 후 바로 서버의 plugins에 만들어지도록 하여, 다음 서버 실행 시에 바로 plugin이

    포함되어 로딩 되도록 하기 위해서 이다.)

  - 탑 메뉴에 Build - Build Project를 선택하여 내가 만든 모듈을 빌드 한다.

   (Build가 완료되면, 위에서 설정했듯이, project/plugins 및에 module.jar가 생성되어 있다.)

 

6. 마인크래프트 실행

  - spigot 서버를 다시 실행한다. (Run spigot-1.18.1.jar)

    서버 로그 마지막에 내가 만든 module.jar가 로딩되었다는 로그를 볼 수 있다. 

  - 멀티 플레이 선택 - 서버 추가

  - 서버 이름을 아무거나 입력하고, 서버 주소에 localhost라고 적는다. (네트워크 상에서 내 PC를 일컷는 말이다.)

  - 직접 빌드한 서버와 mod에 접속했다. 성공을 기원하고 축하한다.

 

7. 부연 설명

 - 모듈 생성 후 생성된 main이라고 할 수 있는 java 파일을 보면, org.bukkit에 있는 API를 사용하는 것을 볼 수 있다.

 - bukkit에 ctrl + 마우스클릭 하면, External Libraries에 spigot-api가 모두 있는 것을 볼 수 있다.

 - JavaPlugin 클래스를 확장하는 방식으로 spigot 서버 시작 시 plugin이 로딩되도록 만들어졌다.

 - Minecraft 모듈로 만들지 않고 일단 Kotlin JVM 모듈로 생성했다면 JavaPlugin 클래스를 참조 못하는 에러가

   발생할 수 있다..  (classpath에 spigot-api-1.18.1-xxxxx.jar 라이브러리를 추가해야 한다.)

 - Minecraft 모듈을 한번 생성하면, 자동으로 External Libraries에 라이브러리가 추가되므로,

   라이브러리 잡느라 쓸데없이 고생하지 않기를 바란다..

 - 당연히 plugin은 여러개가 로딩될 수 있고, 하나의 project에 여러개의 module을 만들어서 개발할 수도 있다.

 

728x90

관련글 더보기

댓글 영역