LoginSignup
0

More than 3 years have passed since last update.

NukkitプラグインをGroovyで書く

Last updated at Posted at 2019-01-01

はじめに

Nukkitプラグインを色んなJVM言語で書いてるのが楽しくて
投稿することにしました。

ちなみに、ついこの前Scalaで書くことができ、投稿しようと思っていたのですが
まさか先を越されて 既にあった...

ScalaでNukkitプラグイン

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

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

前提として

  • サーバーソフトはNukkitX
  • IDEとしてIntellij IDEAを使用し、Groovyを動かせる状態にしていること。

作成

・プロジェクトの作成

New projectをして、表示されるメニューで
Gradleを選択し、Groovyにチェックを入れてください。

次に、
GroupIdに mydeacy.groovy.sampleplugin
ArtifactIdに 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0