Bukkit で NMS を使用する方法

Bukkit で NMS を使用する方法

Minecraft はさまざまなプラグイン (ゲームプレイ体験を変更するために使用できます) を歓迎していますが、ゲームの一部の要素はプラグインの操作から保護されています。Net.Minecraft.Server (NMS) は、ゲームの重要なサーバー コードが含まれているため、これらの保護されたパッケージの 1 つです。このコードは、Minecraft の開発者である Mojang から直接提供されたものであり、プレイヤーがアクセスできるようにはなっていません。

Bukkit を使用すると、プレーヤーは NMS コードの周りに抽象化レイヤーを作成できます。これにより、ゲームのプレイに不可欠なコードベースを直接変更することなく、サーバーのコードと対話するプラグインを開発できます。プラグインで使用したいコードを見ることができるウィンドウのように考えてください。また、コードを直接変更できないようにするバリアとしても機能します。

Minecraft の NMS で Bukkit を使用する方法を見てみましょう。

始める前に – 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...
}

インスタンスを配置したら、「getInstance()」コマンドを使用してメイン クラス (Bukkit で作成) にアクセスできます。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 から始まり、プラグインを変更または編集するにつれて上昇します。
  • Main – 「JavaPlugin」を拡張するプラグインのメイン クラスの名前を含み、Bukkit がプラグインに入ることを可能にします。RIP チュートリアルの例では、この名前は「package com.example.myplugin」となり、上記のメイン クラス コードで確認できます。
  • 説明– プラグインの機能の基本的な説明。
  • 作成者– 単一の作成者または複数の作成者を持つことができます。後者は次のように角括弧とコンマで示されます – [Author1, Author2, Author3].
  • 貢献者– このセクションを使用して、プラグインに貢献した人を書き留めます。形式は「作成者」セクションと同じです。
  • Web サイト– プラグインする Web サイトがある場合、または人々をプラグインのページまたは 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 は非常に古いため、効果的に使用するには非常に古いバージョンの Minecraft を実行する必要があるため、そうしたくない場合があります。ほとんどはすでにSprigotに移行しています.Sprigotは、Bukkitが行ったことのほとんどを反映しながら、より優れたパフォーマンスを提供します.

Bukkit を使用してプラグインにアクセスしたい場合、最新の API よりも先に Bukkit を選択したのはなぜですか? Minecraft のエクスペリエンスを向上させるために、どのような種類のプラグインを使用していますか? 以下のコメントセクションでそれについてすべて教えてください.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です