NukkitプラグインをKotlinで書こう

# Kotlinとは？
- Javaとの互換が100%
 - Javaのコードとの同時使用可能
 - Javaのライブラリやフレームワークが使える
- シンプルに書ける
 - Javaだと長いコードがKotlinであれば短く書ける
- Null安全
 - ぬるぽを防げる

詳しいことは自分で調べろ下さい。

# 環境設定
[IntelliJ IDEA](https://www.jetbrains.com/idea/)からIDEをダウンロード
Community版で十分と思います。

# プロジェクト作成
## 初期設定
IntelliJ IDEAを起動して新規プロジェクトを作成します。
![スクリーンショット (25).png](https://qiita-image-store.s3.amazonaws.com/0/348310/0ed43792-8ade-d3e2-d0c8-40cdad5f8294.png)

Gradleを選択、Kotlinにチェックを入れ、次へ
![スクリーンショット (26).png](https://qiita-image-store.s3.amazonaws.com/0/348310/a5765e7e-2a53-773f-23a4-1748048ccd05.png)

プロジェクトの情報を入力します。
グループID、アーティファクトID、バージョンを適宜入力し、次へ
今回は画像の設定で以下の説明を致します。
![スクリーンショット (27).png](https://qiita-image-store.s3.amazonaws.com/0/348310/4cac57ba-da76-7777-76a7-7a005d871cc1.png)

全てにチェックを入れ、次へ
![スクリーンショット (28).png](https://qiita-image-store.s3.amazonaws.com/0/348310/a8085dbf-8b2c-51f5-aeb0-3e6b63e5558c.png)

プロジェクト名を入力し、完了
![スクリーンショット (42).png](https://qiita-image-store.s3.amazonaws.com/0/348310/64549e57-bd4e-4354-5b61-2512fead19ad.png)


## Gradleの設定
build.gradleを以下のように設定します。

```gradle:build.gradle
plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.11'
    id 'com.github.johnrengelman.shadow' version '4.0.4'
}

group 'me.bitterpeace.plugin'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven {
        url "http://repo.nukkitx.com/main/"
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compileOnly "cn.nukkit:nukkit:1.0-SNAPSHOT"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
```

## plugin.ymlの設定
resourcesを右クリック、新規->ファイル からplugin.ymlを追加します。
![スクリーンショット (41).png](https://qiita-image-store.s3.amazonaws.com/0/348310/10ac6654-610c-c0a7-9218-e83fd01bc877.png)

```yaml:plugin.yml
name: JoinMessage
main: bitterpeace.joinmessage.JoinMessagePlugin
version: "1.0.0"
api: ["1.0.7"]
load: POSTWORLD
author: BitterPeaceV
description: exsample plugin
website: https://github.com/BitterPeaceV/JoinMessage
```

## プラグインの中身をゴリゴリ書く
kotlinを右クリック、新規->パッケージ から bitterpeace.joinmessage (plugin.ymlのmainで書いたもの) を作成します。
![スクリーンショット (33).png](https://qiita-image-store.s3.amazonaws.com/0/348310/f2d148d1-fb42-48f2-67cb-ae637f96f229.png)

作成したパッケージを右クリック、新規->Kotlinファイル/クラス からJoinMessagePlugin (こちらもplugin.ymlで書いたもの) を作成します。その際、種類をClassに変更することをお忘れなく！
![スクリーンショット (35).png](https://qiita-image-store.s3.amazonaws.com/0/348310/effad0cc-016b-2fdd-d01a-1be2de26e483.png)

以下、JoinMessagePluginのコードです。

```kotlin:JoinMessagePlugin.kt
package bitterpeace.joinmessage

import cn.nukkit.event.EventHandler
import cn.nukkit.event.Listener
import cn.nukkit.event.player.PlayerJoinEvent
import cn.nukkit.plugin.PluginBase

class JoinMessagePlugin : PluginBase(), Listener {
    override fun onEnable() {
        logger.info("Enabled JoinMessage Plugin!")
        server.pluginManager.registerEvents(this, this)
    }

    @EventHandler
    fun onPlayerJoin(event: PlayerJoinEvent) {
        event.player.sendMessage("Hello World!")
    }
}
```

## ビルドする
右上の 構成を追加 から + -> gradle と選択し以下のように設定して、適用、OK
![スクリーンショット (40).png](https://qiita-image-store.s3.amazonaws.com/0/348310/10029e33-a1e2-9c30-9d64-4268a10a6a72.png)

横の実行ボタン(再生ボタンっぽいの) を押してビルドします。

出来上がったものは プロジェクトのフォルダ\build\libs の中にあるはずです。

## プラグインを実行
生成されたjarファイルをNukkitのpluginsに入れてNukkitを起動します。

**や　っ　た　ぜ　。**
![IMG_0016.PNG](https://qiita-image-store.s3.amazonaws.com/0/348310/084bd45a-050e-fbbc-28cf-0cd41637c8d5.png)

# 終わりに
参考文献 (というかほぼ丸パクリです。ゴメンナサイ。)
[NukkitプラグインをKotlinで書く！](https://blog.haniokasai.com/2017/01/nukkitkotlin.html)
[2017年のMinecraftプラグイン開発はKotlinで決まり！Kotlin導入方法！](https://qiita.com/ReyADayer/items/ca3f42dbb5b59d150f7e)

さて、Kotlinでのプラグイン作りは如何でしたか？
最初のうちは慣れなくて難しいと思いますが、根気強く頑張ってください！
今回作ったものは[GitHub](https://github.com/BitterPeaceV/JoinMessage)にて公開していますので参考にして頂けたら幸いです。
~~初めての記事でクッソ疲れた...~~
ではでは、次の記事でお会いしましょう(｀･ω･´)ゞ