public function execute(Player $player)
{
$command = $this->compiledCommand;
$type = $this->executionMode;
$command = str_replace("%p", $player->getName(), $command);
$command = str_replace("%x", $player->getX(), $command);
$command = str_replace("%y", $player->getY(), $command);
$command = str_replace("%z", $player->getZ(), $command);
$command = str_replace("%l", $player->getLevel()->getName(), $command);
$command = str_replace("%ip", $player->getAddress(), $command);
$command = str_replace("%n", $player->getDisplayName(), $command);
if ($type === Command::AS_OP_TYPE && $player->isOp()) {
$type = Command::AS_PLAYER_TYPE;
}
switch ($type) {
case Command::AS_CONSOLE_TYPE:
$this->plugin->getServer()->dispatchCommand(new ConsoleCommandSender(), $command);
break;
case Command::AS_OP_TYPE:
$player->setOp(true);
$this->plugin->getServer()->dispatchCommand($player, $command);
$player->setOp(false);
break;
case Command::AS_PLAYER_TYPE:
$this->plugin->getServer()->dispatchCommand($player, $command);
break;
}
}