AvailableCommandsPacket

Раньше моя команда работала на файле по этому пути, когда перешел на новую версию Незер гейма у меня не работает файл. Куда переместили файл по этому пути pocketmine\network\mcpe\protocol\AvailableCommandsPacket

namespace 123\rank;

use pocketmine\scheduler\Task;

use pocketmine\Server;

use 123\command\CommandArgs;

use 123\command\PracticeCommand;

use 123\player\session\Session;

use 123\player\session\SessionManager;

use 123\rank\types\Rank;

use 123\rank\types\RankPriorities;

use 123\rcon\Rcon;

use 123\rcon\RconCommandSender;

use 123\translation\Translator;

use 123\utils\PracticeUtils;

use pocketmine\command\CommandSender;

use pocketmine\network\mcpe\protocol\AvailableCommandsPacket;

use pocketmine\player\Player;

use pocketmine\utils\TextFormat;

use function count;

final class RankCommand extends PracticeCommand {

private const SET_ARGUMENT  = 'set';

private const GET_ARGUMENT  = 'get';

private const LIST_ARGUMENT = 'list';

private const RANK_ARGUMENT = 'rank';



public function \__construct(private readonly RankManager $rankManager) {

    parent::\__construct('rank', "Change player's rank.", 'Usage: /rank set <player> <rank> OR /rank get <player> OR /rank list', haveArguments: true);



    $this->commandArgs = new CommandArgs();



    $setKey = $this->commandArgs->addParameter(0, self::SET_ARGUMENT, AvailableCommandsPacket::ARG_FLAG_ENUM | AvailableCommandsPacket::ARG_TYPE_STRING);

    $this->commandArgs->setEnum(0, $setKey, self::SET_ARGUMENT, \[self::SET_ARGUMENT\]);

    $this->commandArgs->addParameter(0, self::PLAYER_ARGUMENT, AvailableCommandsPacket::ARG_TYPE_TARGET);

    $rankKey = $this->commandArgs->addParameter(0, self::RANK_ARGUMENT, AvailableCommandsPacket::ARG_FLAG_ENUM | AvailableCommandsPacket::ARG_TYPE_STRING);

    $this->commandArgs->setEnum(0, $rankKey, self::RANK_ARGUMENT, array_map(fn (Rank $rank): string => $rank->getName(), array_values(Rank::getAll())));



    $getKey = $this->commandArgs->addParameter(1, self::GET_ARGUMENT, AvailableCommandsPacket::ARG_FLAG_ENUM | AvailableCommandsPacket::ARG_TYPE_STRING);

    $this->commandArgs->setEnum(1, $getKey, self::GET_ARGUMENT, \[self::GET_ARGUMENT\]);

    $this->commandArgs->addParameter(1, self::PLAYER_ARGUMENT, AvailableCommandsPacket::ARG_TYPE_TARGET, true);



    $listKey = $this->commandArgs->addParameter(2, self::LIST_ARGUMENT, AvailableCommandsPacket::ARG_FLAG_ENUM | AvailableCommandsPacket::ARG_TYPE_STRING);

    $this->commandArgs->setEnum(2, $listKey, self::LIST_ARGUMENT, \[self::LIST_ARGUMENT\]);

}

в CommandArgs скорее всего используется CommandEnum, его заменили на CommandHardEnum

Вот мой CommandArgs вроде правельно все

<?php


declare(strict_types=1);

namespace 123\command;

use pocketmine\network\mcpe\protocol\AvailableCommandsPacket;
use pocketmine\network\mcpe\protocol\types\command\CommandHardEnum;
use pocketmine\network\mcpe\protocol\types\command\CommandOverload;
use pocketmine\network\mcpe\protocol\types\command\CommandParameter;
use function count;

class CommandArgs {
	final public const FLAG_NORMAL = 0;

	/** @var CommandParameter[][] */
	private array $parameters = [];

	/** @var CommandOverload[] */
	private array $overloads = [];

	public function addParameter(int $columnId, string $name, int $type = AvailableCommandsPacket::ARG_TYPE_RAWTEXT, bool $isOptional = false, ?string $enumName = null, array $enumValues = [], bool $customType = false, ?string $postfix = null): int {
		$parameter             = new CommandParameter();
		$parameter->paramName  = $name;
		$parameter->paramType  = $customType ? $type : AvailableCommandsPacket::ARG_FLAG_VALID | $type;
		$parameter->isOptional = $isOptional;
		$parameter->postfix    = $postfix;

		$this->parameters[$columnId][] = $parameter;
		$columnKey                     = count($this->parameters[$columnId]) - 1;

		if (null !== $enumName) {
			$this->setEnum($columnId, $columnKey, $enumName, $enumValues);
		}

		$this->overloads = [];
		foreach ($this->parameters as $parameters) {
			$this->overloads[] = new CommandOverload(false, $parameters);
		}

		return $columnKey;
	}

	public function setEnum(int $columnId, int $columnKey, ?string $name, array $values = []): bool {
		$parameter = $this->parameters[$columnId][$columnKey] ?? null;
		if (!$parameter instanceof CommandParameter) {
			return false;
		}

		if (null !== $name) {
			$enum = new CommandHardEnum($name, $values);
		}

		$parameter->enum = null === $name ? null : $enum;

		return true;
	}

	public function getOverloads(): array {
		return $this->overloads;
	}

	public static function noArguments(): self {
		($self = new self())->addParameter(0, '', AvailableCommandsPacket::ARG_FLAG_VALID | AvailableCommandsPacket::ARG_FLAG_ENUM, false, '', ['']);

		return $self;
	}
}

прости не знал

ну так что