cortexpe / commando
为 PocketMine-MP 提供的命令框架病毒
Requires
- pocketmine/pocketmine-mp: ^4.0.0
This package is auto-updated.
Last update: 2024-09-25 21:36:24 UTC
README
A PocketMine-MP Virion for easier implementation of dynamic commands, including support for Minecraft: Bedrock Edition argument listing aimed for both the end users and the plugin developers.
用法
安装很简单,你可以在这里获取编译好的phar,将病毒本身集成到你的插件中,或者你也可以通过运行以下命令将其用作composer库
composer require cortexpe/commando
这个病毒纯粹是面向对象的。因此,为了使用它,你必须扩展BaseCommand
对象,导入PacketHooker
对象,以及用于子命令和参数的可选对象(如有必要)。
对于 PocketMine-MP API 4,你需要在你的依赖项中包含Muqsit/SimplePacketHandler。
为什么这是必要的?
病毒提供了一种简单的方法来验证用户输入,转换用户输入,并确保我们的参数是我们期望的类型。
此外,它还为客户端提供了一个参数列表,使其更容易使用命令而无需记住参数的顺序。
因为不仅 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($this, "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