Groovy
gradle
JVM
nukkit
Minecraft-Bedrock

NukkitプラグインをGroovyで書く


はじめに

Nukkitプラグインを色んなJVM言語で書いてるのが楽しくて

投稿することにしました。

ちなみに、ついこの前Scalaで書くことができ、投稿しようと思っていたのですが

まさか先を越されて 既にあった...


ScalaでNukkitプラグイン


ので、この記事ではGroovyで書いてみます。

GitHub↓↓

https://github.com/MyDeacy/NukkitPlugin-Groovy


前提として


  • サーバーソフトはNukkitX

  • IDEとしてIntellij IDEAを使用し、Groovyを動かせる状態にしていること。


作成


・プロジェクトの作成

New projectをして、表示されるメニューで

Gradleを選択し、Groovyにチェックを入れてください。

次に、

GroupIdに SamplePlugin

ArtifactIdに mydeacy.groovy.sampleplugin

と記入し、Nextをクリックします。

以下の画像のようになります。

(わかる方はご自身で適宜変えてください。)

SS1.png

終えたら、Use auto-importにチェックを入れ、Next。

保存先を決めたら Finish をクリックしてください。


・build.gradleの編集

必要なファイルが生成されたら、

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.gradle

コピペしてしばらくすると、いくつかディレクトリ等が生成されます。

環境によっては 少し長い時間を要します。

そして、BuildRebuild Project


・ファイルの作成、編集


・plugin.yml

src/main内にある resources を右クリックし、

New→New File。

名前を plugin.ymlに設定し、ファイルを作成します。

中身は、こんな感じで書いてください。

今回は例としてコマンドも用いますので、コマンドの記述があります。

分からない方はコピペでも大丈夫です。


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

に、以下のコードををコピペしてください。


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です。

SS2.png


Nukkitで読み取り可能なjarにする

上部のメニューから Run→Runをクリック。

項目が出てくるので、

SamplePluginを選択してください。

すると、コンパイルを開始します。

数秒でファイルが生成されます。

生成されたjarは、

プロジェクトディレクトリ/build/libs 内にあります。


プラグイン導入

ここの説明はNukkit使用者なら必要ないと思いますが一応。

生成されたjarを、Nukkitのあるディレクトリ/plugins内に入れます。

Nukkitを起動し、無事"Hello Nukkit!!!"が表示されたら

完了です。


おわりに

build.gradleについて、

想定した書き方でいくつか試したところ

NoClassDefFoundErrorに悩まされつつ

このような形になっています。

コードの案等があればコメント或いはプルリクエストが欲しいです。

ダラダラとした説明でしたが

ここまで読んでくださりありがとうございます。

完成品↓↓

https://github.com/MyDeacy/NukkitPlugin-Groovy