Skip to content

Examples

Remminiscent edited this page Jun 26, 2026 · 1 revision

Examples

Sudo

Creates:

/sudo <player> <message/command>

If the message starts with /, PocketMine treats it as a command because this uses Player::chat().

use pocketmine\player\Player;
use remmi\PMCommandTree\argument\PlayerArgumentType;
use remmi\PMCommandTree\argument\TextArgumentType;
use remmi\PMCommandTree\command\tree\CommandContext;
use remmi\PMCommandTree\command\tree\CommandResult;
use remmi\PMCommandTree\command\tree\CommandRouteTree;
use remmi\PMCommandTree\command\tree\RouteCommand;
use remmi\PMCommandTree\command\tree\node\CommandRouteNode;

final class SudoCommand extends RouteCommand
{
    public function __construct()
    {
        parent::__construct("sudo", self::createTree(), "Force a player to chat or run a command");
    }

    private static function createTree(): CommandRouteTree
    {
        $tree = new CommandRouteTree("sudo");
        $root = $tree->getRoot();

        $root->permission("example.sudo");

        $root->then(
            CommandRouteNode::argument("player", PlayerArgumentType::player())->then(
                CommandRouteNode::argument("message", TextArgumentType::text())->exec(
                    static function (CommandContext $context): CommandResult {
                        $target = $context->getArg("player");
                        if (!$target instanceof Player) return $context->fail("Player not found.");

                        $target->chat($context->getArg("message"));
                        return $context->success();
                    }
                )
            )
        );

        return $tree;
    }
}

Register:

$this->getServer()->getCommandMap()->register("sudo", new SudoCommand());

Permission:

permissions:
  example.sudo:
    default: op

Clone this wiki locally