Bukkitプロジェクトの作成 Eclipse編
このページでは、Bukkitプラグインを開発するために必要なプロジェクトの作成とIDEの操作全般を解説します。
なお、このページではEclipse(の、日本語翻訳版であるPleiades)を使用した方法を解説します。
IntelliJ IDEAを使用している方は「Bukkitプロジェクトの作成 IntelliJ IDEA編」をご覧ください。
(前のステップは「Bukkitプラグイン開発に必要な知識と用意する物」です)
スポンサーリンク
目次
プロジェクトの作成
ここではEclipseの日本語翻訳版であるPleiadesを使用して説明します。英語版を利用している方は適当に読み替えてください。
まずはプロジェクトを作成しましょう。「ファイル」→「新規」→「Mavenプロジェクト」を選択します。
「シンプルなプロジェクトの作成」にチェックを入れて「次へ」を選択します。
プロジェクトの情報を入力する画面です。
「グループ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
を開きます。
初期状態では次のような内容になっていると思われます。
<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.source
やmaven.compiler.target
)を変更した時や自動ダウンロードが上手くいかない時には手動での更新が必要になります。
今回の例では、先ほどのpom.xmlの編集でJavaバージョンを変更しているので手動での更新が必要ですね!
プロジェクト名の部分を右クリックして「Maven」→「プロジェクトの更新」を選びます。もしくは、Alt+F5でも同じ画面が開きます。
更新したいプロジェクトにチェックが入っていることを確認して「OK」を押しましょう。
これでプロジェクトの情報が更新されます。
「正しく設定できているはずなのにエラーが出る」という時にはプロジェクトの更新が必要な可能性もあるので確認してみましょう。
プラグインに必要なファイルの作成
BukkitAPIを依存関係に追加した後は実際にプラグインを開発します。
Bukkitプラグインとして認識させるためにはいくつかの作法に従う必要があります。
メインクラスの作成
まずはメインクラスを作成してみましょう。
メインクラスとはBukkitプラグインをロードする時に呼び出されるクラスです。Bukkit版のpublic static void main
みたいなものです。
src/main/java
を右クリックして「新規」→「パッケージ」を選択しましょう。
パッケージ名は小文字で、グループIdとプラグイン名をドットで繋げます。
たとえば、今回の例ではグループIdはio.e-craft
なのでio.e_craft
です。パッケージ名にハイフン(-
)は使えないのでアンダースコア(_
)に置き換えます。
今回の例ではプラグイン名はProjectSample
ですが、パッケージ名は小文字が原則なのでprojectsample
となります。
この2つをドットで繋げるのでio.e_craft.projectsample
がパッケージ名となります。
他の例
グループIdがcom.example
で、プラグイン名がAdminTools
なら、パッケージ名はcom.example.admintools
となります。
グループIdがcom.github.octocat
で、プラグイン名がCatTree
なら、パッケージ名はcom.github.octocat.cattree
……という具合。
パッケージが作成できたら、次は作成したパッケージを右クリックしてクラスを作成します。
「名前」のところにクラス名を入力しましょう。クラス名は何でも構いませんが、「Main」やプロジェクト名が分かりやすいでしょう。
小技ですが、パッケージの作成や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'をインポートします」を選択しましょう。
次のコードと同じように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
を右クリックして「新規」→「ファイル」を選択します。
plugin.yml
を作成します。
最低限必要なのは次の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」を選択します。
「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
というファイル名で存在しています。
これをサーバーの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に掲載しているので、参考にしてみてください。