PocketMine-MP uses a hierarchical permission system where permissions are represented as nodes (e.g., myplugin.command.teleport). Permissions can be granted to players, groups, or operators.
use pocketmine\permission\PermissionManager;$permManager = PermissionManager::getInstance();// Get a permission$permission = $permManager->getPermission("myplugin.admin");// Check if existsif ($permManager->getPermission("some.permission") !== null) { // Permission is registered}// Get all permissions$allPermissions = $permManager->getPermissions();
PermissionParser::DEFAULT_TRUE // Everyone has permissionPermissionParser::DEFAULT_FALSE // No one has permission by defaultPermissionParser::DEFAULT_OP // Only operators have permissionPermissionParser::DEFAULT_NOT_OP // Only non-operators have permission
permissions: myplugin.user: default: true # Everyone myplugin.moderator: default: op # Only operators myplugin.premium: default: false # Explicitly granted only myplugin.nonop: default: not op # Non-operators only
use pocketmine\command\Command;use pocketmine\command\CommandSender;class MyCommand extends Command { public function execute(CommandSender $sender, string $label, array $args): void { if (!$sender->hasPermission("myplugin.command.mycommand")) { $sender->sendMessage("You don't have permission to use this command!"); return; } // Execute command }}
use pocketmine\console\ConsoleCommandSender;if ($sender instanceof ConsoleCommandSender) { // Console has all permissions $sender->sendMessage("Console has unlimited access");}// Or check explicitlyif ($sender->hasPermission("pocketmine.command.ban")) { // Both players with permission AND console pass this check}
The console (ConsoleCommandSender) always has all permissions, regardless of configuration.
$server = Server::getInstance();// Make player operator$player->setOp(true);// Remove operator$player->setOp(false);// Check if operatorif ($player->isOp()) { $player->sendMessage("You are an operator!");}// Get all operators (from ops.txt)$ops = $server->getOps();
Operators automatically receive all permissions with default: op:
use pocketmine\permission\DefaultPermissions;// Root operator permission (all operators have this)$opRoot = PermissionManager::getInstance()->getPermission( DefaultPermissions::ROOT_OPERATOR);// Add child to operator root$opRoot->addChild("myplugin.admin", true);// Now all operators have myplugin.admin
use pocketmine\permission\DefaultPermissions;// Root for all operatorsDefaultPermissions::ROOT_OPERATOR = "pocketmine.group.operator";// Root for all usersDefaultPermissions::ROOT_USER = "pocketmine.group.user";
function getMaxHomes(Player $player): int { if ($player->hasPermission("myplugin.homes.unlimited")) { return PHP_INT_MAX; } if ($player->hasPermission("myplugin.homes.3")) { return 3; } if ($player->hasPermission("myplugin.homes.1")) { return 1; } return 0;}
public function onQuit(PlayerQuitEvent $event): void { $player = $event->getPlayer(); if (isset($this->attachments[$player->getName()])) { $player->removeAttachment($this->attachments[$player->getName()]); }}