エルド(ひろたすく)のブログ

普通のプログラマーがITに関する情報をお届けします。

【Java】マインクラフトプラグイン制作講座 ~準備編~

はじめに

お久しぶりです。エルドです。実は自分、名前を2つ持っていたのでこの「はてなブログ」ではどっちの名前を使おうか悩んでいたんですよね。まあ結局「どっちでもいいや」ってなって二つとも名前に入れたんですが・・・
まあそんなことはさておき、今回からいくつかに分けて「マインクラフトプラグイン制作講座」と題して、大人気ゲーム「Minecraft」のSpigot/Bukkitサーバーのプラグインの作り方を紹介していこうと思います。結構技術的なことを書いていきますが、なるべくわかりやすく書いていくつもりですので、よろしくお願いいたします。

※本記事はSpigot/Bukkitサーバーが構築済みの方が対象です。まだサーバーを構築していない方は下記のリンクの手順にそってサーバー構築することを推奨致します。
サーバー構築方法

開発環境を準備しよう!

本記事ではJavaを用いてマインクラフトのプラグインを開発します。普通はここでJDKをインストールするところですが面倒くさいので、今回は「Eclipse」というIDE(総合開発環境)を用います。EclipseIBM社によって開発されたIDEで、高機能なプラグインが導入可能なオープンソースソフトウェアです。Javaで何か開発する際は、Eclipseを使うことをオススメします。

特に理由がない場合は上記リンクから最新版をダウンロードしてください。

プロジェクトを追加

インストールが終了したらworkspaceを指定して起動してください。 まずは「パッケージエクスプローラー」上で右クリックし、新規→Mavenプロジェクトをクリックしてください。 bandicam 2019-08-14 19-45-33-642 (2).jpg 次に、シンプルなプロジェクトの作成にチェックを入れて、「次へ」をクリックしてください。 bandicam 2019-08-14 19-46-49-048 (3).jpg これはアーティファクト情報、すなわちプロジェクトの情報を設定する画面が現れます。
グループIDは各自で自由に設定できますが、後々プロジェクトのパッケージ名にもなるのでこだわりのある人は考えて決めてください。
ドメインを持っている方はそのドメインの逆順を書いていくのもいいかもしれません。(例:github.comならcom.github
アーティファクトIDは「プロジェクト(作成するプラグイン)の名前」です。
ほかにも様々な項目がありますが、空白で問題ないのでそのまま「完了」をクリックしてください。 f:id:hirotask:20190814234031j:plain
すると「パッケージエクスプローラー」内にプロジェクトが追加されます。

pom.xmlの設定

ですが、プロジェクトを追加しただけではまだ何もできません。
ですのでBukkitのAPIを取得するための依存関係を追加します。
まず、先程追加したプロジェクトを開いて、その中のpom.xmlを開きましょう。 f:id:hirotask:20190814235119j:plain
するとこういったコードが表示されると思います。

<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>com.github</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

「/project」の上に以下の内容をコピペします。

<repositories>
    <repository>
        <id>spigot-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
    <!--Bungeecord Repo-->
    <!--Only include if using the Spigot API dependency-->
    <repository>
       <id>bungeecord-repo</id>
       <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
</repositories>
<dependencies>
    <!--Spigot API-->
    <!--You only need one of the two, don't put both. Spigot is recommended.-->
    <dependency>
           <groupId>org.spigotmc</groupId>
           <artifactId>spigot-api</artifactId>
           <version>1.14.2-R0.1-SNAPSHOT</version>
           <scope>provided</scope>
    </dependency>
    <!--Bukkit API-->
    <!--You only need one of the two, don't put both. Spigot is recommended.-->
    <dependency>
            <groupId>org.bukkit</groupId>
            <artifactId>bukkit</artifactId>
            <version>1.14.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
    </dependency>
</dependencies>

また、日本語入力の際にこの状態だと文字コードの関係上エラーが出る可能性があるため、以下のコードを「modelVersion」の上に追加してください。

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

最終的にコード全体は以下のようになると思います。

<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">
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.github</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <repositories>
        <repository>
            <id>spigot-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
        </repository>
        <!--Bungeecord Repo -->
        <!--Only include if using the Spigot API dependency -->
        <repository>
            <id>bungeecord-repo</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </repository>
    </repositories>
    <dependencies>
        <!--Spigot API -->
        <!--You only need one of the two, don't put both. Spigot is recommended. -->
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.14.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <!--Bukkit API -->
        <!--You only need one of the two, don't put both. Spigot is recommended. -->
        <dependency>
            <groupId>org.bukkit</groupId>
            <artifactId>bukkit</artifactId>
            <version>1.14.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

パッケージの追加

次は「src/main/java」を右クリックして「新規→パッケージ」を選択してください。 f:id:hirotask:20190815000943j:plain
するとこのような画面が表示されるので「名前」の項目に先程プロジェクトを作成するときに決めたグループIDを入力して「完了」をクリックしてください。
もし、忘れてしまった場合は「pom.xml」内の「groupid」項目に設定したIDが記載されていますので確認をしてください。 f:id:hirotask:20190815001308j:plain

メインクラスの作成

さて、ここまでくればあと少しです。頑張りましょう。
作成したパッケージ内にメインクラスを作成していきます。
まず、作成したパッケージを右クリックして「新規→クラス」を選択してください。 f:id:hirotask:20190815001528j:plain
そして、選択完了したら次はクラス名を決めていきます。こだわりがないのであれば無難に「Main」でいいでしょう。
また、クラス名は必ず初めの文字は大文字にしてください。 f:id:hirotask:20190815001641j:plain
すると、以下のようなコードが表示されます。

package com.github;

public class Main {

}

しかし、これだけではプラグインとして機能しません。なので次に、「public class Main」のあとに「extends JavaPlugin」と追記してください。

package com.github;

public class Main extends JavaPlugin {

}

次に、Windowsの場合は「Shift + Alt + S」を押して、「メソッドのオーバーライド/実装」を選択してください。
そしてその中の「OnDisable()とOnEnable()」にチェックを加えて、「OK」をクリックしてください。
f:id:hirotask:20190815002253j:plain
するとクラス内に「OnEnable()とOnDisable()」が追加されます。

package com.github;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

    @Override
    public void onDisable() {
        // TODO 自動生成されたメソッド・スタブ
        super.onDisable();
    }

    @Override
    public void onEnable() {
        // TODO 自動生成されたメソッド・スタブ
        super.onEnable();
    }

}

