private function dispatchAdvanced(CommandSender $sender, Command $command, $label, array $args, $offset = 0)
{
if (isset($args[$offset])) {
$argsTemp = $args;
switch ($args[$offset]) {
case "@a":
$p = $this->server->getOnlinePlayers();
if (count($p) <= 0) {
$sender->sendMessage(TextFormat::RED . "No players online");
//TODO: add language
} else {
foreach ($p as $player) {
$argsTemp[$offset] = $player->getName();
$this->dispatchAdvanced($sender, $command, $label, $argsTemp, $offset + 1);
}
}
break;
case "@r":
$players = $this->server->getOnlinePlayers();
if (count($players) > 0) {
$argsTemp[$offset] = $players[array_rand($players)]->getName();
$this->dispatchAdvanced($sender, $command, $label, $argsTemp, $offset + 1);
}
break;
case "@p":
if ($sender instanceof Player) {
$argsTemp[$offset] = $sender->getName();
$this->dispatchAdvanced($sender, $command, $label, $argsTemp, $offset + 1);
} else {
$sender->sendMessage(TextFormat::RED . "You must be a player!");
//TODO: add language
}
break;
default:
$this->dispatchAdvanced($sender, $command, $label, $argsTemp, $offset + 1);
}
} else {
$command->execute($sender, $label, $args);
}
}