funo-network / commando
https://github.com/FunoNetwork/Commando. Forked from CortexPE/Commando
This package is auto-updated.
Last update: 2020-08-17 20:26:43 UTC
README
A PocketMine-MP 病毒,用于更容易实现动态命令,包括支持面向最终用户和插件开发者的 Minecraft: Bedrock Edition 参数列表。
用法
安装简单,您可以从这里获得编译的 phar 这里 或将病毒本身集成到您的插件中。
此病毒完全面向对象。因此,要使用它,您必须扩展 BaseCommand
对象,导入 PacketHooker
对象以及子命令和参数的可选对象(如有必要)
为什么有必要呢?
病毒提供了一种简单的方法来验证用户输入,转换用户输入,并确保我们的参数是我们期望的类型。
此外,它还提供了客户端可识别的参数列表,这使得使用命令时无需记住参数的顺序。
由于不仅 MC: Bedrock 可以使用命令,我还实现了命令使用预生成,以便更容易地在控制台中使用。
这还提供了一种易于使用的 API,以减少样板代码,同时添加更多功能并提高可读性(错误代码、错误列表和发送使用消息)。
它的结构类似于旧版 PocketMine 命令,以便于从旧代码库迁移。
在编写此说明文件时,此病毒将用于 Hierarchy 的命令实现清理。
基本用法
注意:其他杂项函数可以在您的 IDE 中索引或通过阅读源代码。这仅是病毒的基本用法,它并不显示其所有方面,因为这会太长,难以记录。
创建您的命令类
在我们的命令类中,我们需要扩展 BaseCommand
并实现其必需的方法,以使用 Commando 的所有功能
<?php use CortexPE\Commando\BaseCommand; use pocketmine\command\CommandSender; class MyCommand extends BaseCommand { protected function prepare(): void { // This is where we'll register our arguments and subcommands } public function onRun(CommandSender $sender, string $aliasUsed, array $args): void { // This is where the processing will occur if it's NOT handled by other subcommands } }
注册参数
如果我们注册参数,我们需要导入并使用(如有必要)提供的参数对象
use CortexPE\Commando\args\RawStringArgument; protected function prepare(): void { // $this->registerArgument(position, argument object (name, isOptional)); $this->registerArgument(0, new RawStringArgument("name", true)); }
处理我们的参数
传递给我们的 onRun
方法的参数将通过 name => value
进行映射,这使得理解哪个参数是哪个变得容易,而不是使用数字索引。同时,保证传递的参数将是已声明的类型。
public function onRun(CommandSender $sender, string $aliasUsed, array $args): void { if(isset($args["name"])){ $sender->sendMessage("Hello, " . $args["name"] . "!"); } else { $this->sendUsage(); } }
注册 PacketHooker
以用于纯命令参数
PacketHooker
监听器是必需的,以便我们能够向服务器发送的 AvailableCommandsPacket
注入数据。
use CortexPE\Commando\PacketHooker; // onEnable: if(!PacketHooker::isRegistered()) { PacketHooker::register($this); }
从插件中注册命令
一旦我们构建好命令及其参数和子命令,现在我们可以将我们的命令注册到PocketMine的命令映射中,以便用户可以使用。
// onEnable: $this->getServer()->getCommandMap()->register("myplugin", new MyCommand("greet", "Make the server greet you!"));
使用此框架的唯一区别是,您不需要设置使用说明,因为所有参数注册完成后都会预先生成。
子命令
子命令与常规命令的工作方式相同,唯一的区别是它们通过使用BaseCommand->registerSubCommand()
在父命令上注册,并拥有自己的参数集和使用说明。
错误消息
该病毒体为用户提供默认的错误消息,用于处理用户输入的参数错误。它还提供了一种注册自定义错误消息格式的方法,以实现可定制性。
$cmdCtx->setErrorFormat($errorCode, $format); // Arrays can be passed on `BaseCommand->setErrorFormats()` to bulk-set other error messages
错误消息会批量发送给用户,告知他们输入错误的部分,无需进行试错。当前的限制是,您不能使用其他错误代码注册自己的错误消息。
这个框架是由CortexPE用❤️制作的,祝您享受!~ :3