cortexpe/commando

为 PocketMine-MP 提供的命令框架病毒

dev-master 2024-05-09 08:29 UTC

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