Command - 4rna-y/Amalib GitHub Wiki

概要

コマンド実装を容易にする機能です。
この機能はプラグインフレームワークから提供されているコマンドシステムのラッパーであり、コマンド引数による分岐処理を記述することなく構築できます。

主要なコンポーネント

  • CommandObject
    コマンドの基本構造を定義するインターフェース
  • StructuredCommandBuilder
    CommandObjectを構築するビルダークラス
  • ArgumentExecutorNode
    コマンドの実行ロジックを定義する抽象クラス
  • ArgumentBranchNode
    コマンドの分岐を定義するクラス
  • StructuredCommandRegistry
    CommandObjectをゲームサーバーに登録するクラス

使用例

実行ロジックを定義する

class ShowArgumentNode : ArgumentExecutorNode("show")
{
    override fun execute(sender: CommandSender, args: Array<out String>): Boolean
    {
        sender.sendMessage("called show")
        return true
    }
}

CommandObjectを作成し登録する

override fun onEnable()
{
    // StructuredCommandRegistryを登録する
    val provider = ServiceCollection(this)
        .useStructuredCommand()
        .build()
    
    // コマンドを構築する
    val commandObject = StructuredCommandBuilder("game", provider)
        .add("config") // 分岐
        {
            it.add<ShowArgumentNode>()
        }
        .build()

    // コマンドを登録する
    provider.getStructuredCommandRegistry().register(commandObject)
}

依存性の注入

ArgumentExecutorNodeにおいてオブジェクトを注入することができます。

override fun onEnable()
{
    // ConfigServiceを登録する
    val provider = ServiceCollection(this)
        .useStructuredCommand()
        .addSingleton<ConfigService, ConfigServiceImpl>()
        .build()
    
    val commandObject = StructuredCommandBuilder("game", provider)
        .add("config")
        {
            it.add<ShowArgumentNode>()
        }
        .build()

    provider.getStructuredCommandRegistry().register(commandObject)
}
class ShowArgumentNode(
    private val configService: ConfigService // コンストラクタに登録したインターフェースを宣言する
) : ArgumentExecutorNode("show")
{
    override fun execute(sender: CommandSender, args: Array<out String>): Boolean
    {
        sender.sendMessage(configService.getConfigMap())
        return true
    }
}
⚠️ **GitHub.com Fallback** ⚠️