프로그래밍/마인크래프트 서버, 플러그인

[마크 플러그인 강의] 플러그인 개발 전 알아두어야 할 것들

Lou Park 2020. 12. 1. 21:16

취미 삼아 마인크래프트(Minecraft) 플러그인을 개발해본적이있는데,

제대로 된 국내 자료가 잘없어서 아쉬웠던 기억이있습니다.

그래서 마인크래프트 플러그인을 만들기 전에 알아둬야 할것들을 정리 해 보려고합니다.

 

프로그래밍 언어를 아무것도 몰라요. 그래도 되나요?

Java가 그래도 쉬운 언어이기때문에 C라도 할 줄 아신다면 충분히 가능합니다.

만약에 그냥 강의만 보고 따라서 타이핑 하겠다하시면 언어를 안배우셔도 됩니다.

응용을 하는건 눈치껏..ㅎㅎ 하셔야할겁니다.

 

마인크래프트 플러그인 개발 툴은 무엇인가요?

Java를 편하게 다룰 수 있는 툴이라면 뭐든지 됩니다.

일반적으로 InteliJEclipse를 많이 사용하는 모습을 보실 수 있는데,

InteliJ가 조금더 사용하기 편리해서 그걸 추천드립니다.

다운로드 링크 걸어드리도록 하겠습니다.

www.jetbrains.com/idea/download/download-thanks.html?platform=windows&code=IIC

 

Thank you for downloading IntelliJ IDEA!

Code-centric IDE, focused on your productivity. Full Java EE support, deep code understanding, best debugger, refactorings, everything right out of the box...

www.jetbrains.com

Java말고 Kotlin으로도 개발이 되나요?

네 됩니다. 다만 Kotlin으로 개발시 최종적으로 만들어지는 jar 파일의 용량이 몇 MB정도 늘어나게 됩니다.

 

처음 프로젝트 세팅은 어떻게 해야하나요?

프로젝트 세팅을 아이콘만 클릭하면 만들어주게 하는 InteliJ 플러그인이 있습니다 :)

아래 링크에서 다운받으실 수 있어요.

plugins.jetbrains.com/plugin/8327-minecraft-development

 

그럼 이 플러그인을 깔아서 어떻게 새 프로젝트를 만드느냐!

해당 플러그인의 공식 홈페이지에서 도움말을 찾을 수 있습니다. 링크는 아래에 있습니다.

minecraftdev.org/docs/create.html

 

여러 Bukkit들 중에 어떤걸로 개발해야 할까요?

Craftbukkit, Spigot...등등 많은 버킷이 있는데요, 자기가 적용할 서버의 Bukkit으로 선택하시면 됩니다.

일반적으로 Spigot을 많이 사용하는 것 같더라고요. 저도 Spigot으로만 개발 해봤네요!

 

플러그인 프로젝트 구조가 어떻게 되죠? 무슨 파일을 건드려야 하나요?

제 프로젝트를 예를들어서 하나하나 설명해드리겠습니다.

 

프로젝트 구조 1-1

사진을 보시면 src > main > java 폴더가 있고, 그안에 많은 파일들과 폴더들이있는데요, 이부분이 소스부분입니다.

 

src > main > java > resources > plugin.yml

식당에가면 메뉴판을 받습니다. 이 식당에 뭐가 있는지 이름이 뭐고, 전화번호, 식재료 원산지가 어딘지 다 알 수 있습니다. 이 역할을 하는 것이 plugin.yml 입니다.

여기서는 플러그인의 이름, 버전, 시작 파일명, 의존 라이브러리, api 버전, 커맨드, 권한 등을 정의하게됩니다.

코드와 함께 자세히 볼까요?

 

plugin.yml 내용 1-2

  • name: RailKorea라고 되어있는데, 이게 이 플러그인의 이름입니다.
  • version: 이상한 달러 기호와 함께 표시되어있는데요, 이건 프로젝트 구조를 다시보시면 pom.xml 이라는 파일을 찾으실 수 있을 겁니다. 거기에 정의된 project.version값을 가져와 쓴다는 의미입니다.
  • main: 플러그인 시작시 실행할 파일이 무엇인지에 대한 정의입니다. 저는 gold24park > railkorea에 위치한 Main 파일을 시작지점으로 하기 때문에 저렇게 설정해두었습니다.
  • depend: 의존하는 라이브러리입니다. 어떤 기능을 쉽게 구현하기 위해서 다른사람이 작성한 코드를 이용하고 싶을때 라이브러리의 도움을 받습니다. 의존 라이브러리가 없을 경우 안적어도 됩니다.
  • api-version: 이용중인 bukkit 버전입니다.
  • commands: 플러그인에 명령어를 추가하고 싶다면 여기 아래에 정의해 두어야합니다. 제가 적은 money, create_merchant, create_buyer 등등이 모두 명령어입니다 :) 아 물론 한글도 가능합니다!
  • permissions: 권한과 관련된 부분입니다. 어떤 특정 명령어는 op만 쓸 수 있도록 하고싶을때 저는 op 권한이 있는 유저를 "admin"이라고 코드상에서 부르기로 한거죠.
