Kotlin で始める Minecraft Plugin 開発

#  はじめに

この記事は [法政大学情報科学部 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cis_hosei) 22日目の記事です。

こんにちは、情報科学部の waigoma です。もうすぐ年が変わりますね。とても早いです。
今回は、初めて書く記事ということもあり、自分に一番なじみのある、Spigot の Plugin 開発について解説していきたいと思う。

**Java 版 Minecraft サーバーの Plugin を作って Kotlin を勉強しよう！**
今回、Plugin を作る！と言っても、超簡単なことで超初心者向けである。ということを先に記しておく。

ここで、Kotlin って何？っていう人もいると思うの超簡単に説明しておく。Kotlin は、Java と完全互換性を持つ言語で、コードを簡潔に書くことができる。しかし、比較的新しい言語なので調べてもあまり出てこないというのが欠点である。

今回作成したプロジェクトは、この `Github` にあげておく。

https://github.com/waigoma/KotlinTutorial

それでは早速開発してみましょう！

# 環境

- Spigot 1.18.1
- Intellij IDEA Ultimate 2021.3
- JDK 11.0.11

このような環境を使う。導入方法などはここでは解説しないので、各自調べて導入しましょう！(調べる力も大事！)

## Minecraft Development プラグイン導入

1. Intellij IDEA を起動し、左側のタブから `Plugins` を選択する。
   ![image-20211221153736214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/95c5a133-b646-e4db-e9eb-d103212e2d6e.png)

   

2. `Type / to see options` と書かれている検索ボックス内に "Minecraft" と入力する。すると、"Minecraft Development" という Plugin が表示されるので、これを `Install` する。(この画像はインストール後)
   ![image-20211221160227088.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/c43979e1-8b3f-5610-29ea-bf8010368d91.png)

   これで、Minecraft Development プラグインを導入することができた。

# 開発スタート！

必要なものはそろったので実際に開発を始めていく！



## プロジェクトの作成

1. Intellij IDEA の左側のタブから `Projects` を選択する。そして、`New Project` を選択する。
   ![image-20211221160747997.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/e755202a-2722-f40d-ff19-2cde01bb0c29.png)

   

2. 新しいウィンドウが立ち上がるので、左側のタブから `Minecraft` を選択し、`Spigot Plugin` にチェックを入れる。
   ![image-20211221162131883.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/b16ca287-996e-9931-1a78-f7fda7bcba1c.png)
   ※ ここで、`Minecraft`が表示されない場合はプラグインが入っているかどうかを確認しよう！
   
   
   
    そして、下の方にある `Next` をクリック。
   
   



### Build Settings

3. ビルド (プログラムをコンパイルし1つのファイル (.jar) にすること) の設定を行う。

    ここでの設定項目は以下の通り。
    
    | 項目       | 説明                                                | 例          |
    | ---------- | --------------------------------------------------- | ----------- |
    | GroupId    | 団体やグループなどのユニークなID                    | com.example |
	| ArtifactID | ビルドした後に書き出されるファイル名 (プラグイン名) | Sample      |
	| Version    | プラグインのバージョン                              | 0.0.1       |
	
	Maven を使用してビルドするのでそのままでおｋ。
	![image-20211221163107311.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/c650fe17-0ea0-e760-5f3d-05660a40faa6.png)
	
	
	
	入力が終わったら `Next` をクリック。



### Spigot Settings

4. Spigot Settingsでは、プラグイン名やメインクラス名の指定を行う。Minecraftのバージョンもここで指定するので、導入したいMinecraftのバージョンにあわせると良いでしょう。特になければ最新版を選択すればOK。

    今回は、現時点 (2021/12/21) で最新バージョンの `1.18.1` を選択する。

    Main Class Name は `"Plugin名 + Plugin"` が良い。命名規則をここでは深く触れないが、プログラミングをしていく上で命名規則は大切であるので、ぜひ調べてみてほしい。
   ![image-20211221170542091.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/40d7caef-8265-b61f-bb82-98656b13d9a5.png)

   

    入力が終わったら `Next` をクリック。

   

