44 private readonly
string $namespace;
45 private readonly
string $name;
48 private array $permission = [];
49 private Translatable|
string|
null $permissionMessage =
null;
51 public function __construct(
57 if($namespace ===
""){
58 throw new \InvalidArgumentException(
"Command namespace cannot be empty (set it to, for example, your plugin's name)");
61 throw new \InvalidArgumentException(
"Command name cannot be empty");
63 $this->
namespace = strtolower(trim($namespace));
65 $this->name = trim($name);
77 final public function getNamespace() : string{
78 return $this->namespace;
92 final public function getId() : string{
93 return
"$this->namespace:$this->name";
100 return $this->permission;
108 foreach($permissions as $perm){
109 if($permissionManager->getPermission($perm) ===
null){
110 throw new \InvalidArgumentException(
"Cannot use non-existing permission \"$perm\"");
113 $this->permission = $permissions;
116 public function setPermission(?
string $permission) : void{
117 $this->setPermissions($permission === null ? [] : explode(
";", $permission, limit: PHP_INT_MAX));
126 if($this->testPermissionSilent($target, $permission)){
130 $message = $this->permissionMessage ?? KnownTranslationFactory::pocketmine_command_error_permission($context);
132 $target->sendMessage($message->prefix(TextFormat::RED));
133 }elseif($message !==
""){
134 $target->sendMessage(str_replace(
"<permission>", $permission ?? implode(
";", $this->permission), $message));
140 public function testPermissionSilent(CommandSender $target, ?
string $permission =
null) : bool{
141 $list = $permission !== null ? [$permission] : $this->permission;
142 foreach($list as $p){
143 if($target->hasPermission($p)){
151 public function getPermissionMessage() : Translatable|string|null{
152 return $this->permissionMessage;
155 public function getDescription() : Translatable|string{
156 return $this->description;
159 public function getUsage() : Translatable|string|null{
160 return $this->usageMessage;
163 public function setDescription(Translatable|
string $description) : void{
164 $this->description = $description;
167 public function setPermissionMessage(Translatable|
string $permissionMessage) : void{
168 $this->permissionMessage = $permissionMessage;
171 public function setUsage(Translatable|
string|
null $usage) : void{
172 $this->usageMessage = $usage;
175 public static function broadcastCommandMessage(CommandSender $source, Translatable|
string $message,
bool $sendToSource =
true) : void{
176 $users = $source->getServer()->getBroadcastChannelSubscribers(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
177 $result = KnownTranslationFactory::chat_type_admin($source->getName(), $message);
178 $colored = $result->prefix(TextFormat::GRAY . TextFormat::ITALIC);
181 $source->sendMessage($message);
184 foreach($users as $user){
185 if($user instanceof BroadcastLoggerForwarder){
186 $user->sendMessage($result);
187 }elseif($user !== $source){
188 $user->sendMessage($colored);