SBTでプロジェクトを作成して、ScalaでSpigotのプラグインを開発できるようにするまでをやっていきます。
開発環境
- IntelliJ IDEA w/ Scala Plugin
- Windows 10
- sbt 1.3.2
プロジェクト作成
IntelliJ IDEAを使っていますが、sbtと適当なテキストエディタのみでも可能だと思います。
sbtのプロジェクトを作成する
IntelliJ IDEAを起動し、Scalaのプラグインが導入済みであれば、新規プロジェクトのScalaの中にsbtがあると思うので、そこから作成します。
パッケージの依存関係を追加
build.sbt
に下記を追加。
resolvers += "spigot-repo" at "https://hub.spigotmc.org/nexus/content/repositories/snapshots/"
resolvers += "bungeecord-repo" at "https://oss.sonatype.org/content/repositories/snapshots"
resolvers += Resolver.jcenterRepo
resolvers += Resolver.bintrayIvyRepo("com.eed3si9n", "sbt-plugins")
libraryDependencies += "org.spigotmc" % "spigot-api" % "1.14.4-R0.1-SNAPSHOT"
Fat Jarを出力するためにプラグインを追加する
Fat Jarを吐くためにsbt/sbt-assemblyを追加します。
project/plugins.sbt
を作成し、下記を追加。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")
メインとなるクラスを作成
src/main/scala/
にパッケージと同じようになるようディレクトリを生成してクラスを追加します。
package com.example.plugin
なら src/main/scala/com.example.plugin/ExamplePlugin.scala
とかにする。
作成したメインクラスに下記を追加。
import org.bukkit.plugin.java.JavaPlugin
class ExamplePlugin extends JavaPlugin {
override def onEnable(): Unit = {
super.onEnable()
getLogger.info("hello world")
}
}
plugin.ymlを追加
src/main/resources/plugin.yml
を作成し、編集します。
Plugin.yml | Spigot MCを参考に書くといいです。
例
name: ExamplePlugin
version: 1.0.0
main: com.example.plugin.ExamplePlugin
api-version: 1.14
mainにはJavaPluginを継承したクラスのパスを記述してください。
Jarを吐いてみる
一通り終わったら、sbt shellを起動し、 assembly
を実行する。問題なく通れば target/scala-x.y/
にFat Jarが出力されます。
Spigotサーバにpluginを配置してロードすると、このプラグインが有効になった際に hello world
とログ出力されたら成功です。
所感
今回の成果物はこちら(ekuinox/spigot-login-alert)です。サーバのログインイベントをDiscordのWebhookに投げています。
要はJavaで書かれたパッケージを利用してFat Jarを吐いただけなので、当たり前なのですがScalaをやった感覚はあまりなく、sbtの設定に時間を費やしたのみでした。
KotlinでSpigotを開発する記事はあったのですが、Scalaだと見つからなかったので、Scalaの勉強がてらにやってみようと思いメモを残すことにしました。