Bukkit에서 NMS를 사용하는 방법

Bukkit에서 NMS를 사용하는 방법

Minecraft는 다양한 플러그인(게임 플레이 경험을 변경하는 데 사용할 수 있음)을 환영하지만 게임의 일부 요소는 플러그인 조작으로부터 보호됩니다. Net.Minecraft.Server(NMS)는 게임에 중요한 서버 코드를 포함하고 있으므로 이러한 보호 패키지 중 하나입니다. 이 코드는 Minecraft의 개발자인 Mojang에서 직접 가져오며 플레이어가 액세스할 수 없도록 되어 있습니다.

Bukkit을 사용하여 플레이어는 NMS 코드 주위에 추상화 계층을 생성할 수 있습니다. 이를 통해 게임 플레이에 필수적인 코드베이스를 직접 변경하지 않고도 서버 코드와 상호 작용하는 플러그인을 개발할 수 있습니다. 플러그인에서 사용하고자 하는 코드를 볼 수 있게 해주면서도 코드를 직접 변경하지 못하게 하는 장벽 역할을 하는 창이라고 생각하시면 됩니다.

Minecraft의 NMS에서 Bukkit을 사용하는 방법을 살펴보겠습니다.

시작하기 전에 – Bukkit에 대해 알아야 할 사항

Bukkit은 Minecraft의 멀티플레이어 측면을 경험하는 방식을 변경하는 플러그인을 만들고 사용할 수 있게 해주는 API입니다. 적어도 그랬다. Bukkit의 마지막 버전은 2016년에 출시되었으며 Spigot이라는 다른 API를 위해 중단되었습니다. Bukkit과 유사하게 작동하면서 더 나은 서버 성능을 제공합니다.

따라서 플러그인에 Bukkit을 사용하려면 오래된 버전의 Minecraft를 플레이하고 Bukkit이 대체 API만큼 좋지 않다는 사실을 받아들여야 합니다. 이러한 희생을 기꺼이 받아들인다면 필요한 것은 다음과 같습니다.

  • JDK(Java Development Kit) 7 이상(가장 권장되는 JDK 8 포함)

이것으로 일부 플러그인을 만들 준비가 된 것입니다.

Minecraft용 Bukkit 플러그인을 만드는 방법

Bukkit을 사용하여 Minecraft의 NMS에 액세스하려면 먼저 API를 종속성으로 추가하고, Bukkit이 생성한 플러그인과 상호 작용할 수 있도록 기본 클래스를 설정하고, 플러그인을 로드하는 데 필요한 정보를 Bukkit에 제공해야 합니다. 게임. 각 단계에는 코딩이 필요하며 RIP Tutorial 에서 오는 예제가 있습니다 .

1단계 – Bukkit을 종속성으로 추가

과거에는 Bukkit Repository에서 Bukkit.jar 파일을 다운로드하고 프로젝트의 클래스 경로에 추가하여 Minecraft의 종속성으로 Bukkit을 추가할 수 있었습니다. 리포지토리에 더 이상 액세스할 수 없기 때문에 해당 옵션을 더 이상 사용할 수 없습니다.

고맙게도 게임의 pom.xml 파일을 사용하는 다른 방법이 있습니다. 파일을 열고 다음 줄을 추가합니다.

<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<!--Bukkit API-->
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>{VERSION}</version>
<scope>provided</scope>
</dependency>
</dependencies>

2단계 – 플러그인의 메인 클래스 생성

플러그인은 “JavaPlugin”을 확장하는 데 사용되는 기본 클래스의 단일 인스턴스를 생성할 수 있어야 게임 내에서 플러그인을 인식하고 사용할 수 있습니다. 이 메인 클래스를 Bukkit이 플러그인을 로드하고 조작하기 위해 들어갈 수 있는 문으로 생각하십시오. 대부분은 플러그인의 메인 클래스에 플러그인 자체와 동일한 이름을 지정하여 코딩할 때 메인 클래스를 더 쉽게 참조할 수 있도록 합니다.

RIP Tutorial의 다음 예제 코드는 “MyPlugin”이라는 플러그인의 기본 클래스 예제를 제공합니다.

package com.example.myplugin; //{$TopLevelDomain}.{$Domain}.{$PluginName};
import org.bukkit.plugin.java.JavaPlugin;
public final class MyPlugin extends JavaPlugin {
@Override
public void onEnable() {
//Called when the plugin is enabled
getLogger().info("onEnable has been invoked!");
}
@Override
public void onDisable() {
//Called when the plugin is disabled
getLogger().info("onDisable has been invoked!");
}
}

다른 클래스에서 플러그인에 액세스하기

생성한 기본 클래스가 아닌 다른 클래스를 통해 플러그인에 액세스하고 싶을 수 있습니다. 이는 단일 Minecraft 게임에서 여러 플러그인에 액세스하는 데 도움이 될 수 있습니다.

