diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 7343854b0..18cd70b4e 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -39,6 +39,7 @@ use pocketmine\event\HandlerList; use pocketmine\event\level\LevelInitEvent; use pocketmine\event\level\LevelLoadEvent; use pocketmine\event\player\PlayerDataSaveEvent; +use pocketmine\event\server\CommandEvent; use pocketmine\event\server\DataPacketBroadcastEvent; use pocketmine\event\server\QueryRegenerateEvent; use pocketmine\event\server\ServerCommandEvent; @@ -1991,10 +1992,20 @@ class Server{ * * @param CommandSender $sender * @param string $commandLine + * @param bool $internal * * @return bool */ - public function dispatchCommand(CommandSender $sender, string $commandLine) : bool{ + public function dispatchCommand(CommandSender $sender, string $commandLine, bool $internal = false) : bool{ + if(!$internal){ + $this->pluginManager->callEvent($ev = new CommandEvent($sender, $commandLine)); + if($ev->isCancelled()){ + return false; + } + + $commandLine = $ev->getCommand(); + } + if($this->commandMap->dispatch($sender, $commandLine)){ return true; } diff --git a/src/pocketmine/command/FormattedCommandAlias.php b/src/pocketmine/command/FormattedCommandAlias.php index cb4821fcc..f2664fdbd 100644 --- a/src/pocketmine/command/FormattedCommandAlias.php +++ b/src/pocketmine/command/FormattedCommandAlias.php @@ -59,7 +59,7 @@ class FormattedCommandAlias extends Command{ } foreach($commands as $command){ - $result |= Server::getInstance()->dispatchCommand($sender, $command); + $result |= Server::getInstance()->dispatchCommand($sender, $command, true); } return (bool) $result; diff --git a/src/pocketmine/event/server/CommandEvent.php b/src/pocketmine/event/server/CommandEvent.php new file mode 100644 index 000000000..d5dd422a3 --- /dev/null +++ b/src/pocketmine/event/server/CommandEvent.php @@ -0,0 +1,73 @@ +sender = $sender; + $this->command = $command; + } + + /** + * @return CommandSender + */ + public function getSender() : CommandSender{ + return $this->sender; + } + + /** + * @return string + */ + public function getCommand() : string{ + return $this->command; + } + + /** + * @param string $command + */ + public function setCommand(string $command) : void{ + $this->command = $command; + } +} diff --git a/src/pocketmine/event/server/RemoteServerCommandEvent.php b/src/pocketmine/event/server/RemoteServerCommandEvent.php index a90ba5b95..9b1039104 100644 --- a/src/pocketmine/event/server/RemoteServerCommandEvent.php +++ b/src/pocketmine/event/server/RemoteServerCommandEvent.php @@ -27,6 +27,8 @@ use pocketmine\command\CommandSender; /** * This event is called when a command is received over RCON. + * + * @deprecated Use CommandEvent instead. */ class RemoteServerCommandEvent extends ServerCommandEvent{ diff --git a/src/pocketmine/event/server/ServerCommandEvent.php b/src/pocketmine/event/server/ServerCommandEvent.php index e093b9be9..803ce1f62 100644 --- a/src/pocketmine/event/server/ServerCommandEvent.php +++ b/src/pocketmine/event/server/ServerCommandEvent.php @@ -33,6 +33,8 @@ use pocketmine\event\Cancellable; * blocking commands on certain places, or applying modifiers. * * The message DOES NOT contain a slash at the start + * + * @deprecated Use CommandEvent instead. */ class ServerCommandEvent extends ServerEvent implements Cancellable{ /** @var string */