Minecraftサーバーを動かす知識

Bukkitプロジェクトの作成 Eclipse編

投稿:  更新:  By: HimaJyun

このページでは、Bukkitプラグインを開発するために必要なプロジェクトの作成とIDEの操作全般を解説します。

なお、このページではEclipse(の、日本語翻訳版であるPleiades)を使用した方法を解説します。

IntelliJ IDEAを使用している方は「Bukkitプロジェクトの作成 IntelliJ IDEA編」をご覧ください。

(前のステップは「Bukkitプラグイン開発に必要な知識と用意する物」です)

プロジェクトの作成

ここではEclipseの日本語翻訳版であるPleiadesを使用して説明します。英語版を利用している方は適当に読み替えてください。

まずはプロジェクトを作成しましょう。「ファイル」→「新規」→「Mavenプロジェクト」を選択します。
/bukkit/development/tutorial/create-project-eclipse/001.png

「シンプルなプロジェクトの作成」にチェックを入れて「次へ」を選択します。
/bukkit/development/tutorial/create-project-eclipse/002.png

プロジェクトの情報を入力する画面です。
/bukkit/development/tutorial/create-project-eclipse/003.png

「グループId」は他の人と重複しないようにする必要があります。(ここでいう他の人とは、世界中に居るJava開発者の事です)

そのため、ドメイン名を逆順にして利用する事が推奨されています。たとえばこのサイトのドメインはe-craft.ioなのでio.e-craft、他にもexample.comならcom.example……という具合に。

ドメインを持っていない方はGitHubやTwitterのアカウント名を利用しましょう。たとえばGitHubのアカウント名がoctocatならcom.github.octocat……という具合。

「アーティファクトId」はプロジェクト名=プラグイン名です。好きなように名付けて構いません。

「バージョン」はバージョン番号です。好きな番号を付けて構いませんが、「Semantic Versioning」というやり方がよく使われます。

他の部分を変更する必要はありません。入力後は「完了」を選択します。

pom.xmlの編集

Bukkitプラグインを開発するためにはBukkitAPIを利用できるようにする必要があります。

ちょっとだけ解説しておくと、最初の方に出てきた「Maven」はこれらの「必要なもの(依存関係)」を管理する仕組みです。(Maven以外にもいくつか種類があります)

実際にBukkitAPIを利用できるように設定していきましょう。まずはpom.xmlを開きます。
/bukkit/development/tutorial/create-project-eclipse/004.png

初期状態では次のような内容になっていると思われます。

<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>io.e-craft</groupId>
    <artifactId>ProjectSample</artifactId>
    <version>1.0.0</version>
</project>

BukkitAPIを利用するためにはBukkitのリポジトリを追加する必要があります。(厳密にはSpigotのリポジトリなのですが、細かい事は気にしない)

</project>の上に次のように追加しましょう。

<repositories>
    <repository>
        <id>spigot-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
</repositories>

続いて、BukkitAPIを追加します。(厳密に言えばSpigotAPIですが、細かい事は気にしない)

先ほどと同じように、</project>の上に次のように追加しましょう。

<dependencies>
    <dependency>
        <groupId>org.spigotmc</groupId>
        <artifactId>spigot-api</artifactId>
        <version>1.14.2-R0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<version>の部分は使いたいバージョンを指定します。「(Minecraftバージョン)-R0.1-SNAPSHOT」と指定します。

他は常に同じなので気にしなくて構いません。

以前まではこれだけでも良かったのですが、最近のJDKでは次のようなエラーが発生します。

