Minecraft

CloudburstMCのプラグインを作ってみた

ヨミ

Cloudburstは現在も開発途中のソフトです。

この記事の内容が最新版では動作しない可能性があります。

この記事は「Minecraftのサーバ開発・運営Advent Calendar 2021」の12月22日分の記事となります!

Cloudburstとは

Cloudburstについては以前に紹介した記事がありますので、そちらをご覧ください。

あわせて読みたい
【NukkitX】の名前が変わる!【CloudburstMC】
【NukkitX】の名前が変わる!【CloudburstMC】

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のところに隠されているので、必要であれば変えてください。

pom.xmlを編集する

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 の最後を締めくくる冬月さんの記事で吹き飛ばしてもらいましょう。

とてもざっくりした説明になってしまい申し訳ありません!

最後まで読んでいただきありがとうございました!!

あわせて読みたい
Minecraftサーバ開発・運営 Advent Calendar 2021
Minecraftサーバ開発・運営 Advent Calendar 2021
ABOUT ME
ヨミ
ヨミ
とある大学生(休学中)
いろいろ手を出しては中途半端に終わることの多い飽き性なニンゲン。
性別:男性
趣味:写真撮影, スキー, 旅行
備考:ガジェット集めは一段落ついた模様
記事URLをコピーしました