この二つの説明は次の記事に回して、次の作業に移りましょう。
次に「パッケージエクスプローラ―」内の「src/main/resouces」を右クリックして「新規→ファイル」を選択してください。
f:id:hirotask:20190815002614j:plain
その後、ファイル名に「plugin.yml」を入力して「完了」をクリックしてください。
f:id:hirotask:20190815002715j:plain
するとファイルが追加されるので、そのファイルを右クリックしてください。 この「plugin.yml」にはプラグインの情報を記載する必要があります。今回は準備編ですので最低限の項目のみを入力していきます。説明はあとにして必要な情報は以下の通りです。

main: [メインクラスの場所]
name: [プラグインの名前]
version: [バージョン]

記入例は以下の通り

main: com.github.Main
name: test
version: 0.0.1

以上のように保存したら上書き保存を忘れずに行ってください。

ビルドをする

最後のステップです。
ビルドを行ってサーバーが読み取れる形にしましょう。
手順は簡単です。プロジェクトを右クリックして「実行→Maven install」をクリックしましょう。
f:id:hirotask:20190815003630j:plain
するとビルドが始まります。出来上がったファイルは「プロジェクトのフォルダ/target」にあります。
あとはSpigotサーバーにそのプラグインを導入すればプラグインの完成です!お疲れさまでした!

おわりに

今回は準備編ということでしたが、予想以上に記事が長くなってしまい申し訳ありません。
次は「基礎編」ということでコマンド実装をしていきますのでお楽しみに。

ではまた次回!

参考