valiant-bedrock/ libcommand
用于注册具有适当重载的命令的PocketMine-MP库
Requires
- php: >=8.0
Requires (Dev)
- phpstan/phpstan: 1.6.x-dev
- pocketmine/pocketmine-mp: dev-stable
This package is auto-updated.
Last update: 2024-09-16 06:13:20 UTC
README
这是一个小型PocketMine-MP命令库,旨在简化命令创建过程,同时增强用户体验。
注意:此库仍在开发中,因此API可能有所更改。
安装
Composer
以下命令可用于使用Composer安装库:
composer require valiant-bedrock/libcommand
Virion (Poggit)
可以通过Poggit使用此链接访问Virion支持。
用法
参数
库的基础是参数。在大多数情况下,参数类接受两个属性
name
- 参数的名称。这在命令的onExecute()
方法中以及发送到客户端时使用。optional
- 参数是否可选。如果参数是可选的,则它将不会在重载中要求。在发送到客户端时,如果非可选,将显示为<name>
,否则将显示为[name]
。
一个简单的纯文本参数看起来是这样的
$parameter = new \libcommand\parameter\types\RawTextParameter(name: "text", optional: true);
参数类型
这是一个所有当前参数类型的列表
标准
自定义
重载
在命令的术语中,重载是命令可以接受的参数集。重载由Parameter
对象的数组定义。下面是一个简单的重载类的示例
$overload = new libcommand\Overload( // An internal name used to track the overload name: "test", // A list of parameters parameters: [] );
命令
最后,为了将这些特性结合起来,它使用Command
类。此类旨在扩展以创建新命令。该类扩展了\pocketmine\command\Command
并接受一个额外的参数$overloads
,它是一个Overload
对象的数组,尽管您可以使用addOverload(Overload $overload): void
和addOverloads(Overload ...$overloads)
方法分别从构造函数中添加它们。
onExecute(CommandSender $sender, string $overload, array $arguments): bool|string
此方法是命令的核心,运行命令的实际逻辑。命令将查找兼容的重载,然后将其传递给$arguments
。通过$arguments
,您可以通过其名称访问参数值(例如,new StringParameter("name")
将通过$arguments["name"]
访问)。如果此方法的返回类型为string
,则返回值将发送给命令发送者。
命令发送者访问
为了限制对命令的访问,您可以使用ConsoleCommand
类或PlayerCommand
类。这将验证命令发送者然后执行命令。这些类各自都有其特殊方法,在发送者验证后调用
PlayerCommand
:onPlayerExecute(Player $player, string $overload, array $arguments): bool|string
ConsoleCommand
:onConsoleExecute(ConsoleCommandSender $sender, string $overload, array $arguments): bool|string
注意:这些方法将替换onExecute()
方法。
简单示例
以下是如何创建和注册命令的简单示例。
命令类
class SimpleCommand extends libcommand\Command { public function __construct() { parent::__construct( name: "simple", description: "Simple command description", usageMessage: "Usage: /simple <test_int> <test_raw>", aliases: ["s"], overloads: [ new libcommand\Overload(name: "default", parameters: [ new \libcommand\IntParameter(name: "test_int", description: "Test integer parameter", optional: false), new \libcommand\RawTextParameter(name: "test_raw", description: "Test raw text parameter", optional: true) ]) ], // Permissions and their messages can also be specified using the `permission` and `permissionMessage` properties. // permission: "simple.command", // permissionMessage: "Ouch! You don't have permission to use SimpleCommand!" ); } public function onExecute(\pocketmine\command\CommandSender $sender, string $overload, array $arguments) : bool|string { $int = $arguments["test_int"]; $raw = $arguments["test_raw"] ?? "fallback raw text"; // Returning a string will send the sender the returned message return "Simple command executed with $int and $raw"; } }
注册
class SimplePlugin extends \pocketmine\plugin\PluginBase { protected function onEnable(): void { // Registering `LibCommandBase` allows for client-sided rendering to be done libcommand\LibCommandBase::register(plugin: $this); $this->getServer()->getCommandMap()->register( fallbackPrefix: $this->getName(), command: new SimpleCommand() ); } }
ClosureCommand
如果您想创建一个不需要单独类的命令,可以使用ClosureCommand
类。
这避免了使用单独类的需要,并允许您使用闭包来定义命令逻辑。
一个闭包命令的简单例子可能看起来像这样
\pocketmine\Server::getInstance()->getCommandMap()->register( fallbackPrefix: "examples", command: new \libcommand\ClosureCommand( name: "add", onExecute: function (\pocketmine\command\CommandSender $sender, string $overload, array $arguments) : bool|string { // Null-coalescing operator is used to keep PHPStan happy, but won't actually occur $first = $arguments["first"] ?? throw new AssumptionFailedError("First argument is required"); $second = $arguments["second"] ?? throw new AssumptionFailedError("Second argument is required"); return "Result of $first + $second: " . ($first + $second); }, description: "Add two numbers together", usageMessage: "/add <first> <second>", overloads: [ new \libcommand\Overload( name: "default", parameters: [ new \libcommand\parameter\types\IntParameter(name: "first"), new \libcommand\parameter\types\IntParameter(name: "second") ] ) ] ) ); // `/add 1 2` will send a message with the following message: "Result of 1 + 2: 3"
原味命令渲染
虽然默认不支持,但可以使用 libcommand\VanillaCommandPatcher::register(PluginBase $plugin)
来修补默认的原味命令并在客户端渲染。
注意:这可能在将来被分成一个单独的插件,但到目前为止,它包含在库中。
类型
这些类型与各种参数相关联。
装备槽
slot.armor
slot.armor.head
slot.armor.chest
slot.armor.legs
slot.armor.feet
slot.chest
slot.enderchest
slot.equippable
slot.hotbar
slot.inventory
slot.saddle
slot.weapon.mainhand
slot.weapon.offhand
路线图
- 根据重载生成使用信息
- 引入子命令系统