[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[ERROR] ソース・オプション5は現在サポートされていません。7以降を使用してください。
[ERROR] ターゲット・オプション5は現在サポートされていません。7以降を使用してください。

これらのエラーを回避するために、</project>の上に次のように追加しましょう。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<maven.compiler.source><maven.compiler.target>は使用するJavaバージョンの指定です。

Java 8までは1.8のように指定しますが、Java 9以降はバージョンをそのまま指定します。(たとえば、Java 11を使用するなら11)

これらの3つを追加すると次のようになっているはずです。

<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>io.e-craft</groupId>
    <artifactId>ProjectSample</artifactId>
    <version>1.0.0</version>

    <repositories>
        <repository>
            <id>spigot-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.14.2-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>

プロジェクトの更新

Eclipseでは依存関係(dependency)を追加した時には自動で必要なファイルがダウンロードされます。(余談ですが、IntelliJ IDEAでは少しだけ作業が必要です)

普段は自動での更新に任せておけばいいのですが、Javaバージョン(maven.compiler.sourcemaven.compiler.target)を変更した時や自動ダウンロードが上手くいかない時には手動での更新が必要になります。

今回の例では、先ほどのpom.xmlの編集でJavaバージョンを変更しているので手動での更新が必要ですね!

プロジェクト名の部分を右クリックして「Maven」→「プロジェクトの更新」を選びます。もしくは、Alt+F5でも同じ画面が開きます。 /bukkit/development/tutorial/create-project-eclipse/005.png

更新したいプロジェクトにチェックが入っていることを確認して「OK」を押しましょう。
/bukkit/development/tutorial/create-project-eclipse/006.png

これでプロジェクトの情報が更新されます。

「正しく設定できているはずなのにエラーが出る」という時にはプロジェクトの更新が必要な可能性もあるので確認してみましょう。

プラグインに必要なファイルの作成

BukkitAPIを依存関係に追加した後は実際にプラグインを開発します。

Bukkitプラグインとして認識させるためにはいくつかの作法に従う必要があります。

メインクラスの作成

まずはメインクラスを作成してみましょう。

メインクラスとはBukkitプラグインをロードする時に呼び出されるクラスです。Bukkit版のpublic static void mainみたいなものです。

src/main/javaを右クリックして「新規」→「パッケージ」を選択しましょう。
/bukkit/development/tutorial/create-project-eclipse/007.png

パッケージ名は小文字で、グループIdとプラグイン名をドットで繋げます。

たとえば、今回の例ではグループIdはio.e-craftなのでio.e_craftです。パッケージ名にハイフン(-)は使えないのでアンダースコア(_)に置き換えます。

今回の例ではプラグイン名はProjectSampleですが、パッケージ名は小文字が原則なのでprojectsampleとなります。

この2つをドットで繋げるのでio.e_craft.projectsampleがパッケージ名となります。
/bukkit/development/tutorial/create-project-eclipse/008.png

他の例

グループIdがcom.exampleで、プラグイン名がAdminToolsなら、パッケージ名はcom.example.admintoolsとなります。

グループIdがcom.github.octocatで、プラグイン名がCatTreeなら、パッケージ名はcom.github.octocat.cattree……という具合。

パッケージが作成できたら、次は作成したパッケージを右クリックしてクラスを作成します。
/bukkit/development/tutorial/create-project-eclipse/009.png

「名前」のところにクラス名を入力しましょう。クラス名は何でも構いませんが、「Main」やプロジェクト名が分かりやすいでしょう。
/bukkit/development/tutorial/create-project-eclipse/010.png

小技ですが、パッケージの作成やJavaPluginの継承(後述)は省略できます。

クラスを作成する際に「パッケージ」や「スーパークラス」を指定すれば自動で追加してくれます。

もちろん個別に作業しても構いませんよ。

Hello, world!

さて、作成したばかりのクラスは次のような状態になっていることでしょう。

package io.e_craft.projectsample;

public class ProjectSample {
}

メインクラスではJavaPluginクラスを継承する必要があります。

継承が分からない?大丈夫、extends JavaPluginを書き加えるだけです。

package io.e_craft.projectsample;

import org.bukkit.plugin.java.JavaPlugin;

public class ProjectSample extends JavaPlugin {
}

importを手で入力する必要はありません。

JavaPluginを入力したあとでエラー(赤波線)にマウスを重ねると解決策が提示されます。「'JavaPlugin'をインポートします」を選択しましょう。
/bukkit/development/tutorial/create-project-eclipse/011.png

次のコードと同じようにonEnableを追加してみましょう。

package io.e_craft.projectsample;

import org.bukkit.plugin.java.JavaPlugin;

public class ProjectSample extends JavaPlugin {
    @Override
    public void onEnable() {
        getLogger().info("Hello, world!");
    }
}

onEnableはプラグインがロードされた時に実行されるコードです。

(今回は使いませんが、プラグインが無効化された際に実行されるのはonDisableです)

getLogger().info()はコンソールにメッセージを表示するためのコードです。

つまり「起動時にコンソールへメッセージを表示する」という事をやっているわけです。

ちなみにですが、入力中にCtrl+Spaceを押すと補完が利用できます。有効活用しましょう。

plugin.ymlの作成

ここまでの手順で最低限のプラグインのコードを書きました。

しかし、このままではまだ動作するプラグインは作成できません。

プラグインを動作させるためには、そのプラグインに関する情報を記載したplugin.ymlを作成する必要があります。

src/main/resourcesを右クリックして「新規」→「ファイル」を選択します。
/bukkit/development/tutorial/create-project-eclipse/012.png

plugin.ymlを作成します。
/bukkit/development/tutorial/create-project-eclipse/013.png

最低限必要なのは次の4つです。

main: "メインクラス"
name: "プラグイン名"
version: "バージョン"
api-version: "APIバージョン"

mainはメインクラスのパッケージ名とクラス名をドットで繋げたものを記載します。

nameはプラグイン名を記載します。versionはプラグインのバージョンです。

api-versionは厳密には必須ではありませんが、ほぼ必須なので記載しておきましょう。

これは対応しているBukkitAPIのバージョンを記載します。たとえば1.13や1.13.2なら1.13、1.14や1.14.2なら1.14という具合です。

今回の例では次のようになります。

main: "io.e_craft.projectsample.ProjectSample"
name: "ProjectSample"
version: "1.0.0"
api-version: "1.14"

mainを間違えていると動作しないので、間違えないように気を付けましょう。

プラグインのコンパイル

ここまででプラグインに最低限必要なファイルの追加が完了しました。

実際にプラグインをコンパイルしてjarファイルを作成しましょう。

プロジェクト名の部分を右クリックして「実行」→「Maven install」を選択します。
/bukkit/development/tutorial/create-project-eclipse/014.png

「Maven install」に成功すると、次のようなログが表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.185 s
[INFO] Finished at: 2019-01-01T00:00:00+09:00
[INFO] ------------------------------------------------------------------------

上手くいかない時は「Maven clean」を試してみましょう。古いファイルが削除されて上手くいくようになるかもしれません。

作成されたjarはtargetの中にプロジェクト名-バージョン.jarというファイル名で存在しています。
/bukkit/development/tutorial/create-project-eclipse/015.png

これをサーバーのpluginsディレクトリに追加して起動してみましょう。

上手く作成できていれば起動したときにメッセージが表示されます。

[00:00:00] [Server thread/INFO]: [ProjectSample] Enabling ProjectSample v1.0.0
[00:00:00] [Server thread/INFO]: [ProjectSample] Hello, world!

/plコマンドでもプラグインとして認識されていることが分かりますね!

>pl
[00:00:00] [Server thread/INFO]: Plugins (1): ProjectSample

知っておくと便利なこと

プラグイン開発に必須な訳ではありませんが、知っておくと便利な事をいくつか紹介しておきます。

plugin.ymlをpom.xmlと連動させる

plugin.ymlでプラグインのバージョンを指定しましたね。

それとは別にpom.xmlにもバージョンを指定する項目があります。

原則的に両方とも同じバージョンにするものなのですが、片方のバージョンを上げた時にもう片方も手で更新しなければならないのは面倒です。

「Maven」にはこういった用途に対応するための機能もあります。

次のコードをpom.xml</project>の上に追加しましょう。

<build>
    <resources>
        <resource>
            <targetPath>.</targetPath>
            <filtering>true</filtering>
            <directory>src/main/resources/</directory>
        </resource>
    </resources>
</build>

plugin.ymlを次のように書き換えます。

main: "io.e_craft.projectsample.ProjectSample"
name: "ProjectSample"
version: "${project.version}"
api-version: "1.14"

version${project.version}になっただけですね。

後は先ほど同様に「Maven install」を実行してjarを作成するだけです。

${project.version}の部分が自動的にpom.xmlに設定したバージョンへ変換されます。

まとめ

ここではEclipseを使用してBukkitプラグインを開発するために必要なプロジェクトの作成とIDEの操作全般を解説しました。

自分の作ったプラグインがBukkitで正しくロードされてゲーム内で動作する。感動ですね!

え?まだ何も出来ないからそうでもない?……その辺は次のステップ(執筆中ダヨ)で解説します。

このページで作成したファイルはGitHubに掲載しているので、参考にしてみてください。