はじめに#
BentoBox は新しい機能や新しい_ゲームモード_を提供するために_アドオン_に依存しています。 このチュートリアルでは最初のアドオンの作成プロセスをガイドします。
アドオンの作成は最初からプラグインを作成するよりも簡単で速いことが多いです。BentoBox がラッパーと主要な API 機能を提供しているためです。 アドオンはまた、Java クラスローダーの可視性原則により、プラグインとは異なり、他のアドオンの API に直接アクセスできます。 さらに、BentoBox の Config API と Database API にもアクセスできます。
このチュートリアルを快適に進めるには、アドオン開発の経験が必要です。 アドオン開発プロセスは実際には非常に似ており、簡潔さのため、このチュートリアル全体を通じて主要な Java の概念を理解していることを前提とします。
プロジェクトの準備#
事前作成されたアドオンテンプレートを使用する#
現時点ではテンプレートは存在しません。
手動でプロジェクトを作成する#
BentoBox を依存関係としてインポートする#
BentoBox にはアドオンの作成と登録に必要なすべての API が含まれています。 そのため、プロジェクトの依存関係として追加する必要があります。
BentoBox は Maven を使用しており、Maven リポジトリは CodeMC によって提供されています。 ただし、Gradle を使用して BentoBox を取得することもできます。
Maven#
pom.xml ファイルに以下を追加します。
<repositories>
<repository>
<id>codemc-repo</id>
<url>https://repo.codemc.org/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>world.bentobox</groupId>
<artifactId>bentobox</artifactId>
<version>PUT-VERSION-HERE</version>
<scope>provided</scope>
</dependency>
</dependencies>
Gradle#
build.gradle ファイルに以下を追加します。
repositories {
maven { url "https://repo.codemc.org/repository/maven-public/" }
}
dependencies {
compileOnly 'world.bentobox:bentobox:PUT-VERSION-HERE'
}
問題がある場合は Gradle の依存関係宣言に関するドキュメントを参照してください。
プロジェクトアーキテクチャのセットアップ#
メインアドオンクラスの作成#
アドオンのメインクラスはプラグインのメインクラスと同様に機能します。 主にアドオンの読み込み、有効化、リロード、無効化時に実行されるコードを処理します。
メインクラスは Addon を継承します。
例:
import world.bentobox.bentobox.api.addons.Addon;
public class MyAddon extends Addon {
}
ヒント
メインクラスの命名を検討する際: クラス名をアドオン名にできるだけ近いものにすることをお勧めします。 また、クラス名に "Addon" を追加して目的をさらに明確にすることもできます。
実際の例: Greenhouses, Chat, Biomes。
必須メソッド#
Bukkit プラグインと同様に、アドオンは適切に有効化されるためにいくつかのメソッドをオーバーライドする必要があります。
メインアドオンクラスは以下のようになります:
import world.bentobox.bentobox.api.addons.Addon;
public class MyAddon extends Addon {
@Override
public void onEnable() {}
@Override
public void onDisable() {}
}
onEnable()#
このメソッドは #onLoad() の後に呼び出されます。
onDisable()#
このメソッドはアドオンが無効化されるとき(通常はサーバーシャットダウン時)に呼び出されます。
オプションメソッド#
必要に応じて追加のメソッドをオーバーライドできます。
import world.bentobox.bentobox.api.addons.Addon;
public class MyAddon extends Addon {
@Override
public void onLoad() {}
@Override
public void onEnable() {}
@Override
public void onReload() {}
@Override
public void onDisable() {}
}
onLoad()#
onLoad() メソッドのコードはアドオンが読み込まれたとき、onEnable() の前に実行されます。設定の読み込みや、このアドオンがゲームモードの場合のコマンドセットアップに適した場所です:
@Override
public void onLoad() {
// Save the default config from config.yml
saveDefaultConfig();
// Load settings from config.yml. This will check if there are any issues with it too.
loadSettings();
// Register game mode commands
playerCommand = new DefaultPlayerCommand(this)
{
@Override
public void setup()
{
super.setup();
new IslandAboutCommand(this);
}
};
adminCommand = new DefaultAdminCommand(this) {};
}
onReload()#
このメソッドのコードは管理者が bbox reload コマンドを使用してアドオンをリロードするときに実行されます。
addon.yml の作成#
addon.yml はアドオンを BentoBox に説明するために必要です。Bukkit で使用される plugin.yml とほぼ同一です。以下は最小限の例です:
name: Bank
main: world.bentobox.bank.Bank
version: 1.0.0
api-version: 1.15.4
authors: tastybento
| 属性 | 必須 | 説明 | 例 | 備考 |
|---|---|---|---|---|
| name | yes | アドオンの名前。 | name: MyAddon |
|
| version | yes | このアドオンのバージョン。 | version: 1.3.1 |
|
| description | no | アドオンが提供する機能の人が読めるような説明。 | description: This addon is so boxy. |
|
| authors | yes | 共同プロジェクトの場合、1 人または複数の作者をリストできます。複数の場合は YAML 文字列リスト形式を使用します。 これは実際には必須項目です。 | authors: - BONNe - tastybentoまたは authors: tastybento |
|
| main | yes | Addon または Pladdon を継承するクラスを指定します。 | main: world.bentobox.acidisland.AcidIsland |
|
| depend | no | アドオンの読み込みに必要なアドオンのリスト。 | depend: Oneaddon, Anotheraddon |
|
| softdepend | no | アドオンが必要とする可能性があるが必須ではないアドオンのリスト。 | softdepend: AcidIsland, BSkyBlock, SkyGrid, CaveBock, AOneBlock |
|
| permissions | no | アドオンが登録したい権限。各ノードは登録する権限を表します。各権限には追加の属性を持てます。 | permissions:
'[gamemode].intopten':
description: Player is in the top ten.
default: true
'[gamemode].island.level':
description: Player can use level command
default: true
'[gamemode].island.top':
description: Player can use top ten command
default: true |
|
Pladdon#
Pladdon は Bukkit Plugin とアドオンの組み合わせです。Pladdon の主な利点は Bukkit Server クラスローダーで読み込まれるため、その中のデータをプラグインから直接アクセスできることです。例えばレベルアドオンのようなユーティリティアドオンを作成する場合、他のプラグイン開発者がコードを通じて生成されたデータに API 経由でアクセスしたいと思うかもしれません。最もシンプルな方法は Pladdon を作成することで、コード内のメソッドを直接呼び出すことができます。プラグインがアドオンのデータにアクセスしないようにしたい場合は、アドオンのままにしてください。
アドオンを Pladdon にする#
これを行うには、推奨名 MyAddonPladdon.java(MyAddon はアドオンと同じ名前)のクラスを作成し Pladdon を継承します。plugin.yml を作成する代わりに、コンポーネントはアノテーションを使用して宣言されます。アノテーションは以下のようになります。ApiVersion は必要に応じて最新のサーバーバージョンに更新できます。
@Plugin(name="Pladdon", version="1.0")
@ApiVersion(ApiVersion.Target.v1_16)
@Dependency(value = "BentoBox")
public class LevelPladdon extends Pladdon {
private Addon addon;
@Override
public Addon getAddon() {
if (addon == null) {
addon = new Level();
}
return addon;
}
}
定義すべき唯一のメソッドは getAddon() メソッドで、アドオンのインスタンスを返す必要があります。このメソッドが複数回呼び出された場合に重複が作成されないよう、1 つのインスタンスのみを返すようにしてください。
これが完了すると、アドオンはプラグインと同様に読み込まれ、他のプラグインからアクセスできるようになります。