前置き
Nukkit 1 のプラグインがkotlinで作成できると聞き「Scalaでもできるのでは?」と思い、試してみたら出来たのでメモ
完成品はこちらに
https://github.com/suinua/nukkit_scala_plugin
環境
scala:2.12.7
sbt:1.2.3
前提条件
nukkitでサーバーが建てられる
scalaの環境構築済み
intellij IDEをインストール済み
intellij IDEのScalaプラグインをインストール済み
プロジェクトの作成
intellijを開き、scala→sbt→next

今回はSampleというプラグインを作ります。
nameをsampleに
locationは好きなディレクトリを選択してください

Nukkitの読み込み
intellijのロードが終わったら、ファイルマネージャーを開きSample/libsディレクトリを作成し、nukkit-1.0-SNAPSHOT.jarをコピーして持ってきます。

Project Structure→models→Sample(プロジェクト名)→Dependencies→+ボタン→JARs or directories→nukkit-1.0-SNAPSHOT.jar

SBTの準備
Sample/build.sbtに
unmanagedBase := baseDirectory.value / "libs"
を書き足します。
Sample/project/plugins.sbtを作成し
resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7")
と書き込みます。
nukkitプラグインのための準備
Sample\src\main\resources\plugin.ymlを作成下のコードをコピペします。
name: Sample #プラグインの名前
main: my.plugin.Sample #Mainクラスの場所
version: 0.0.1
author: suinua
api: ["1.0.0"]
Sample\src\main\scalaを右クリック→new→Package
plugin.ymlに書いたmain:my.plugin.Sampleよりmy.pluginを入力

作成したmy.pluginを左クリック→Scala Class
plugin.ymlに書いたmain:my.plugin.SampleよりSampleを入力

Sample.scalaに以下をコピペ
package my.plugin
import cn.nukkit.event.EventHandler
import cn.nukkit.event.Listener
import cn.nukkit.event.player.PlayerJoinEvent
import cn.nukkit.plugin.PluginBase
class Sample extends PluginBase with Listener{
override def onEnable(): Unit = {
this.getServer.getPluginManager.registerEvents(this, this)
}
@EventHandler def onPlayerJoin(event: PlayerJoinEvent): Unit = {
event.getPlayer.sendMessage("Hello, World.")
}
}
jarにコンパイル
ターミナルを開きsbt assemblyを実行
場合によっては10分ぐらいかかります(最初だけかな?)
[success] Total time: ** s, completed ****/**/** **:**:**とでたら成功です。
Sample\target\scala-2.12にSample-assembly-0.1.jarが生成されます。
Sample-assembly-0.1.jarをコピーしnukkitのpluginsフォルダにぶちこみ
サーバーを起動します。
-
nukkitとはMinecraft Be向けのサーバーソフトウェアです。nukkitの公式サイト ↩
