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