### ディレクトリの場所指定

5. ついに最後の設定画面。

    ここでは、ディレクトリの場所を指定する。プロジェクトには直接関係ないため、自由な場所に配置しておｋ。

    Project name は、Intellij IDEA で表示される表示名。
    Project location は、ディレクトリの場所。

    わかりやすい名前を付け、わかりやすい場所に配置すると良いでしょう。
   ![image-20211221171143656.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/41d219bf-bc1a-7905-98b9-3c9d726c2e19.png)

   

    入力が終わったら `Finish` をクリック。

    このようなダイアログが出ても問題ない。ディレクトリ存在しないけど作る？と聞いているだけなので、問題がなければ `Create` をクリック。
   ![image-20211221171342978.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/ab7d4f37-824a-99e3-9320-cf92632f40d3.png)

    しばらく待ち、このような画面が表示されていれば成功！おめでとう！
   ![image-20211221172223094.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/d97b6710-ec25-aec7-3307-6a7e477c8f14.png)

   

## まだ設定が残っている！？

「これで Kotlin で開発できる！」と、言いたいところだがまだもう少しだけ設定が残ってる。

**頑張りましょう！**


## Java から Kotlin に変換する

Spigot は Java で作成されているので、プロジェクトを作成した際のテンプレートも Java で作成されてしまう。そのため、Kotlin に変換する必要がある。

だが、安心してほしい。全て Intellij IDEA の機能で自動変換してくれるのだ！

左側のファイルが表示されているメニューの `src` > `main` > `java` を選択。
選択したら、上部メニューバーの `Code` > `Convert Java File to Kotlin File` をクリック。
![image-20211221173216434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/592aafc4-a580-618f-0bd3-245af1b459bd.png)

このようなダイアログが現れたら `All modules` を選択し、`OK` をクリック。
![image-20211221173425309.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/993dec01-f5d8-c7f1-9d80-e4ca571a77fa.png)

すると、Kotlin を使うための依存関係が正しく定義されていないため、このような画面に飛ばされる。
しかし、遷移した画面ではすでに依存関係を正しく定義してくれた後なので問題ない。

更新するため、右上の方のボタンをクリック。
![image-20211221173534770.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/fbf3fda9-9a39-52db-fa33-fb9c01910e14.png)
こんなやつ。

しばらく処理が終わるまで待機。
![image-20211221174132379.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/736c4587-4831-ceee-fb1d-93fd8aa1f746.png)

画面下側のバーを見ると処理中かどうか判断できる。

処理が終わったらもう一度、先ほどと同じことをする。

左側のファイルが表示されているメニューの `src` > `main` > `java` を選択。
選択したら、上部メニューバーの `Code` > `Convert Java File to Kotlin File` をクリック。
![image-20211221174419780.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/805a7d64-a5ad-b4f3-556e-2837d41ef520.png)

すると、今度はこのような表示が出てくるので `Yes` をクリックする。
これは、Kotlin に変換するかどうかの最終確認。
![image-20211221174627365.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/64c74eaa-0a21-7fc0-31e3-9ef21d6bfdda.png)

変換が完了すると、このように Kotlin に変換された状態が表示される。
このようになっていればおｋ。


このとき、ついでに ディレクトリ名を変更しておくと良いだろう。
`src` > `main` > `java` これを `src` > `main` > `kotlin` に変更すると良き。


## plugin.yml の編集

作った Plugin に関する情報がかかれている `plugin.yml` を編集する。
このファイルは、`src` > `main` > `resources` ディレクトリに配置されている。

.yml ファイルの記法などは各自調べてほしい。



`plugin.yml` のデフォルトはこのようになっている。

```plugin.yml	
name: KotlinTutorial
version: '${project.version}'
main: com.waigoma.kotlintutorial.KotlinTutorialPlugin
api-version: 1.18
```