그러기 위해서는 먼저 다른 클래스가 액세스할 수 있도록 Bukkit을 사용하여 생성한 기본 클래스의 인스턴스를 저장해야 합니다. 다시 한 번, 다음 예제 코드는 RIP Tutorial에서 가져온 것이며 “MyPlugin” 클래스 이름을 사용합니다.

public class MyPlugin extends JavaPlugin {
private static MyPlugin instance; //Effectively final variable containing your plugin's instance
public MyPlugin(){
if(MyPlugin.instance! = null) { //Unnecessary check but ensures your plugin is only initialized once.
throw new Error("Plugin already initialized!");
}
MyPlugin.instance = this; //A plugin's constructor should only be called once
}
public static MyPlugin getInstance(){ //Get's your plugin's instance
return instance;
}
//your other code...
}

인스턴스가 준비되면 “getInstance()” 명령을 사용하여 메인 클래스(Bukkit을 통해 생성됨)에 액세스할 수 있습니다. 다음은 RIP Tutorial의 “MyPlugin” 메인 클래스를 사용하는 예입니다.

public class MyOtherClass {
public void doSomethingWithMainClass(){
MyPlugin.getInstance().getLogger().info("We just used MyPlugin");
}
}

3단계 – plugin.yml 파일 만들기

plugin.yml 파일에는 플러그인에 대한 중요한 정보가 들어 있습니다. 즉, 플러그인의 기본 구성 파일 역할을 합니다. 이 파일이 없으면 Bukkit은 플러그인을 Minecraft에 로드하는 데 필요한 정보를 얻지 못하므로 플러그인 로드에 실패하고 게임이 충돌할 수 있습니다.

이 파일에는 다음 세부 정보가 포함되어야 합니다.

  • 이름 – 플러그인에 지정한 이름(즉, RIP Tutorial의 “MyPlugin”)이며 로그 메시지와 플러그인 목록에 표시됩니다.
  • 버전 – 이 필드를 사용하여 1.0.0부터 시작하여 플러그인을 변경하거나 편집함에 따라 올라가는 플러그인의 버전 기록을 나타냅니다.
  • Main – Bukkit이 플러그인에 들어갈 수 있도록 “JavaPlugin”을 확장하는 플러그인의 메인 클래스 이름을 포함합니다. RIP Tutorial 예제에서 이 이름은 위의 기본 클래스 코드에서 볼 수 있는 “package com.example.myplugin”입니다.
  • 설명 – 플러그인이 수행하는 작업에 대한 기본 설명입니다.
  • 저자 – 저자는 한 명 또는 여러 명일 수 있으며, 후자는 [저자1, 저자2, 저자3]과 같이 대괄호와 쉼표로 표시됩니다.
  • 기여자 – 이 섹션을 사용하여 플러그인에 기여한 모든 사람을 기록하고 형식은 “작성자” 섹션과 동일합니다.
  • 웹사이트 – 연결할 웹사이트가 있거나 사람들을 플러그인 페이지 또는 GitHub 리포지토리에 연결하려는 경우 여기에 URL을 입력할 수 있습니다.
  • API-Version – 여기에 사용하는 Bukkit API의 버전을 입력합니다. API 버전을 입력하지 않으면 Minecraft는 레거시 플러그인을 로드하고 있다고 가정합니다. 플러그인은 계속 작동할 수 있지만 로드 시 콘솔에 레거시 버전이라는 경고가 표시됩니다.

다음은 이 문서에서 사용된 RIP 자습서 코드에 사용된 명명 규칙을 기반으로 하는 plugin.yml 파일의 예입니다.

name: MyPlugin
version: 1.0.0
main: package com.example.myplugin
description: A test plugin for Minecraft
author: RIP Tutorial
website: https://riptutorial.com/bukkit
api-version: 1.17

Bukkit이 NMS 액세스 및 사용에 적합합니까?

이를 통해 Bukkit 의존성을 생성하고 Bukkit이 플러그인으로 들어가는 문 역할을 하는 기본 클래스를 빌드했으며 Bukkit이 플러그인이 수행하는 작업을 확인하는 데 사용할 수 있는 plugin.yml 파일을 갖게 되었습니다. 그러나 Bukkit이 너무 오래되어 Bukkit을 효과적으로 사용하려면 아주 오래된 버전의 Minecraft를 실행해야 하므로 그렇게 하고 싶지 않을 수도 있습니다. 대부분은 이미 더 나은 성능을 제공하면서 Bukkit이 수행한 작업의 대부분을 반영하는 Sprigot으로 이동했습니다.

여전히 Bukkit을 사용하여 플러그인에 액세스하고 싶다면 더 최신 API보다 먼저 Bukkit을 선택한 이유는 무엇입니까? Minecraft 경험을 향상시키기 위해 어떤 종류의 플러그인을 사용하십니까? 아래 댓글 섹션에서 모든 정보를 알려주세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다