Java プラグイン API
生成された Java リファレンスではクラス、メソッド、シグネチャを検索でき、各モジュールのソースバージョンとコミットも確認できます。
Nightbreak プラグインと連携する Java プラグインを作る場合は、このセクションを使います。Java プラグインを作らずにゲーム内動作を記述する場合は、Lua スクリプトガイドから始めてください。
プラグインを選ぶ
以下の座標はすべてグループ com.magmaguy を使います。今回の更新時に公開 Maven リポジトリに掲載されていたバージョンです。サーバーにインストールしたプラグインに合わせてください。現在のソースを説明する wiki ページや生成リファレンスは、Maven アーティファクトの公開前に新しいビルドを扱うことがあります。
| プラグイン | アーティファクトとバージョン | 開発者リファレンス |
|---|---|---|
| EliteMobs | EliteMobs:10.9.1 | エンティティ、アイテム、イベント、Lua パワーサービス |
| FreeMinecraftModels | FreeMinecraftModels:2.12.1 | モデル、操作、変装、アイテム、魔法武器 |
| ResourcePackManager | ResourcePackManager:2.4.1 | パックの登録と再読み込み |
| BetterStructures | BetterStructures:2.7.2 | 建造物生成イベント |
| EternalTD | EternalTD:1.7.3 | タワー、ウェーブ、戦闘イベント |
| CannonRTP | CannonRTP:1.2.2 | 発射、目的地の検証、着地イベント |
| ResurrectionChest | ResurrectionChest:2.3.1 | 連携範囲 |
| BetterFood | BetterFood:1.5.1 | 連携範囲 |
| MagmaCore | MagmaCore:2.2.0-SNAPSHOT | 組み込みライブラリの設定とライフサイクル |
プラグイン依存関係を追加する
リリース済みプラグインは MagmaGuy の Maven リポジトリから解決します。インストール済みプラグインに対し、Maven の provided または Gradle の compileOnly でコンパイルしてください。連携プラグインの JAR に対象プラグインのコピーを含めないでください。
EliteMobs 連携の例です。
<repositories>
<repository>
<id>magmaguy-releases</id>
<url>https://repo.magmaguy.com/releases</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.magmaguy</groupId>
<artifactId>EliteMobs</artifactId>
<version>10.9.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
Gradle Kotlin DSL では次のようになります。
repositories {
maven("https://repo.magmaguy.com/releases")
}
dependencies {
compileOnly("com.magmaguy:EliteMobs:10.9.1")
}
通常の Bukkit/Paper API 依存関係も必要です。この例のビルドには Java 21 を使い、サーバーの実行にはそのサーバーが要求する Java バージョンを使ってください。
プラグイン記述ファイルで実行時依存関係を宣言します。
depend: [EliteMobs]
別の連携ではアーティファクト、バージョン、プラグイン名を置き換えます。BetterStructures にはサーバー上の WorldEdit も必要です。ResourcePackManager の Java 登録 API は Bukkit バックエンドで実行します。共通アーティファクトにはプロキシ用コンポーネントも含まれますが、この Bukkit API をプロキシプラグインから呼べるわけではありません。
任意の連携には softdepend を使い、対象プラグインが有効であることを確認してから連携クラスを読み込みます。常時読み込まれる入口クラスに、任意プラグインの型への参照を置かないでください。依存関係の順序だけでは非同期コンテンツ初期化の完了は分かりません。対象プラグインの準備完了と再読み込みのフックに従ってください。
MagmaCore はパッケージ化の扱いが異なります。組み込みライブラリなので、インストール済みプラグイン向けの手順ではなく、shading とライフサイクルのガイドに従ってください。
ライフサイクルと互換性
各ガイドに記載された入口を使ってください。プラグイン JAR 内の public Java クラスでも、内部実装の場合があります。特に api パッケージ外のマネージャーやエンティティクラスを使う場合は、更新前に対応リリースのシグネチャを確認します。
Bukkit のエンティティとワールド操作はサーバースレッドで実行します。HTTP、ファイルアクセス、長時間の計算でイベントハンドラーをブロックしないでください。非同期処理から戻る際は、エンティティとプラグインの準備状態を再確認します。
自分の連携が所有する状態だけを保持します。無効化時にモデルの付与、登録、タスクを解放し、再読み込み後は対象プラグインのオブジェクトを取得し直します。保存したモデルやダンジョンの参照があっても、その実行中のオブジェクトが残っているとは限りません。
ResurrectionChest
ResurrectionChest 2.3.1 には専用のカスタム Bukkit イベント API や連携窓口はありません。events パッケージには内部用 Bukkit リスナーが入っています。拡張用の入口として生成しないでください。
サーバー設定には記載された設定とコマンドを使います。公開 Maven アーティファクトでリリースに対するコンパイルはできますが、安定したチェスト管理 API があることを意味しません。
BetterFood
BetterFood 1.5.1 には専用のカスタム Bukkit イベント API や連携窓口はありません。食料の選択処理は独自の Bukkit リスナーで実行します。
対応する設定は動作ガイドとセットアップリファレンスを参照してください。通常の Bukkit イベントに接続するコードは、内部リスナーを直接呼ばず、キャンセルとイベント優先度を尊重してください。
クラスとメソッドの資料
連携パターンには上記のガイドを使い、クラス、メソッド、シグネチャには生成された Java リファレンスを使います。そこに記録されたバージョンとソースコミットを、連携対象のリリースと照合してください。