diff --git a/src/command/Command.php b/src/command/Command.php index 341883fdd..fa792fdb1 100644 --- a/src/command/Command.php +++ b/src/command/Command.php @@ -111,27 +111,28 @@ abstract class Command{ $this->permission = $permission; } - public function testPermission(CommandSender $target) : bool{ - if($this->testPermissionSilent($target)){ + public function testPermission(CommandSender $target, ?string $permission = null) : bool{ + if($this->testPermissionSilent($target, $permission)){ return true; } if($this->permissionMessage === null){ $target->sendMessage($target->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); }elseif($this->permissionMessage !== ""){ - $target->sendMessage(str_replace("", $this->permission, $this->permissionMessage)); + $target->sendMessage(str_replace("", $permission ?? $this->permission, $this->permissionMessage)); } return false; } - public function testPermissionSilent(CommandSender $target) : bool{ - if($this->permission === null or $this->permission === ""){ + public function testPermissionSilent(CommandSender $target, ?string $permission = null) : bool{ + $permission ??= $this->permission; + if($permission === null or $permission === ""){ return true; } - foreach(explode(";", $this->permission) as $permission){ - if($target->hasPermission($permission)){ + foreach(explode(";", $permission) as $p){ + if($target->hasPermission($p)){ return true; } } diff --git a/src/command/defaults/ClearCommand.php b/src/command/defaults/ClearCommand.php index 96055d86f..bfa5623f7 100644 --- a/src/command/defaults/ClearCommand.php +++ b/src/command/defaults/ClearCommand.php @@ -64,13 +64,11 @@ class ClearCommand extends VanillaCommand{ $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PLAYER_NOTFOUND)); return true; } - if($target !== $sender && !$sender->hasPermission(DefaultPermissionNames::COMMAND_CLEAR_OTHER)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); + if($target !== $sender && !$this->testPermission($sender, DefaultPermissionNames::COMMAND_CLEAR_OTHER)){ return true; } }elseif($sender instanceof Player){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_CLEAR_SELF)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_CLEAR_SELF)){ return true; } diff --git a/src/command/defaults/KillCommand.php b/src/command/defaults/KillCommand.php index d30ae3917..65b2386e6 100644 --- a/src/command/defaults/KillCommand.php +++ b/src/command/defaults/KillCommand.php @@ -57,9 +57,7 @@ class KillCommand extends VanillaCommand{ } if(count($args) === 1){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_KILL_OTHER)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_KILL_OTHER)){ return true; } @@ -76,9 +74,7 @@ class KillCommand extends VanillaCommand{ } if($sender instanceof Player){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_KILL_SELF)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_KILL_SELF)){ return true; } diff --git a/src/command/defaults/TimeCommand.php b/src/command/defaults/TimeCommand.php index 7d8ad4e30..8a1bf2b9e 100644 --- a/src/command/defaults/TimeCommand.php +++ b/src/command/defaults/TimeCommand.php @@ -30,7 +30,6 @@ use pocketmine\lang\KnownTranslationKeys; use pocketmine\lang\TranslationContainer; use pocketmine\permission\DefaultPermissionNames; use pocketmine\player\Player; -use pocketmine\utils\TextFormat; use pocketmine\world\World; use function count; use function implode; @@ -61,9 +60,7 @@ class TimeCommand extends VanillaCommand{ } if($args[0] === "start"){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_START)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_START)){ return true; } foreach($sender->getServer()->getWorldManager()->getWorlds() as $world){ @@ -72,9 +69,7 @@ class TimeCommand extends VanillaCommand{ Command::broadcastCommandMessage($sender, "Restarted the time"); return true; }elseif($args[0] === "stop"){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_STOP)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_STOP)){ return true; } foreach($sender->getServer()->getWorldManager()->getWorlds() as $world){ @@ -83,9 +78,7 @@ class TimeCommand extends VanillaCommand{ Command::broadcastCommandMessage($sender, "Stopped the time"); return true; }elseif($args[0] === "query"){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_QUERY)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_QUERY)){ return true; } if($sender instanceof Player){ @@ -102,9 +95,7 @@ class TimeCommand extends VanillaCommand{ } if($args[0] === "set"){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_SET)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_SET)){ return true; } @@ -137,9 +128,7 @@ class TimeCommand extends VanillaCommand{ } Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_TIME_SET, [$value])); }elseif($args[0] === "add"){ - if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_ADD)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - + if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_ADD)){ return true; } diff --git a/src/command/defaults/WhitelistCommand.php b/src/command/defaults/WhitelistCommand.php index 0fddb59b3..d6f51185a 100644 --- a/src/command/defaults/WhitelistCommand.php +++ b/src/command/defaults/WhitelistCommand.php @@ -31,7 +31,6 @@ use pocketmine\lang\TranslationContainer; use pocketmine\permission\DefaultPermissionNames; use pocketmine\player\Player; use pocketmine\utils\AssumptionFailedError; -use pocketmine\utils\TextFormat; use function count; use function implode; use function sort; @@ -136,12 +135,6 @@ class WhitelistCommand extends VanillaCommand{ if($permission === null){ throw new AssumptionFailedError("Unknown subcommand $subcommand"); } - if(!$sender->hasPermission($permission)){ - $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); - - return true; - } - - return false; + return !$this->testPermission($sender, $permission); } }