46 private string $nextLabel;
47 private string $label;
53 private array $aliases = [];
59 private array $activeAliases = [];
68 private array $permission = [];
69 private Translatable|
string|
null $permissionMessage =
null;
77 $this->setLabel($name);
78 $this->setDescription($description);
79 $this->usageMessage = $usageMessage ?? (
"/" . $name);
92 public function getName() : string{
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));
120 public function testPermission(CommandSender $target, ?
string $permission =
null) : bool{
121 if($this->testPermissionSilent($target, $permission)){
125 $message = $this->permissionMessage ?? KnownTranslationFactory::pocketmine_command_error_permission($this->name);
126 if($message instanceof Translatable){
127 $target->sendMessage($message->prefix(TextFormat::RED));
128 }elseif($message !==
""){
129 $target->sendMessage(str_replace(
"<permission>", $permission ?? implode(
";", $this->permission), $message));
135 public function testPermissionSilent(CommandSender $target, ?
string $permission =
null) : bool{
136 $list = $permission !== null ? [$permission] : $this->permission;
137 foreach($list as $p){
138 if($target->hasPermission($p)){
146 public function getLabel() : string{
150 public function setLabel(
string $name) : bool{
151 $this->nextLabel = $name;
152 if(!$this->isRegistered()){
153 $this->label = $name;
165 if($this->allowChangesFrom($commandMap)){
166 $this->commandMap = $commandMap;
174 public function unregister(CommandMap $commandMap) : bool{
175 if($this->allowChangesFrom($commandMap)){
176 $this->commandMap =
null;
177 $this->activeAliases = $this->aliases;
178 $this->label = $this->nextLabel;
186 private function allowChangesFrom(CommandMap $commandMap) : bool{
187 return $this->commandMap === null || $this->commandMap === $commandMap;
190 public function isRegistered() : bool{
191 return $this->commandMap !== null;
199 return $this->activeAliases;
202 public function getPermissionMessage() :
Translatable|string|null{
203 return $this->permissionMessage;
207 return $this->description;
210 public function getUsage() : Translatable|string{
211 return $this->usageMessage;
219 $aliases = array_values($aliases);
220 $this->aliases = $aliases;
221 if(!$this->isRegistered()){
222 $this->activeAliases = $aliases;
226 public function setDescription(
Translatable|
string $description) : void{
227 $this->description = $description;
230 public function setPermissionMessage(Translatable|
string $permissionMessage) : void{
231 $this->permissionMessage = $permissionMessage;
234 public function setUsage(Translatable|
string $usage) : void{
235 $this->usageMessage = $usage;
238 public static function broadcastCommandMessage(CommandSender $source, Translatable|
string $message,
bool $sendToSource =
true) : void{
239 $users = $source->getServer()->getBroadcastChannelSubscribers(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
240 $result = KnownTranslationFactory::chat_type_admin($source->getName(), $message);
241 $colored = $result->prefix(TextFormat::GRAY . TextFormat::ITALIC);
244 $source->sendMessage($message);
247 foreach($users as $user){
248 if($user instanceof BroadcastLoggerForwarder){
249 $user->sendMessage($result);
250 }elseif($user !== $source){
251 $user->sendMessage($colored);
256 public function __toString() : string{