はじめに
Nukkitプラグインを色んなJVM言語で書いてるのが楽しくて
投稿することにしました。
ちなみに、ついこの前Scalaで書くことができ、投稿しようと思っていたのですが
まさか先を越されて 既にあった...
ので、この記事ではGroovyで書いてみます。
GitHub↓↓
https://github.com/MyDeacy/NukkitPlugin-Groovy
前提として
- サーバーソフトはNukkitX
- IDEとしてIntellij IDEAを使用し、Groovyを動かせる状態にしていること。
作成
・プロジェクトの作成
New projectをして、表示されるメニューで
Gradleを選択し、Groovyにチェックを入れてください。
次に、
GroupIdに mydeacy.groovy.sampleplugin
ArtifactIdに SamplePlugin
と記入し、Nextをクリックします。
以下の画像のようになります。
(わかる方はご自身で適宜変えてください。)
終えたら、Use auto-importにチェックを入れ、Next。
保存先を決めたら Finish をクリックしてください。
・build.gradleの編集
必要なファイルが生成されたら、
build.gradleを開いてください。
デフォルトで書いてあるコードを消し、以下のコードをコピペしてください。
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath "com.github.jengelman.gradle.plugins:shadow:1.2.3"
}
}
apply plugin: "groovy"
apply plugin: "com.github.johnrengelman.shadow"
defaultTasks "shadowJar"
version = "1.0.0"
repositories {
mavenCentral()
maven {
url "https://repo.nukkitx.com/main/"
}
}
dependencies {
compile "org.codehaus.groovy:groovy-all:2.3.11"
compileOnly "cn.nukkit:nukkit:1.0-SNAPSHOT"
}
コピペしてしばらくすると、いくつかディレクトリ等が生成されます。
環境によっては 少し長い時間を要します。
そして、Build
→Rebuild Project
・ファイルの作成、編集
・plugin.yml
src/main内にある resources を右クリックし、
New→New File。
名前を plugin.yml
に設定し、ファイルを作成します。
中身は、こんな感じで書いてください。
今回は例としてコマンドも用いますので、コマンドの記述があります。
分からない方はコピペでも大丈夫です。
name: SamplePlugin
main: mydeacy.groovy.sampleplugin.SamplePlugin
version: 1.0.0
api: ["1.0.0"]
commands:
id:
description: "Description"
usage: "/id"
・クラスの作成
src/main内の groovy を右クリックし、
New→Package。
mydeacy.groovy.sampleplugin
と入力し、OKをクリックします。
そうすると、groovyディレクトリの中に
先程名前の付けたパッケージがあるので、
それを右クリック→New→Groovy Classを選択し、
名前を
SamplePlugin
にし、OKをクリックしてください。
生成されたSamplePlugin.groovy
に、以下のコードをコピペしてください。
package mydeacy.groovy.sampleplugin
import cn.nukkit.Player
import cn.nukkit.command.Command
import cn.nukkit.command.CommandSender
import cn.nukkit.event.EventHandler
import cn.nukkit.event.Listener
import cn.nukkit.event.player.PlayerJoinEvent
import cn.nukkit.item.Item
import cn.nukkit.plugin.PluginBase
class SamplePlugin extends PluginBase implements Listener {
@Override
void onEnable() {
getLogger().info("Hello Nukkit!!!")
getServer().getPluginManager().registerEvents(this, this)
}
@EventHandler
void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer()
player.sendMessage(player.getName() + ", Welcome to my server!")
}
@Override
boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Item item = sender.getInventory().getItemInHand()
sender.sendMessage("This is " + item.getName() + ". (" + item.getId() + ":" + item.getDamage() + ")")
}else{
getLogger().info("Hey Console.")
}
return true
}
}
ハイライトが付かない場合は、
build.gradleを開き、
compileOnly "cn.nukkit:nukkit:1.0-SNAPSHOT"
を
compile "cn.nukkit:nukkit:1.0-SNAPSHOT"
に変えて、しばらくして戻すと反映されると思います。
戻すのを忘れないでください。
✔ 今回のコードはどういうものか
Groovyで書く例ですが、完全にJavaぽいサンプルになってしまっています()
こちらのは、プラグイン有効化時に "Hello Nukkit!!!"とコンソールに出し、
プレイヤーの参加時には
"{プレイヤー名}, Welcome to my server!"
とメッセージを送ります。
また、コマンドでは
/id でプレイヤーの持っているアイテム名、ID:Metaを出力します。
・完成図
中身はできてるものとします。
このようになっていればOKです。
Nukkitで読み取り可能なjarにする
上部のメニューから Run→Runをクリック。
項目が出てくるので、
SamplePluginを選択してください。
すると、コンパイルを開始します。
数秒でファイルが生成されます。
生成されたjarは、
プロジェクトディレクトリ/build/libs 内にあります。
プラグイン導入
ここの説明はNukkit使用者なら必要ないと思いますが一応。
生成されたjarを、Nukkitのあるディレクトリ/plugins内に入れます。
Nukkitを起動し、無事"Hello Nukkit!!!"が表示されたら
完了です。
おわりに
build.gradleについて、
想定した書き方でいくつか試したところ
NoClassDefFoundError
に悩まされつつ
このような形になっています。
コードの案等があればコメント或いはプルリクエストが欲しいです。
ダラダラとした説明でしたが
ここまで読んでくださりありがとうございます。