このままでは、作者情報がかかれていないのでそれを追記する。
作者情報は `author` を使用する。

author が複数いる場合は、
`authors: [authorA, authorB]`
と記述することで、`author` を複数記述できる。

追記するとこんな感じ。

```plugin.yml
name: KotlinTutorial
version: '${project.version}'
main: com.waigoma.kotlintutorial.KotlinTutorialPlugin
api-version: 1.18
author: waigoma
```



## ビルド

それでは実際にビルドして、1つの `.jarファイル` を作成していきましょう！

ここから、.jar に書き出すための設定をする。



### ビルド設定

まず、上部メニューバーから `File` > `Project Structure` を選択。
すると、新しいウィンドウが現れるので、左側のタブから `Artifacts` を選択。
![image-20211221180609555.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/8fee6ade-ea74-d8b1-82fc-0dd58145ba99.png)

こんな画面になっていると思う。
左上の方の `+` をクリックする。
![image-20211221180851839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/abd6e350-560b-f77e-deef-b844a7636c98.png)
そして `Jar` > `From modules with depedencies` を選択。
![image-20211221180930169.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/62ff8711-af4d-6302-d523-5cddf53ec3e3.png)
このようなウィンドウが表示されたら、何もせずに `OK` をクリック。
![image-20211221181031563.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/2faeccff-63d8-2c03-5d47-f76a055a4316.png)
このようになったら、右下の `Apply` をクリックして、`OK` をクリックする。



### ビルド実行

ここまで来たら後は楽。

![image-20211221181311184.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/9e4592a5-df04-b4aa-6b25-79c1a3c96475.png)
上部メニューバーから  `Build` > `Build Artifacts` をクリック。

![image-20211221181456257.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/a50e6a4a-9925-4c96-01da-1d4a003fee21.png)

このような画面が出てくるので、 `plugin名:jar` > `Build` をクリック。 
すると、ビルドが実行され、jar ファイルが出力される。

出力場所は、`out` > `artifacts` > `plugin名_jar` ディレクトリに配置されている。
これでビルドが終了した。



## 動作確認

最後に動作確認を行う。
ビルドできた！と思ってもサーバーで動かない！なんてことは普通にあり得る話なので、きちんと確認しましょう！

先ほどビルドし、`jar ファイル`として書き出された `Plugin` をコピーしましょう。
そして、他のプラグインと同様に、サーバーの `plugins` フォルダにコピペすれば準備完了。

それではサーバーを起動してみましょう！

サーバーログに `[Server thread/INFO]: [KotlinTutorial] Enabling KotlinTutorial v1.0-SNAPSHOT` このような記述があれば、正常に読み込みが完了したという証拠だ！

ついでに  `about plugin名` このコマンドを入力してみましょう！すると、、、
![image-20211221183734306.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2348896/af2aac66-ef16-a0c0-e419-84b3b104e007.png)

(ノ´▽｀)ノ オオオオッ♪
この通り、ちゃんと動作していますね！

ここまでくれば、プラグイン開発の準備は完璧に整った。
これで、ついに自分の思うがままプログラミングできる！

# 最後に

ここまで来た方。お疲れさまでした。

どうだったでしょうか。初めて記事を書いて投稿したので、皆さんがわかりやすいように書けているか正直不安ではある。が、書いてて案外楽しかったのでよかったかなと思う。

また機会 (やる気...？) があれば、他のことも書いてみようかなと思う。

ここまでお付き合いいただき、ありがとうございました！
それでは、良い Minecraft 開発ライフを！！！

# 参考文献

- [Kotlinとは？](https://www.pasonatech.co.jp/workstyle/column/detail.html?p=2612)
- [【Kotlin】Spigot プラグイン開発 チュートリアル](https://qiita.com/kiyocy24/items/a9190acb13266ad198e1)
- [【Kotlin】Spigot プラグイン チュートリアル](https://qiita.com/sya-ri/items/bc7eb01ed687b9ff9566)