ぺこめも

困ったときとかにいろいろまとめてる

Nukkit プラグインの作り方 part.2 - 最初のプロジェクト -

Nukkit 公式のサンプルコードも Maven を使用しているので、 Mavenを使ってプラグインを開発、コンパイルする。
Mavenの説明をすると、脱線して、作るのが難しく感じるかもしれないので、省略する。

3. 最初のプロジェクト作成

f:id:pekomiya:20180816151943p:plain

起動すると上図のような画面が表示される(初期起動時にはIDEのカラーテーマを選択したりしたかも)。
「Create New Project」を選択する。

f:id:pekomiya:20180816152208p:plain
(Mavenを選択して、「Next」)

f:id:pekomiya:20180816152323p:plain
(GroupId, ArtifactId, Version を記入する画面が表示され、Versionだけ1.0-SNAPSHOT が入っている。)

  • 蛇足

    GroupId プロジェクトのルートパッケージ
    ArchifactId プロジェクト名

    ちなみに、Nukkitの場合、groupId = cn.nukkit artifactId = nukkit で下図のようなパッケージ構成になっている
    f:id:pekomiya:20180816152914p:plain

プロジェクト名とプロジェクトファイルの場所を設定(基本そのままでいい)したら、「Finish」をクリックする

f:id:pekomiya:20180816153050p:plain

プロジェクトの作成が完了すると下図のような画面になる。

f:id:pekomiya:20180816153209p:plain


4. シンプルなプラグインプログラム

A. 依存性追加 pom.xml

このプロジェクトに作成したプログラムから、NukkitのAPIにアクセスするために、pom.xml に依存性を追加する。

  • 現在
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jp.hatenablog.pekomemo.example</groupId>
    <artifactId>sample</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>
  • 修正後
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jp.hatenablog.pekomemo.example</groupId>
    <artifactId>sample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <repositories>
        <repository>
            <id>nukkit-repo</id>
            <url>https://repo.nukkitx.com/snapshot</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>cn.nukkit</groupId>
            <artifactId>nukkit</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

B. ルートパッケージ作成

プロジェクト作成時に groupId には、ルートパッケージ名を記入する旨を書いた。src / main / java の配下にパッケージを作成する。

f:id:pekomiya:20180816153859p:plain

src から展開していくと、 java というディレクトが見えるので、右クリックして 「package」 を選択する。

f:id:pekomiya:20180816154017p:plain

groupId と同じ名前を記入して、「OK」を選択する。

f:id:pekomiya:20180816154140p:plain

C. メインクラスの作成

プラグインは、後述の plugin.yml の内容をもとに、PluginBase を継承したクラス(この講座では、プラグインの"メインクラス"と呼ぶ)を呼び出す。 plugin.yml は 「D」 で作成するので、まずはメインクラスを作成しよう。

f:id:pekomiya:20180816154519p:plain

パッケージ「jp.hatenablog.pekomemo.example」を右クリックして「Java Class」を選択する。

f:id:pekomiya:20180816154619p:plain

クラス名は、Java命名規則にしたがって、適当(適切)なクラス名を記入して「OK」を押す。 クラスを作成すると、内容が表示される。

f:id:pekomiya:20180816154724p:plain

このクラスは、プラグインのメインクラスなので、PluginBase を継承する

f:id:pekomiya:20180816154838p:plain

D. plugin.ymlの作成

NukkitがSpigotなどと同じような挙動であれば、pluginsディレクトに置かれた jarファイルの plugin.yml の設定をもとに、プラグインを読み込む。と、いうわけでplugin.yml を作成しよう。

javaディレクトリの下(jp.hatenablog.pekomemo.example と同階層)に resources というディレクトリが存在する。この中に plugin.yml を作成する。

f:id:pekomiya:20180816155153p:plain

f:id:pekomiya:20180816155210p:plain

plugin.yml には、name main version api が必須です。 - name: プラグインの名前 - main: メインクラスまでのパス(今回の場合 jp.hatenablog.pekomemo.example.SamplePlugin) - version: プラグインのバージョン - api: このプラグインがNukkitのどのAPIをサポートするか

なんか、PocketMineに強いインスパイアを感じる。PocketMineと同様に、ここのAPIのバージョンが動作させるNukkitのAPIバージョンよりも大きければ、プラグインのロードエラーがはかれる模様。

今回は、下記のようにした。

name: SamplePlugin
main: jp.hatenablog.pekomemo.example.SamplePlugin
version: "0.0.1"
api: ["1.0.0"]

5. ソースコードのビルド

最低限、プラグインとして必要なファイルを作成したので、いよいよビルドしてプラグインjar ファイルを作ろう。

f:id:pekomiya:20180816172232p:plain

右上のセレクトボックスをクリックして、「Edit Configurations...」 を選択する。 新しいウィンドウが表示されるので、プラス「+」をクリックして、 Maven を探して、クリックする。

f:id:pekomiya:20180816172153p:plain

f:id:pekomiya:20180816172106p:plain

package と記入して、「OK」を押す。 「OK」を押すと、初期状態だと 「Unnamed」という項目が表示される。

f:id:pekomiya:20180816172319p:plain

f:id:pekomiya:20180816172412p:plain を押すと、ビルドが始まる。

ビルドが終わると、下図のように、「target」ディレクトリが作成され、その中に sample-1.0-SNAPSHOT.jar というファイルができている。
これを、Nukkit の 「plugins」 にコピーしてサーバを起動すると、読み込まれていることがわかる。

f:id:pekomiya:20180816172810p:plain