Command: standardise permission checking

if subcommands had different permissions, the permissionMessage would not be used.
This commit is contained in:
Dylan K. Taylor 2021-08-04 20:29:07 +01:00
parent efb677d5d5
commit 71c6f69fd3
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
5 changed files with 18 additions and 41 deletions

View File

@ -111,27 +111,28 @@ abstract class Command{
$this->permission = $permission; $this->permission = $permission;
} }
public function testPermission(CommandSender $target) : bool{ public function testPermission(CommandSender $target, ?string $permission = null) : bool{
if($this->testPermissionSilent($target)){ if($this->testPermissionSilent($target, $permission)){
return true; return true;
} }
if($this->permissionMessage === null){ if($this->permissionMessage === null){
$target->sendMessage($target->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION)); $target->sendMessage($target->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
}elseif($this->permissionMessage !== ""){ }elseif($this->permissionMessage !== ""){
$target->sendMessage(str_replace("<permission>", $this->permission, $this->permissionMessage)); $target->sendMessage(str_replace("<permission>", $permission ?? $this->permission, $this->permissionMessage));
} }
return false; return false;
} }
public function testPermissionSilent(CommandSender $target) : bool{ public function testPermissionSilent(CommandSender $target, ?string $permission = null) : bool{
if($this->permission === null or $this->permission === ""){ $permission ??= $this->permission;
if($permission === null or $permission === ""){
return true; return true;
} }
foreach(explode(";", $this->permission) as $permission){ foreach(explode(";", $permission) as $p){
if($target->hasPermission($permission)){ if($target->hasPermission($p)){
return true; return true;
} }
} }

View File

@ -64,13 +64,11 @@ class ClearCommand extends VanillaCommand{
$sender->sendMessage(new TranslationContainer(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PLAYER_NOTFOUND)); $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PLAYER_NOTFOUND));
return true; return true;
} }
if($target !== $sender && !$sender->hasPermission(DefaultPermissionNames::COMMAND_CLEAR_OTHER)){ if($target !== $sender && !$this->testPermission($sender, DefaultPermissionNames::COMMAND_CLEAR_OTHER)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }
}elseif($sender instanceof Player){ }elseif($sender instanceof Player){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_CLEAR_SELF)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_CLEAR_SELF)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }

View File

@ -57,9 +57,7 @@ class KillCommand extends VanillaCommand{
} }
if(count($args) === 1){ if(count($args) === 1){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_KILL_OTHER)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_KILL_OTHER)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }
@ -76,9 +74,7 @@ class KillCommand extends VanillaCommand{
} }
if($sender instanceof Player){ if($sender instanceof Player){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_KILL_SELF)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_KILL_SELF)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }

View File

@ -30,7 +30,6 @@ use pocketmine\lang\KnownTranslationKeys;
use pocketmine\lang\TranslationContainer; use pocketmine\lang\TranslationContainer;
use pocketmine\permission\DefaultPermissionNames; use pocketmine\permission\DefaultPermissionNames;
use pocketmine\player\Player; use pocketmine\player\Player;
use pocketmine\utils\TextFormat;
use pocketmine\world\World; use pocketmine\world\World;
use function count; use function count;
use function implode; use function implode;
@ -61,9 +60,7 @@ class TimeCommand extends VanillaCommand{
} }
if($args[0] === "start"){ if($args[0] === "start"){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_START)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_START)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }
foreach($sender->getServer()->getWorldManager()->getWorlds() as $world){ foreach($sender->getServer()->getWorldManager()->getWorlds() as $world){
@ -72,9 +69,7 @@ class TimeCommand extends VanillaCommand{
Command::broadcastCommandMessage($sender, "Restarted the time"); Command::broadcastCommandMessage($sender, "Restarted the time");
return true; return true;
}elseif($args[0] === "stop"){ }elseif($args[0] === "stop"){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_STOP)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_STOP)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }
foreach($sender->getServer()->getWorldManager()->getWorlds() as $world){ foreach($sender->getServer()->getWorldManager()->getWorlds() as $world){
@ -83,9 +78,7 @@ class TimeCommand extends VanillaCommand{
Command::broadcastCommandMessage($sender, "Stopped the time"); Command::broadcastCommandMessage($sender, "Stopped the time");
return true; return true;
}elseif($args[0] === "query"){ }elseif($args[0] === "query"){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_QUERY)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_QUERY)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }
if($sender instanceof Player){ if($sender instanceof Player){
@ -102,9 +95,7 @@ class TimeCommand extends VanillaCommand{
} }
if($args[0] === "set"){ if($args[0] === "set"){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_SET)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_SET)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }
@ -137,9 +128,7 @@ class TimeCommand extends VanillaCommand{
} }
Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_TIME_SET, [$value])); Command::broadcastCommandMessage($sender, new TranslationContainer(KnownTranslationKeys::COMMANDS_TIME_SET, [$value]));
}elseif($args[0] === "add"){ }elseif($args[0] === "add"){
if(!$sender->hasPermission(DefaultPermissionNames::COMMAND_TIME_ADD)){ if(!$this->testPermission($sender, DefaultPermissionNames::COMMAND_TIME_ADD)){
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true; return true;
} }

View File

@ -31,7 +31,6 @@ use pocketmine\lang\TranslationContainer;
use pocketmine\permission\DefaultPermissionNames; use pocketmine\permission\DefaultPermissionNames;
use pocketmine\player\Player; use pocketmine\player\Player;
use pocketmine\utils\AssumptionFailedError; use pocketmine\utils\AssumptionFailedError;
use pocketmine\utils\TextFormat;
use function count; use function count;
use function implode; use function implode;
use function sort; use function sort;
@ -136,12 +135,6 @@ class WhitelistCommand extends VanillaCommand{
if($permission === null){ if($permission === null){
throw new AssumptionFailedError("Unknown subcommand $subcommand"); throw new AssumptionFailedError("Unknown subcommand $subcommand");
} }
if(!$sender->hasPermission($permission)){ return !$this->testPermission($sender, $permission);
$sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%" . KnownTranslationKeys::COMMANDS_GENERIC_PERMISSION));
return true;
}
return false;
} }
} }