이전에 마인크래프트 플러그인을 껍데기만 만들어서 활성화라도 시켜보고자 했지만 실패했었다. 그런데 최신 버전을 사용하면서 필요한 플러그인이 점점 부족해져 직접 한번 손이나 대보자는 의미로 새로 시작해보기로 했다.
이번엔 밑의 글을 참고해서 해보기로 했다.
https://fred16157.github.io/java/java-minecraft-plugin-start/
자바는 역시 Intellij라 생각하기에, Intellij로 Gradle 프로젝트를 생성시켜 준다.
마크가 1.8버전의 자바로 구동되는 것으로 알아 플러그인의 자바 버전도 맞추어 주었다.
spigotmc API를 연결해주기 위해 Gradle를 수정해준다.
이와 관련된 자세한 내용은 https://www.spigotmc.org/wiki/spigot-maven/ 에 포함되어 있다.
plugins {
id 'java'
}
group 'org.jong_plugin'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
maven {
url "https://hub.spigotmc.org/nexus/content/repositories/snapshots"
}
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
implementation "org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT"
}
test {
useJUnitPlatform()
}
위와 같이 해주고 나니 'BUILD SUCCESSFUL in 11s' 가 확인되었다.
spigot에서는 'plugin.yml'파일이 없으면 플러그인으로 인식하지 않는다고 한다.
main/resources/plugin.yml 파일을 만들어준다.
name: JongPlugin
version: 1.0
main: com.jong_plugin.JongPlugin.JongPlugin
참고한 블로그에서는 main에 적을 것을 모르겠다면 com.().(plug name).(plug name)으로 하기를 권장하기에 위와 같이 해주었다.
진입점 클래스를 생성할 패키지가 필요하다.
사진과 같이 패키지와 클래스를 만들었다.
플러그인이 실행되고, 종료될 때 표시될 로그를 생성한다.
import org.bukkit.plugin.java.JavaPlugin;
public class JongPlugin extends JavaPlugin {
@Override
public void onEnable(){
//플러그인 활성화
getLogger().info("Jong Plugin 활성화");
}
@Override
public void onDisable(){
//플러그인 비활성화
getLogger().info("Jong Plugin 종료");
}
}
우측의 Gradle > jar 순으로 실행하면 jar 파일이 생성된다.
혹시 한글이 깨지면서 오류가 발생한다면,
사진과 같이 UTF-8로 3개 모두 바꾸어 주고 Run창을 닫아주고 다시 빌드 하니 정상적으로 되었다.
정상적으로 빌드가 되었는지 확인하기 위해 (프로젝트 경로)\jong_plugin\build\libs 로 이동하여 파일을 확인해본다.
일단 오류 없이 정상적으로 빌드 된 것 같다.
필자는 라즈베리 파이에서 구동하기 때문에 paper를 이용한다. spitgo 기반이기 때문에 플러그인의 호환 문제는 없을 것이라 생각한다.
버킷 파일 다운은
https://papermc.io/downloads 이곳에서
서버 jar 파일을 다운로드하고 나면 eula.txt 파일을 같은 폴더에 생성해 주어야 한다.
eula=true
해당 파일의 내용은 위와 같다.
버킷을 실행시키기 위한 .bat 파일도 생성해 준다.
@echo off
java -Xmx2G -Xms2G -jar paper-1.16.5-500.jar
pause
위와 같이 해주면서 서버에 할당할 램의 크기와 파일 이름은 직접 맞게 수정해 준다.
플러그인 파일을 plugins 폴더에 넣어주고 reload confirm을 통해 다시 로드해준다.
확인해보니 잘 실행된다. 그런데 한글이 깨지는 것이 보인다.
별 짓을 다 해도 해결이 안 되었는데 build.gradle에 다음 코드를 추가하고 정상적으로 작동하였다.
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
오.. 취미로 쓴 제글이 다른 사람에게 참고가 되다니 놀랍네요 ㅋㅋ
라즈베리파이에서 돌리는 것도 좋은 아이디어인 것 같고요