Bukkit で NMS を使用する方法
Minecraft はさまざまなプラグインを歓迎しますが、 (ゲーム体験を変更するために使用できます)、ゲームの一部の要素はプラグインを管理できません. Net.Minecraft.Server (NMS) は、保護されたパッケージの 1 つです。 ゲームには重要なサーバーコードがあるからです。 このコードは Minecraft 開発者の Mojang から直接提供されたものであり、プレイヤーがアクセスできないようにする必要があります。
Bukkit を使用すると、プレーヤーは NMS コードの周りに抽象化レイヤーを作成できるため、ゲームプレイに必要なコード ベースを直接変更することなく、サーバーのコードとやり取りするプラグインを開発できます。 プラグインで使用するコードを表示できるウィンドウのようなものと考えてください。 また、シールドとしても機能し、コードを直接変更できないようにします。
Minecraft の NMS で Bukkit を使用する方法を見てみましょう。
Contents
始める前に – BUKKIT について知っておくべきこと
Bukkit は、Minecraft のマルチプレイヤー エクスペリエンスを変えるプラグインを作成して使用できるようにする API です。 少なくともそうでした. Bukkit の最新バージョンは 2016 年に登場し、Spigot と呼ばれる別の API に道を譲るために廃止されました. Bukkit と同様に機能しますが、より優れたサーバー パフォーマンスを提供します.
したがって、プラグインに Bukkit を使用します。 古いバージョンの Minecraft をプレイし、Bukkit が代替 API ほど優れていないという事実を受け入れる必要があります。 必要なものは次のとおりです。

- Java Development Kit (JDK) 7 以降、JDK 8 が最も推奨されます。
これで、プラグインを作成する準備が整いました。
Minecraft 用の Bukkit プラグインを作成する方法

Bukkit を使用して Minecraft の NMS にアクセスする前に、API を依存関係として追加する必要があります。 Bukkit が作成したプラグインと対話できるようにする基本クラスをセットアップします。 プラグインをゲームにロードするために必要な情報を Bukkit に提供します。各ステップにはコーディングが必要です。 次の例で RIP チュートリアル.
ステップ 1 – Bukkit を依存関係として追加する
以前は、Bukkit リポジトリから 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 チュートリアルの次のサンプル コードは、「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!");
}
}
別のクラスからプラグインにアクセスする
作成した基本クラスとは異なるクラスを介してプラグインにアクセスしたい場合があります。 これは、1 つの Minecraft ゲームで複数のプラグインにアクセスする場合に便利です。
そうすることで Bukkit を使用して作成した基本クラスのインスタンスを最初に保存して、他のクラスが使用できるようにする必要があります。 繰り返しますが、次のサンプル コードは RIP チュートリアルからのもので、クラス名「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...
}
インスタンスができたら You can access your main class (created via Bukkit) using the “getInstance()” command. RIP チュートリアルの “MyPlugin” メイン クラスを使用した例を次に示します。
public class MyOtherClass {
public void doSomethingWithMainClass(){
MyPlugin.getInstance().getLogger().info("We just used MyPlugin");
}
}
ステップ 3 – plugin.yml ファイルを作成する
plugin.yml ファイルには、プラグインに関する重要な情報が含まれています。 これは、プラグインがプラグインのデフォルト設定ファイルとして機能することを意味します。 このファイルがないと、プラグインを Minecraft に読み込むために必要な情報が Bukkit にないため、プラグインを読み込むことができず、ゲームがクラッシュする可能性があります。
このファイルには、次の詳細が含まれている必要があります。
- 名前 – これはプラグインに付けた名前 (例: RIP チュートリアルの「MyPlugin」) で、ログ メッセージとプラグイン リストに表示されます。
- モデル – このフィールドを使用して、プラグインのバージョン履歴を表示します。1.0.0 から始まり、プラグインを変更または変更すると増加します。
- 主要 – 「JavaPlugin」を拡張するプラグインのメイン クラスの名前を含み、Bukkit がプラグインにアクセスできるようにします。 RIP チュートリアルの例では、この名前は「package com.example.myplugin」になり、上記のメイン クラス コードで確認できます。
- 説明 – プラグインの機能の基本的な説明。
- 著者 – 1 人の作成者または複数の作成者を持つことができます。 後者は、次のように角括弧とコンマで表されます。 [Author1, Author2, Author3].
- 情報提供者 – このセクションを使用して、プラグインに貢献した人を記録します。 その形式は「作成者」セクションと同じです。
- Webサイト – 接続する Web サイトがある場合または、人々をプラグインのページまたは GitHub リポジトリにリンクさせたい場合は、ここに URL を入力できます。
- API バージョン – 使用している 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は時代遅れなので、それをしたいです。 したがって、Minecraft を効果的に使用するには、非常に古いバージョンの Minecraft を実行する必要があります。 現在、ほとんどが Sprigot に切り替えており、Bukkit がより優れたパフォーマンスを提供しながら行ったことを反映しています。
それでも Bukkit を使用してプラグインにアクセスしたい場合。 なぜ最新の API よりも前にそれを使用することを選択したのですか? Minecraft のエクスペリエンスを向上させるために、どのような種類のプラグインを使用していますか? 以下のコメント セクションですべて教えてください。