CloudburstMCのプラグインを作ってみた
この記事は「Minecraftのサーバ開発・運営Advent Calendar 2021」の12月22日分の記事となります!
Cloudburstとは
Cloudburstについては以前に紹介した記事がありますので、そちらをご覧ください。

Cloudburstの現状について
さて、開発が本格的にアナウンスされてから1年以上が経過したCloudburstですが、まだまだ不安定で実際にサーバーに使える状態とはとても言えません。
さらに言うと、Cloudburstのためのプラグインが公式フォーラムには一つもありません。(いくつかありますがどれも動作しません。)
そんな状態ですので、今からプラグインを作ることは一切おすすめできません。本当に。
公式のExamplePluginすらも動きません。やばすぎます。
用意するもの
さて、Cloudburstのプラグインを作成していくわけですが、Nukkitと比べるとかなり多くの変更がされています。
そうした変更からくる手間も予測機能やimport文の自動挿入機能などである程度軽減できるので、今回はIntelliJ IDEAを使用します。
- Cloudburstが動作する環境
- JDK12以上、mavenが使用できるようにしたIntellJ IDEA
実際に作っていく
今回つくるプラグイン
今回はプラグインが読み込まれたときにログを出力するプラグインを作ります。
入門プラグインのJoinMessageにすら達していませんが、本当に簡単にはプラグインが作れる環境にないのです…
作成手順
さて、まずはIntelliJ IDEAを起動してください。以下の説明はそれ以降のことになります。
まずは「New Project」のボタンからプロジェクトを作成します。

Mavenプロジェクトのタブを開いて、JDKを選び「Next」ボタンを押します。12以上だとビルドまで問題なく通るかと思います。

プロジェクトネームのところに名前を入れます。ビルドされたファイルの名前やアーティファクトIDはArtifact Coordinatesのところに隠されているので、必要であれば変えてください。

propertiesタグの後ろに以下のrepositoriesタグとdependenciesタグを追加します。
1<repositories>
2 <repository>
3 <id>opencollab-repo-release</id>
4 <url>https://repo.opencollab.dev/maven-releases/</url>
5 <releases>
6 <enabled>true</enabled>
7 </releases>
8 <snapshots>
9 <enabled>false</enabled>
10 </snapshots>
11 </repository>
12 <repository>
13 <id>opencollab-repo-snapshot</id>
14 <url>https://repo.opencollab.dev/maven-snapshots/</url>
15 <releases>
16 <enabled>false</enabled>
17 </releases>
18 <snapshots>
19 <enabled>true</enabled>
20 </snapshots>
21 </repository>
22</repositories>
23
24<dependencies>
25 <dependency>
26 <groupId>org.cloudburstmc</groupId>
27 <artifactId>cloudburst-api</artifactId>
28 <version>0.0.1-SNAPSHOT</version>
29 <scope>provided</scope>
30 </dependency>
31 <dependency>
32 <groupId>org.cloudburstmc</groupId>
33 <artifactId>cloudburst-server</artifactId>
34 <version>0.0.3-SNAPSHOT</version>
35 <scope>provided</scope>
36 </dependency>
37</dependencies>
コピペしたら、右上に出ているアイコンを押して再読み込みします。

左側のメニューからJavaディレクトリまで下って行って、右クリックからメニューに進み「packeges」を選択します。

表示されたポップアップにパッケージの名前を入れます。

作成されたパッケージを右クリックして、メニューからメインクラスとなるJavaクラスを作成します。

表示されたピックアップにメインクラスの名前を入れます。

IntelliJ IDEAではimport文はalt+enterで自動挿入してくれるので、手打ちは基本的にしません。
それはさておき、まずはプラグインアノテーション(@Plugin)でプラグインの基本的な情報を示します。最低限idとversionは記入しましょう。
これは、package文やimport文の下に記入します。
1@Plugin(
2 id = "ExamplePlugin4C",
3 version = "1.0-SNAPSHOT"
4)
次にインジェクターでロガーをプラグインで使えるようにします。今のところデータフォルダへのパスなどがインジェクトできるみたいです。
1private final Logger logger;
2
3@Inject
4public ExamplePlugin4C(Logger logger) {
5 this.logger = logger;
6}
最後に、サーバーがイニシャライズされたときに実行されるイベントの中にログ出力をするコードを記入します。
1@Listener
2public void onInitialization(ServerInitializationEvent event) {
3 logger.info("[ExamplePlugin4C] Loaded successfully!");
4}
以上でメインクラスは完成です。import文を含めた全体のコードは以下のようになるはずです。
1package org.example;
2
3import org.cloudburstmc.api.event.Listener;
4import org.cloudburstmc.api.event.server.ServerInitializationEvent;
5import org.cloudburstmc.api.plugin.Plugin;
6import org.slf4j.Logger;
7
8import javax.inject.Inject;
9
10@Plugin(
11 id = "ExamplePlugin4C",
12 version = "1.0-SNAPSHOT"
13)
14public class ExamplePlugin4C {
15
16 private final Logger logger;
17
18 @Inject
19 public ExamplePlugin4C(Logger logger) {
20 this.logger = logger;
21 }
22
23 @Listener
24 public void onInitialization(ServerInitializationEvent event) {
25 logger.info("[ExamplePlugin4C] Loaded successfully!");
26 }
27}
さて、メインクラスが書き終わったら、右上のメニューにある「maven」から「package」をクリックしてJARファイルを作ります。

作られたファイルはプロジェクトのフォルダの中にあるtargetフォルダの中に入っていると思いますので、それをCloudburstのpluginsフォルダの中に入れてサーバーを起動します。
うまくいっていればプラグインがいくつ読み込まれたかというログの下あたりに今回作ったプラグインによるログが表示されているはずです。

つ、疲れた…
最初はいつも通りJoinMessageを作ろうと思っていました。
今回はこの記事を書かないといけないので時間の都合上諦めました。
なんだかもやもやしますが、こんな気持ちも Minecraftのサーバ開発・運営Advent Calendar 2021 の最後を締めくくる冬月さんの記事で吹き飛ばしてもらいましょう。
とてもざっくりした説明になってしまい申し訳ありません!
最後まで読んでいただきありがとうございました!!
