Bukkitプロジェクトの作成 IntelliJ IDEA編
このページでは、Bukkitプラグインを開発するために必要なプロジェクトの作成とIDEの操作全般を解説します。
なお、このページではIntelliJ IDEAを使用した方法を解説します。
Eclipse(Pleiades)を使用している方は「Bukkitプロジェクトの作成 Eclipse編」をご覧ください。
(前のステップは「Bukkitプラグイン開発に必要な知識と用意する物」です)
スポンサーリンク
目次
プロジェクトの作成
ここではIntelliJ IDEAの英語版を使用して説明します。Pleiadesで日本語化している方は適当に読み替えてください。
まずはプロジェクトを作成しましょう。「Create New Project」を選択します。
「Maven」を選択し「Next」(このとき、「Project SDK」に何も表示されていないなら「New」からJDKを指定しましょう)
プロジェクトの情報を入力する画面です。
「GroupId」は他の人と重複しないようにする必要があります。(ここでいう他の人とは、世界中に居るJava開発者の事です)
そのため、ドメイン名を逆順にして利用する事が推奨されています。たとえばこのサイトのドメインはe-craft.ioなのでio.e-craft
、他にもexample.comならcom.example
……という具合に。
ドメインを持っていない方はGitHubやTwitterのアカウント名を利用しましょう。たとえばGitHubのアカウント名がoctocatならcom.github.octocat
……という具合。
「ArtifactId」はプロジェクト名=プラグイン名です。好きなように名付けて構いません。
「Version」はバージョン番号です。好きな番号を付けて構いませんが、「Semantic Versioning」というやり方がよく使われます。
最後に確認画面が表示されます。問題なければ「Finish」を選択しましょう。
pom.xmlの編集
Bukkitプラグインを開発するためにはBukkitAPIを利用できるようにする必要があります。
ちょっとだけ解説しておくと、最初の方に出てきた「Maven」はこれらの「必要なもの(依存関係)」を管理する仕組みです。(Maven以外にもいくつか種類があります)
実際にBukkitAPIを利用できるように設定していきましょう。まずは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>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つを追加すると次のようになっているはずです。
<?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>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>
Mavenのインポート
これでpom.xmlは正しく編集できているのですが、実はこのままではまだBukkitAPIは使えません。
変更を適用するためには"インポート"を行う必要があります。
pom.xmlを変更すると画面右下に「Maven projects need to be inported」と表示されることがあります。
これが表示された際にはインポートが必要になるため、左側の「Import Changes」を選択しましょう。
この操作はプロジェクトを右クリックして「Maven」→「Reimport」からでも行えます。
これらの操作を毎回行うのは面倒なので自動でインポートする事も可能です。
先ほどの画面の右側、「Enable Auto-Import」を選択すると自動でインポートが行われるようになります。
これは設定画面の「Import Maven projects automatically」からも設定可能です。チェックが入っていれば有効。
ちなみに、設定画面は「File」→「Settings...」から開きます。
「正しく設定できているはずなのにエラーが出る」という時にはインポート忘れの可能性があるので確認してみましょう。
プラグインに必要なファイルの作成
BukkitAPIを依存関係に追加した後は実際にプラグインを開発します。
Bukkitプラグインとして認識させるためにはいくつかの作法に従う必要があります。
メインクラスの作成
まずはメインクラスを作成してみましょう。
メインクラスとはBukkitプラグインをロードする時に呼び出されるクラスです。Bukkit版のpublic static void main
みたいなものです。
src/main/java
を右クリックして「New」→「Package」を選択しましょう。
パッケージ名は小文字で、groupIdとプラグイン名をドットで繋げます。
たとえば、今回の例ではgroupIdはio.e-craft
なのでio.e_craft
です。パッケージ名にハイフン(-
)は使えないのでアンダースコア(_
)に置き換えます。
今回の例ではプラグイン名はProjectSample
ですが、パッケージ名は小文字が原則なのでprojectsample
となります。
この2つをドットで繋げるのでio.e_craft.projectsample
がパッケージ名となります。
他の例
groupIdがcom.example
で、プラグイン名がAdminTools
なら、パッケージ名はcom.example.admintools
となります。
groupIdがcom.github.octocat
で、プラグイン名がCatTree
なら、パッケージ名はcom.github.octocat.cattree
……という具合。
パッケージが作成できたら、次は作成したパッケージを右クリックしてクラスを作成します。
クラス名は何でも構いませんが、「Main」やプロジェクト名が分かりやすいでしょう。
小技ですが、パッケージの作成は省略できます。
クラスを作成する際にパッケージ名.クラス名
で作成すればパッケージも含めて作成されます。
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を選べば自動で追加されます。
もし、それらの画面が出ず、JavaPluginがエラー(赤文字)になったときはJavaPluginにカーソルを合わせてAlt+Enterを押してみましょう。
「Import class」を選べば必要なimport
が追加されます。
次のコードと同じように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()
はコンソールにメッセージを表示するためのコードです。
つまり「起動時にコンソールへメッセージを表示する」という事をやっているわけです。
plugin.ymlの作成
ここまでの手順で最低限のプラグインのコードを書きました。
しかし、このままではまだ動作するプラグインは作成できません。
プラグインを動作させるためには、そのプラグインに関する情報を記載したplugin.yml
を作成する必要があります。
src/main/resources
を右クリックして「New」→「File」を選択します。
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」をクリックします。
「Lifecycle」→「packege」を右クリックして「Run Maven Build」を実行します。
「packege」に成功すると、次のようなログが表示されます。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.163 s (Wall Clock)
[INFO] Finished at: 2019-01-01T00:00:00+09:00
[INFO] Final Memory: 12M/48M
[INFO] ------------------------------------------------------------------------
上手くいかない時は「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
知っておくと便利なこと
プラグイン開発に必須な訳ではありませんが、知っておくと便利な事をいくつか紹介しておきます。
JavaDocの取得
Javaにはメソッドの使い方を解説するための「JavaDoc」があります。要するにAPIの使い方です。
JavaDocもMavenを利用して管理されています。インポート時にダウンロードしておくと良いでしょう。
やり方は簡単、プロジェクトを右クリックして「Maven」→「Download Sources and Documentation」です。
設定の「Automatically donwload」から「Sources」と「Documentation」にチェックを入れておくと自動で行われるようになります。
また、「Show quick documentation on mouse move」と「Show the documentation popup in ... ms」にもチェックを入れておくといいでしょう。
これらにチェックを入れておくと、入力補完の際やメソッドにマウスを重ねた際にJavaDocが表示されるようになりとても捗ります。
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でpackageを実行してjarを作成するだけです。
${project.version}
の部分が自動的にpom.xml
に設定したバージョンへ変換されます。
まとめ
ここではIntelliJ IDEAを使用してBukkitプラグインを開発するために必要なプロジェクトの作成とIDEの操作全般を解説しました。
自分の作ったプラグインがBukkitで正しくロードされてゲーム内で動作する。感動ですね!
え?まだ何も出来ないからそうでもない?……その辺は次のステップ(執筆中ダヨ)で解説します。
このページで作成したファイルはGitHubに掲載しているので、参考にしてみてください。