はじめに
Minecraftプラグインの作成に関する記事が少なく、ましてやKotlinで作ってみたものはさらに少ないので、チュートリアルを作成してみました。
これからプラグインを作りたいという方はJavaよりKotlinが書きやすくておすすめなので、ぜひ参考にしてください。
コードはこちらにあります。
SamplePlugin
そもそもKotlinって?
説明に入る前に、Kotlinについて少し触れておきましょう。
KotlinはJavaと完全互換の言語です。
2017年5月にGoogleがAndroid開発言語に選定してから、徐々に人気を伸ばしてきました。(おかげで、Androidの情報ばかりで、マイクラのプラグインの記事なんて数えるほどしかありません)
― 【TechCrunch】Google、KotlinをAndroidアプリ開発言語に選定
その特徴はなんといっても、Null Safetyです。
Javaで開発していると、必ずといって現れるNullException...これがコンパイルの時点で防げるということ。
ああ、Null Safety、なんて甘美な響きでしょう。
とはいえ、JavaのライブラリやAPIを併用することもあるので、NullExceptionを完全に防ぐことはできません。
Nullableな変数を指定すれば、Nullの代入を許してしまうので、あくまでNullExceptionが発生しにくくなったぐらいで考えておくと良いかもしれません。
他にもJavaとの違いをあげると
- セミコロンがいらない
- 三項演算子の代わりにif(Kotlinではifは関数)
- 型推論(型指定が省略できる)
- 変数宣言にvar(書き換え可)、val(書き換え不可)がある
などなど完全互換といえど、Javaと異なる点はいくつもあります。似て非なる言語です。
JavaとKotlinの違いに関する記事はいくつも出されていますので、ここでは割愛します。
― 【Qiita】はじめてのKotlin。Javaと比較してみた
それでは、プラグインの開発環境を構築しましょう。
開発環境構築
私の環境です。
項目 | 値 |
---|---|
OS | Windows10 |
メモリ | 16GB |
IntelliJ IDEA Version | 2019.1 (Ultimate Edition) |
IntelliJ IDEA インストール
まずはKotlinの開発環境を整えます。Kotlinの開発環境はIntelliJ IDEA一択かと思います。IntelliJ IDEAはKotlinの開発元であるJetBrains社が提供しているIDEです。よほどの理由がない限り、IntelliJ IDEAを使いましょう。
ちなみに筆者の
Minecraft Development 追加
インストールが終わったらプロジェクトを作成する前に、IntelliJ IDEAのプラグインとしてMinecraft Developmentを追加します。これを導入することで、SpigotやBukkit用のテンプレートが作成できるようになります。
IntelliJ IDEAが起動したら、File
-> Settings
でSettingsウィンドウを開きます。
ウィンドウの左メニューからPlugins
を選択し、検索ウィンドウに"minecraft"と入力します。
検索結果にMinecraft Development
があるので、Install
ボタンを押してプラグインを適用します(図ではすでにインストールされているので、Installed
となっています)。
もし、Kotlinプラグインも入っていなければ、同様の手順で導入してください。検索ワードはkotlin
でOKです。
これで開発環境は整いました。続いて、プロジェクトの作成を行います。
プロジェクト作成
プロジェクトの作成はFile
-> New
-> Project
で行います。
New Project
ウィンドウが開くので、左メニューからMinecraft
を選び、Choose plugin type
でSpigot Plugin
にチェックを入れ、Next
ボタンを押してください。Build Setting画面になります。
もし、左メニューにMinecraft
がない場合は、Minecraft Developmentプラグインが入っていないということです。プラグインが入っているかどうか確認してください。
Build Setting
ここではGroupId、ArtifactId、Versionを指定します。今回は例の通りに設定します。
項目 | 説明 | 例 |
---|---|---|
GroupId | 団体やグループのユニークなID | com.sample |
ArtifactId | 生成されるjarファイルのバージョン抜きの名前 | Sample |
Version | プラグインのバージョン | 1.0-SNAPSHOT |
ここで、注意!
デフォルトではMavenとなっていますが、Gradleに変更してください。
Mavenでやりたいって人は構いませんが、よく分からないって人はGradleをおすすめします。
MavenはXMLで設定するので、読みづらく設定もしずらいです。
この後の解説もGradle前提で行います。
入力し終えたら、Next
ボタンを押します。
Spigot Settings
Spigot Settingsでは、プラグイン名やメインクラス名の指定を行います。Minecraftのバージョンもここで指定するので、導入したいMinecraftのバージョンにあわせましょう。特になければ最新版を選択すればOKです。
また、メインクラス名はプラグイン名 + Plugin
がおすすめです。メインクラスはJavaPlugin
を継承することになるので、命名規則の都合上プラグイン名 + Plugin
となることが多いです。
入力が完了したら、Next
ボタンを押して次に進みます。
ディレクトリ指定
最後の設定画面です。
ここではディレクトリ名を指定します。プロジェクトには直接関係はありません。
分かりやすい名前をつけましょう。
ディレクトリの場所を変更したい人はProject location
から指定が可能です。
最後にfinish
を押せばプロジェクトの作成は完了です!
Import Module from Gradle
というウィンドウが出てくるかもしれませんが、OKで大丈夫です。
まだ半分です...
「これで開発できる!」といいたいんですが、もう少しやることがあります。
JavaをKotlinにコンバートする作業です。他にもGradle編集や最低限の設定が残っています。
Convert Java File to Kotlin File
SpigotはJavaで作成されているので、プラグインテンプレートもJavaで作成されています。
Kotlinで書くには自動生成されたJavaコードをコンバートしなければなりません。
とはいえ、リファクタリングするまでもなく、IntelliJ IDEAの機能で自動変換してくれます。
Projectメニューに表示されているディレクトリからsrc
-> main
-> java
を選択してください。
選択したら、メニューバーのCode
-> Convert Java File to Kotlin File
をクリックすれば、自動でコードをKotlinに書き直してくれます。
ついでに、ディレクトリ名もjava
からkotlin
に変更しておきましょう。
build.gradleの編集
チュートリアル最大の山場、Gradleです。
Gradleとはビルドシステムのことで、依存関係やビルド方法を記述したものになります。
Gradleの記述を間違えると、「コードは正しいのに動かない」なんてこともしばしばですので、間違いなく書いていきましょう。
不要なファイルの削除
実はIntelliJ IDEAが自動生成したファイルの中に、不要なものがあります。ルートディレクトリの.ideaディレクトリにあるiml
ファイルです。これはIntelliJ IDEAの設定ファイルですが、これが原因でbuild.gradle
に不要な警告(黄色の網掛け)が表示されてしまいます。特に必要のないファイルとのことなので、build.gradle
を編集する前に削除しておきましょう。
もし、心配な人はバックアップを取っておくと良いと思います。
iml
ファイルを削除したら、Build
-> Rebuild Project
からプロジェクトをリビルドしましょう。警告が表示されなくなるはずです。
buildscript, dependencies, jarの変更・追記
Kotlinや外部ライブラリ周りの依存関係を追記していきます。
今回は以下のように記述しました。
buildscript {
ext {
junit_version = '4.12'
kotlin_version = '1.3.21'
spigot_version = '1.13.2-R0.1-SNAPSHOT'
}
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
group = pluginGroup
version = pluginVersion
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
maven {
name = 'spigotmc-repo'
url = 'https://hub.spigotmc.org/nexus/content/groups/public/'
}
maven {
name = 'sonatype'
url = 'https://oss.sonatype.org/content/groups/public/'
}
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: junit_version
testRuntimeOnly group: 'junit', name: 'junit', version: junit_version
compile "org.spigotmc:spigot-api:$spigot_version"
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
import org.apache.tools.ant.filters.ReplaceTokens
processResources {
from(sourceSets.main.resources.srcDirs) {
filter ReplaceTokens, tokens: [version: version]
}
}
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
主要な部分についてだけ解説します。
buildscript ブロック
まずはbuild.gradle
の先頭にbuildscript
を追記しましょう。
buildscript
はビルドスクリプト自体が依存しているライブラリを指定するブロックになります。今回はKotlinのGradleプラグインを利用するために必要な記述です。他に各ライブラリのバージョンもここで指定すると、管理が楽になります。
buildscript {
ext {
junit_version = '4.12'
kotlin_version = '1.3.21'
spigot_version = '1.13.2-R0.1-SNAPSHOT'
}
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21"
}
}
...
dependencies ブロック
dependencies
ブロックはその名の通り、ライブラリの依存関係を記述する場所になります。
バージョンはbuildscript
のext
ブロックで記述したのでそれを参照します。
今回はSpigotの他にKotlinのライブラリも使うので、これらを記述します。
また、テスト用にJunitライブラリも入れておきます。
...
dependencies {
testImplementation group: 'junit', name: 'junit', version: junit_version
testRuntimeOnly group: 'junit', name: 'junit', version: junit_version
compile "org.spigotmc:spigot-api:$spigot_version"
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
...
jar ブロック
jar
ブロックではjarファイルに出力に関する記述を行います。
ここでは外部ライブラリをjarに含める処理を書いています。
これを記述しないと、jarファイルに外部ライブラリが含まれず、実行エラーを引き起こす恐れがあります。
jarファイルが大きくなる原因にもなりますが、依存プラグインを持たせたくないのであれば、この記述は必須になります。
...
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
最後にビルドをして、エラーが出なければOKです。
何かしらのエラーが出た場合、build.gradle
に不備があるということです。
もう一度、build.gradle
を見直してみましょう。
plugin.ymlの編集
これが最後の手続きになります。
作ったプラグインに関する情報が書かれているplugin.yml
を編集しましょう。
ymlファイルについては、別記事を参照してください。
― 【Qiita】YAML 基本記法まとめ
plugin.yml
はsrc
-> resources
ディレクトリの中にあります。
name: Sample
version: @version@
main: com.tklcraft.sample.SamplePlugin
api-version: '1.13'
author: kanakiyo314
まず、api-versionはシングルクォーテーション''
で囲みましょう。
Stringが実数になっていると警告が表示されてしまいます。
そして大事なのがauthor
の記述です。
誰が作ったのかは大変重要な情報なので漏れなく書き込みましょう。
何より、動作テストのときに表示させるととても感動します。
authorが複数いる場合は、
authors: [authorA, authorB]
と記述することで、author
を複数記述できます。
動作テスト
最後に動作テストです。
ビルドできても動かないなんてことはザラなので、きちんと確認しましょう。
ビルドで生成されがjarファイルはルートディレクトリ
-> build
-> lib
にあります。
それを通常のプラグインと同様にplugins
フォルダにコピーすれば準備は完了です。
サーバを起動してみましょう。
サーバログに[Sample] Enabling Sample v1.0-SNAPSHOT
と表示されれば成功です(プラグイン名、バージョンは設定した値)。
ついでにabout プラグイン名
でコマンドを入力してみましょう。すると…
どうですか?
ちょっと感動しませんか?
ここまで来れば、プラグイン開発の準備は完全に整いました。
もうこれで、バリバリコードが欠けます!
最後に
Minecraftのプラグイン作成に関する記事はとても少ないです(Kotlinならなおさら…)。
今回は誰もが苦労するであろう部分を重点的にまとめてみました。
次回はプラグインの作り方についてのチュートリアルでも書こうかと思います。
参考リンク
- 【公式】Kotlin
- 【TechCrunch】Google、KotlinをAndroidアプリ開発言語に選定
- 【ブログ】Android公式言語 Kotlinとはどんな言語でどんなメリットがあるのか?!
- 【Qiita】はじめてのKotlin。Javaと比較してみた
- 【ブログ】KotlinのNull安全ってどうなの?!検証も交えてまとめてみた!
- 【SlideShgare】Gradle 入門
- 【Spigot】How to use Kotlin in your plugins
- 【Qiita】Gradleを始めてみよう
- 【Qiita】KotlinでSpigotプラグインを作るためのbuild.gradle
- 【公式】Kotlin using Gradle
- [【stack overflow】IntelliJ IDEA and Gradle - Cannot be applied to '(groovy.lang.Closure)'] (https://stackoverflow.com/questions/32905270/intellij-idea-and-gradle-cannot-be-applied-to-groovy-lang-closure)
- 【Qiita】YAML 基本記法まとめ