From 9c0455a0e0e65631f6fd197bebdb1312bb629c5a Mon Sep 17 00:00:00 2001 From: IvanCraft623 Date: Fri, 26 Dec 2025 15:56:33 -0500 Subject: [PATCH] Mirror PM Command::getPermission() --- src/CortexPE/Commando/BaseCommand.php | 2 +- src/CortexPE/Commando/BaseSubCommand.php | 31 ++++++++++++++++-------- src/CortexPE/Commando/IRunnable.php | 5 +++- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/CortexPE/Commando/BaseCommand.php b/src/CortexPE/Commando/BaseCommand.php index 6a1c349..1e0a20f 100644 --- a/src/CortexPE/Commando/BaseCommand.php +++ b/src/CortexPE/Commando/BaseCommand.php @@ -122,7 +122,7 @@ final public function execute(CommandSender $sender, string $commandLabel, array ) ); } elseif(empty($msg)) { - $sender->sendMessage(str_replace("", $cmd->getPermission(), $msg)); + $sender->sendMessage(str_replace("", implode(";", $cmd->getPermission()), $msg)); } return; diff --git a/src/CortexPE/Commando/BaseSubCommand.php b/src/CortexPE/Commando/BaseSubCommand.php index 05ae03c..db76d88 100644 --- a/src/CortexPE/Commando/BaseSubCommand.php +++ b/src/CortexPE/Commando/BaseSubCommand.php @@ -34,6 +34,7 @@ use CortexPE\Commando\traits\ArgumentableTrait; use CortexPE\Commando\traits\IArgumentable; use pocketmine\command\CommandSender; +use pocketmine\permission\PermissionManager; use pocketmine\plugin\Plugin; use function explode; @@ -47,8 +48,8 @@ abstract class BaseSubCommand implements IArgumentable, IRunnable { private string $description; /** @var string */ protected string $usageMessage; - /** @var string|null */ - private ?string $permission = null; + /** @var string[] */ + private array $permissions = []; /** @var CommandSender */ protected CommandSender $currentSender; /** @var BaseCommand */ @@ -97,24 +98,34 @@ public function getUsageMessage(): string { } /** - * @return string|null + * @return string[] */ - public function getPermission(): ?string { - return $this->permission; + public function getPermissions(): array { + return $this->permissions; } /** - * @param string $permission + * @param string[] $permissions */ - public function setPermission(string $permission): void { - $this->permission = $permission; + public function setPermissions(array $permissions): void{ + $permissionManager = PermissionManager::getInstance(); + foreach($permissions as $perm){ + if($permissionManager->getPermission($perm) === null){ + throw new \InvalidArgumentException("Cannot use non-existing permission \"$perm\""); + } + } + $this->permissions = $permissions; + } + + public function setPermission(?string $permission): void{ + $this->setPermissions($permission === null ? [] : explode(";", $permission, limit: PHP_INT_MAX)); } public function testPermissionSilent(CommandSender $sender): bool { - if(empty($this->permission)) { + if(count($this->permissions) === 0) { return true; } - foreach(explode(";", $this->permission) as $permission) { + foreach($this->permissions as $permission) { if($sender->hasPermission($permission)) { return true; } diff --git a/src/CortexPE/Commando/IRunnable.php b/src/CortexPE/Commando/IRunnable.php index 36523b0..098a184 100644 --- a/src/CortexPE/Commando/IRunnable.php +++ b/src/CortexPE/Commando/IRunnable.php @@ -50,7 +50,10 @@ public function getAliases(): array; public function getUsageMessage():string; - public function getPermission(); // f*ck. PM didn't declare a return type... reeee + /** + * @return string[] + */ + public function getPermissions(): array; /** * @return BaseConstraint[]