pom.xml

이부분은 maven으로 프로젝트를 관리하는데 쓰입니다. 저걸 작성하실 일은 없으니 걱정안하셔도됩니다. api version을 업데이트 하고 싶거나, 프로젝트에 정의할 버전 명을 바꾸거나 할때 숫자 바꾸는 정도, 복붙하는 정도만 건드리면 빌드시에 필요한 라이브러리를 자동으로 받아주고 관리해주는 툴입니다.

 

config.yml

 

config.yml 1-3

config.yml 파일은 한마디로 저장소라고 생각하시면됩니다. DB를 구축하기 까다로우니 여기서 DB의 역할을 하기도 하고요. config는 언제든지 추가/변경이 가능합니다. store_name.merchant 이런식으로 접근해서 "상점"이라는 문자열을 얻어올 수 있습니다. map_book_meta처럼 배열 형식의 데이터도 담을 수 있습니다.

 

대망의 Main.java

 

Main.java 1-4

이게 바로 플러그인을 실행하는 Main 코드입니다!

반드시 JavaPlugin을 상속 받아야하고, 파일에 보시면 onEnable(), onCommand(), onDisable() 메소드가 override 되어있습니다.

 

onEnable()

onEnable()은 이름처럼 플러그인이 활성화 되었을때 호출되는 부분입니다. 서버가 켜지면서 플러그인이 로드되는데, 이때 저기에있는 코드들이 실행됩니다. 저는 이벤트 리스너들과, 초기 설정 하는 부분, 그리고 Configuration을 불러오는 부분들을 넣어두었습니다.

getLogger().info("~")를 하게되면 서버에 로그가 찍혀서 알아보기 쉽습니다.

 

onCommand()

유저가 입력한 커맨드가 내려오는 부분입니다. 앞서plugin.yml에 명시한 커맨드만 내려오니 주의하세요!

예를 들어 유저가 게임 콘솔입력창에서 /money 5000 이라는 커맨드를 작성했다면 저기에서 label 부분이 "money"라고 나오고, args[0]은 "5000"이 됩니다.

이건 조금 더 나간 설명이지만, sender를 Player 객체로 캐스팅하면 어떤 플레이어가 그 명령어를 쳤는지도 확인 가능합니다.

 

onDisable()

서버 종료나 모종의 이유로 플러그인 종료시 호출되는 부분입니다.

 

어떤 기능을 할 수 있는지 모르겠어요.

당연한 말이지만...강의나 스크립트로 구현한 것들은 다 플러그인으로 만들 수 있어서 스크립트에서 영감을 얻거나!

개발하실 때 막히는 부분이 있다면 문서를 읽어보시면 도움이 됩니다. 가능한 모든 액션, 파라미터 내용들, 이벤트들이 잘 정리되어있습니다.

아래는 Spigot 1.16.4 Document 주소입니다.

hub.spigotmc.org/javadocs/bukkit/

 

Overview (Spigot-API 1.16.4-R0.1-SNAPSHOT API)

Bukkit, the plugin development framework. The documentation is for developing plugins and is split into the respective packages for each subject matter. This documentation does not cover running a server, contributing code back to the project, or setting u

hub.spigotmc.org

코드 작성은 다 했어요. 근데 빌드는 어떻게 해요?

InteliJ 기준으로 Build > Build Artifacts > Action [Build] 하시면 out > artifacts > [본인 플러그인 명] 폴더 아래 jar 파일이 만들어질겁니다.

 

* 활성화 되지 않을 경우 Project Structure > Artifacts > empty JAR 파일 생성

https://stackoverflow.com/questions/36303535/intellij-build-build-artifacts-deactivated

 

이해가 좀 되셨나요?

개발하면서 여러분이 꼭! 보시게 될 파일들만 집어서 설명해드렸습니다.

언젠가 시간이 좀 난다면 간단한 기능들 강의를 해보도록하겠습니다.

읽어 주셔서 감사합니다!