funo-network/commando

该软件包已被废弃且不再维护。未建议替代软件包。

https://github.com/FunoNetwork/Commando. Forked from CortexPE/Commando

dev-master 2019-12-17 18:00 UTC

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