1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Minecraft Kotlinプラグイン開発 入門編 Part.4 簡易的なコマンドの作成

Last updated at Posted at 2024-02-25

初めに

今回の記事ではコマンドを作成します。
最初に作るコマンドは/debugと入力したら"こんにちは"と出るだけの物を作ります。

また、コマンドの作り方を軽く紹介したら入門編は終了です。
もっと込んだものが作りたい気持ちは分かりますが、
あと少しだけは我慢して練習していきましょう!

入門編 Part.3 イベントの作成
番外編 plugin.ymlの高度な編集

目次目次と今後の展望

追記

少しでも最初で躓いてしまう人を減らすために、
分からないことを質問できるコミュニティを作成しました。

もし記事を読む中で躓く箇所があったら
このコミュニティへ質問しに来てください!

参加URL→ https://discord.gg/3NEN5s5gnG

手順の説明

コマンドの作成はplugin.ymlで登録コマンドの処理のファイルの作成
プラグイン起動時に有効化の3ステップで行われます。
この3つはコマンドを増やす度に使用するので覚えておきましょう。
一つでも欠けるとちゃんとコマンドが動きません。

plugin.yml の編集

まずはコマンドをplugin.ymlというファイルに登録します。
一番上のフォルダsrcmainresourcesの中のplugin.ymlを開きます。

plugin.yml
name: TutorialPlugin
version: '${version}'
main: com.github.tooooowa.tutorialplugin.TutorialPlugin
api-version: '1.20'

私の環境では上のように設定されています。
この中でnameはプラグインの名前、mainはメインクラスの場所なので
この2つは環境によって異なると思います。
api-versionもプラグインのAPIのバージョンなので環境によって異なります。

このファイルの下に新たにコマンドのためのコードを記述します。

plugin.yml
name: TutorialPlugin
version: '${version}'
main: com.github.tooooowa.tutorialplugin.TutorialPlugin
api-version: '1.20'
commands:
  debug:
    usage: "/debug"
    description: "デバッグ用のコマンドです"

commandsの中のdebugの部分がコマンドの名前になります。
usageはコマンドの使い方、descriptionはコマンドの説明です。
usagedescriptionの2つは特にルールがないので自由に決めて大丈夫です。

コマンド処理のファイルを作成

メインクラスと同じ階層に新しくDebugCommandという名前でオブジェクトを作成します。
オブジェクトの作成方法は前回の記事で紹介したので詳しくはそちらをご覧ください。

ファイル中には一旦以下のように記述します。
(自動で記述される部分はそのままで、5行目の: CommandExecutorだけ追記します)

DebugPlugin.kt
package com.github.tooooowa.tutorialplugin //環境によって異なります

import org.bukkit.command.CommandExecutor

object DebugCommand: CommandExecutor {

}

するとobject DebugPluginの部分が赤く下線で表示されます。
その後、赤下線部の文字にカーソルを合わせて画像のような表示が出たら
メンバーの実装をクリックします。

出ない場合は赤線部を一度左クリックしてから再度カーソルを合わせてください

赤線.png
すると以下のように自動で入力されます。
このonCommand(~){ }{}の中が、コマンドが打たれたときに呼び出される場所です。
なので、このTODOの行を削除して処理を書きます。

override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
        TODO("Not yet implemented")
    }

今回は実行時にこんにちはと返信させたいので、
サーバーからプレイヤーにメッセージを送る関数を使用します。
基本的にプレイヤーに何かを実行する時はプレイヤー.~の形で書きます。

この自動入力で書かれた文では、実行者をsenderとして保存してあるため、
sender.sendMessage("こんにちは")と書きます。
[送る先].sendMessage("内容")でメッセージを送ること出来ます。

このような関数は沢山あって覚えるのは大変ですが、
最初は調べながらたくさん触れて覚えていきましょう。
今度ここで使用できる関数一覧を作成する予定です。

その後、コマンドの終了の目印でreturn trueと次の行に記述して終わりです。

DebugCommand.kt
package com.github.tooooowa.tutorialplugin

import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender

object DebugCommand: CommandExecutor {
    override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
        sender.sendMessage("こんにちは")
        return true
    }

}

プラグイン起動時の有効化処理を追加

最後にplugin.ymlDebugPlugin.ktをプラグイン起動時に連携させる処理を追加します。
メインクラスのonEnableに追記します。

TutorialPlugin.kt
package com.github.tooooowa.tutorialplugin

import org.bukkit.plugin.java.JavaPlugin

class TutorialPlugin : JavaPlugin() {
    override fun onEnable() {
        // Plugin startup logic
        server.pluginManager.registerEvents(EventListener, this)
        getCommand("debug")?.setExecutor(DebugCommand)
    }

    override fun onDisable() {
        // Plugin shutdown logic
    }
}

追加したのは一行だけです。getCommand("debug")?.setExecutor(DebugCommand)
このdebugplugin.ymlの登録名でDebugCommandが作成したオブジェクト名です。

これが出来たらビルドしてみましょう。

サーバーに実装

プラグインをビルドし、サーバーに導入します。
ビルドの仕方を忘れてしまっていたら前々回をご覧ください。

サーバーを起動してから/debugを実行して
画像のようにメッセージが帰ってきたら成功です。

image.png

終わりに

お疲れ様でした。
これにて入門編は完全に終了です。

次回は、中級編の前に番外編として
今回使用した plugin.yml について詳しく解説していこうと思います。

初級編の5記事、最後まで読んでいただきありがとうございました。

入門編 Part.3 イベントの作成
番外編 plugin.ymlの高度な編集

目次目次と今後の展望

参考

https://qiita.com/sya-ri/items/f69f1489b60650a7dd41

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?