public testPermissionSilent ( pocketmine\command\CommandSender $target ) : boolean | ||
$target | pocketmine\command\CommandSender | |
return | boolean |
public function testPermissionSilent(CommandSender $sender) { if ($sender instanceof Position) { if ($this->getName() === "f" and !$this->main->isFactionWorld($sender->getLevel()->getName())) { return false; } } return parent::testPermissionSilent($sender); }
public function onCommand(CommandSender $sender, Command $cmd, $alias, array $args) { if (!isset($args[0])) { return false; } $k = $sender instanceof Player ? $sender->getID() : get_class($sender); switch ($subcmd = array_shift($args)) { case "stop": if (!isset($this->stack[$k])) { $sender->sendMessage("You don't have a recording macro to stop!"); break; } if (!isset($args[0])) { $sender->sendMessage("Usage: /macro stop <name>"); $sender->sendMessage("Don't worry, this command will not be recorded."); break; } if (strtolower($name = array_shift($args)) === "ng") { $sender->sendMessage("This NG macro has been discarded."); // continue to run: unset stack } else { if ($this->getMacro($name) !== false) { $sender->sendMessage("There is already a macro called \"{$name}\"!"); $sender->sendMessage("Don't worry, this command will not be recorded."); break; } $success = $this->saveMacro($name, $this->stack[$k]); if (!$success) { $sender->sendMessage("Unable to create file. Perhaps \"{$name}\" is not a valid filename?"); $sender->sendMessage("Don't worry, this command will not be recorded."); break; } // continue to run: unset stack } if (isset($this->stack[$id = $k])) { // copied xD unset($this->stack[$id]); // avoid bugs if the entity ID gets reused } if (isset($this->paused[$id])) { unset($this->stack[$id]); } $sender->sendMessage("You have successfully saved macro {$name}."); break; case "start": if (!$sender->hasPermission("simplemacros.record")) { $sender->sendMessage("You don't have permission to record a macro."); return true; } if (isset($this->stack[$k])) { $sender->sendMessage("You have already started recording a macro!"); return true; } $this->stack[$k] = ""; $sender->sendMessage("You are now recording a macro."); break; case "pause": if (!isset($this->stack[$k])) { $sender->sendMessage("You are not recording a macro!"); return true; } $this->paused[$k] = true; $sender->sendMessage("Your macro is now paused."); $sender->sendMessage("Don't worry, this command will not be recorded."); break; case "resume": if (!isset($this->paused[$k]) or $this->paused[$k] === false) { $sender->sendMessage("You do not have a paused recording macro!"); $sender->sendMessage("Don't worry, this command will not be recorded."); return true; } $this->paused[$k] = false; $sender->sendMessage("You have now resumed your macro."); break; case "sudo": if (!$sender->hasPermission("simplemacros.sudo")) { $sender->sendMessage("You don't have permision to sudo others with a macro."); return true; } if (!isset($args[1])) { $sender->sendMessage("Usage: /macro sudo <macro name> <player name> [-op]"); return true; } $macro = $this->getMacro($name = array_shift($args)); if ($macro === false) { $sender->sendMessage("{$macro} doesn't exist!"); return true; } if (!($p = $this->getServer()->getPlayer($args[1])) instanceof Player) { $sender->sendMessage("Player {$args['1']} not found!"); return true; } if (isset($args[2]) and $args[2] === "-op" and !$sender->hasPermission("simplemacros.opsudo")) { $sender->sendMessage("You do not have permission to op-sudo a player with a macro!"); } foreach ($macro as $rline) { $line = trim($rline); if (isset($args[2]) and $args[2] === "-op") { if (($rcmd = $this->getServer()->getCommandMap()->getCommand(strstr($line, " ", true))) instanceof Command) { if (!$cmd->testPermissionSilent($p) and $cmd->testPermissionSilent($sender)) { $perms = [$rcmd->getPermission()]; if (strpos($perms[0], ";") !== false) { $perms = explode(";", $perms[0]); } foreach ($perms as $perm) { $this->atts[$k]->setPermission($perm, true); } } } } $this->getServer()->dispatchCommand($p, $line); if (isset($perms)) { foreach ($perms as $perm) { $this->atts[$k]->unsetPermission($perm); } } } $sender->sendMessage("Command run as " . $p->getName() . "."); break; case "run": if (!$sender->hasPermission("simplemacros.run")) { $sender->sendMessage("You don't have permission to run a macro."); return true; } if (!isset($args[0])) { $sender->sendMessage("Usage: /macro run <name>"); return true; } foreach ($this->getMacro($args[0]) as $line) { $this->getServer()->dispatchCommand($sender, $line); } break; default: return false; } return true; }