public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if ($cmd->getName() != "reg") { return false; } if (count($args) == 0) { $args = ["count"]; } $scmd = strtolower(array_shift($args)); switch ($scmd) { case "count": if (count($args) != 0) { return false; } $cnt = count(glob($this->owner->getServer()->getDataPath() . "players/*.dat")); $sender->sendMessage(mc::n(mc::_("One player registered"), mc::_("%1% players registered", $cnt), $cnt)); return true; case "ls": case "list": $pageNumber = $this->getPageNumber($args); if (count($args) == 0) { $pattern = "*"; } elseif (count($args) == 1) { $pattern = implode(" ", $args); } else { return false; } $f = glob($this->owner->getServer()->getDataPath() . "players/" . $pattern . ".dat"); $txt = [mc::n(mc::_("One player found"), mc::_("%1% players found", count($f)), count($f))]; $cols = 8; $i = 0; foreach ($f as $n) { $n = basename($n, ".dat"); if ($i++ % $cols == 0) { $txt[] = $n; } else { $txt[count($txt) - 1] .= ", " . $n; } } return $this->paginateText($sender, $pageNumber, $txt); case "rm": if (count($args) != 1) { return false; } $victim = strtolower(array_shift($args)); $target = $this->owner->getServer()->getPlayer($victim); if ($target !== null) { $sender->sendMessage(TextFormat::RED . mc::_("Can not delete player re-gistration while they are on-line")); return true; } $target = $this->owner->getServer()->getOfflinePlayer($victim); if ($target == null || !$target->hasPlayedBefore()) { $sender->sendMessage(mc::_("%1% can not be found.", $victim)); return true; } $f = $this->owner->getServer()->getDataPath() . "players/" . $victim . ".dat"; if (!is_file($f)) { $sender->sendMessage(TextFormat::RED . mc::_("Problem deleting %1%", $victim)); return true; } unlink($f); $sender->sendMessage(TextFormat::RED . mc::_("%1% was deleted.", $victim)); return true; case "since": $pageNumber = $this->getPageNumber($args); if (count($args) == 0) { return false; } if (($when = strtotime(implode(" ", $args))) === false) { return false; } $f = glob($this->owner->getServer()->getDataPath() . "players/*.dat"); $tab = [[mc::_("Date/Time"), "x"]]; foreach ($f as $n) { $n = basename($n, ".dat"); $target = $this->owner->getServer()->getOfflinePlayer($n); if ($target == null || !$target->hasPlayedBefore()) { continue; } if (($regdate = $target->getFirstPlayed() / 1000) > $when) { $tab[] = [date(mc::_("d-M-Y H:i"), $regdate), $n]; } } $cnt = count($tab) - 1; if ($cnt == 0) { $sender->sendMessage(mc::_("No players found")); return true; } $tab[0][1] = mc::n(mc::_("One player found"), mc::_("%1% players found", $cnt), $cnt); return $this->paginateTable($sender, $pageNumber, $tab); } return false; }
private function cmdPlayers(CommandSender $c, $pageNumber) { $all = []; foreach ($this->owner->getServer()->getOnlinePlayers() as $p) { $all[$p->getName()] = mc::_("*current-server*"); } foreach ($this->servers as $id => $ln) { $dat = preg_split('/\\s+/', $ln, 3); $host = array_shift($dat); $port = array_shift($dat); $Query = new MinecraftQuery(); try { $Query->Connect($host, $port, 1); } catch (MinecraftQueryException $e) { $this->owner->getLogger()->warning(mc::_("Query %1% failed: %2%", $host, $e->getMessage())); continue; } if (($players = $Query->GetPlayers()) === false) { continue; } if (count($players) == 0) { continue; } foreach ($players as $p) { if ($c->hasPermission("gb.cmd.query.players.showip")) { $all[$p] = "{$id} ({$host}:{$port})"; } else { $all[$p] = "{$id}"; } } } if (count($all) == 0) { $c->sendMessage(TextFormat::YELLOW . "Nobody is on-line at the moment"); } $txt = [mc::n(mc::_("One player found"), mc::_("%1% players found", count($all)), count($all))]; ksort($all, SORT_NATURAL); foreach ($all as $i => $j) { $txt[] = $i . " @ " . $j; } return $this->paginateText($c, $pageNumber, $txt); }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { switch ($cmd->getName()) { case "nick": if (!MPMU::inGame($sender)) { return true; } if (count($args) == 0) { $sender->sendName(mc::_("Current nick is: %1%", $sender->getDisplayName())); return true; } if (count($args) !== 1) { return false; } $this->owner->getServer(mc::_("%1% is now known as %2%", $sender->getDisplayName(), $args[0])); $sender->setDisplayName($args[0]); return true; case "clearchat": if (!MPMU::inGame($sender)) { return true; } if (count($args) != 0) { return false; } for ($i = 0; $i < 32; ++$i) { $sender->sendMessage(" "); } return true; case "chat-on": case "chat-off": if (count($args) > 0) { switch ($n = strtolower(array_shift($args))) { case "--list": case "--ls": case "-l": if (!MPMU::access($sender, "gb.cmd.togglechat.others")) { return true; } $pageNumber = $this->getPageNumber($args); $txt = [""]; $cols = 8; $i = 0; foreach ($this->owner->getServer()->getOnlinePlayers() as $p) { if (!$this->getState($p, false)) { continue; } $n = $p->getDisplayName(); if ($i++ % $cols == 0) { $txt[] = $n; } else { $txt[count($txt) - 1] .= ", " . $n; } } if ($i == 0) { $sender->sendMessage(mc::_("No players with chat off")); if (!$this->chat) { $sender->sendMessage(mc::_("Chat is GLOBALLY off")); } return true; } if ($this->chat) { $txt[0] = mc::n(mc::_("One player with chat off"), mc::_("%1% players with chat off", $i), $i); } else { $txt[0] = mc::_("Chat is GLOBALLY off"); } return $this->paginateText($sender, $pageNumber, $txt); case "--server": case "--global": case "-g": if (count($args)) { return false; } if (!MPMU::access($sender, "gb.cmd.togglechat.global")) { return true; } if ($cmd->getName() == "chat-off") { $this->chat = false; $this->owner->getServer()->broadcastMessage(mc::_("Chat disabled globally from %1%", $sender->getName())); } else { $this->chat = true; $this->owner->getServer()->broadcastMessage(mc::_("Chat enabled globally from %1%", $sender->getName())); } return true; default: if (count($args)) { return false; } if (!MPMU::access($sender, "gb.cmd.togglechat.others")) { return true; } $player = $this->owner->getServer()->getPlayer($n); if ($player === null) { $sender->sendMessage(mc::_("Unable to find %1%", $n)); return true; } if ($cmd->getName() == "chat-off") { $this->setState($player, true); $player->sendMessage(mc::_("Chat disabled from %1%", $sender->getName())); $sender->sendMessage(mc::_("Chat disabled for %1%", $player->getDisplayName())); } else { $this->unsetState($player); $player->sendMessage(mc::_("Chat enabled from %1%", $sender->getName())); $sender->sendMessage(mc::_("Chat enabled for %1%", $player->getDisplayName())); } return true; } return false; } if (!MPMU::inGame($sender)) { return true; } if ($cmd->getName() == "chat-off") { $this->setState($sender, true); $sender->sendMessage(mc::_("Chat disabled")); } else { $this->unsetState($sender); $sender->sendMessage(mc::_("Chat enabled")); } return true; } return false; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if ($cmd->getName() != "skin") { return false; } $pageNumber = $this->getPageNumber($args); if (isset($args[0])) { $human = $this->owner->getServer()->getPlayer($args[0]); if ($human !== null) { array_shift($args); } else { $human = $sender; } } if (count($args) == 0) { $args = ["ls"]; } switch (strtolower(array_shift($args))) { case "ls": $skins = glob($this->owner->getDataFolder() . "*.skin"); if (count($skins) == 0) { $sender->sendMessage(mc::_("No skins found")); return true; } $txt = [mc::n(mc::_("Found one skin"), mc::_("Found %1% skins", count($skins)), count($skins))]; $cols = 8; $i = 0; foreach ($skins as $n) { $n = basename($n, ".skin"); if ($i++ % $cols == 0) { $txt[] = $n; } else { $txt[count($txt) - 1] .= ", " . $n; } } return $this->paginateText($sender, $pageNumber, $txt); case "save": if (count($args) != 1) { return false; } if (!MPMU::inGame($human)) { return true; } if ($human !== $sender && !MPMU::access($sender, "gb.cmd.skin.other")) { return true; } $fn = preg_replace('/\\.skin$/', '', basename($args[0])) . ".skin"; $bin = zlib_encode($human->getSkinData(), ZLIB_ENCODING_DEFLATE, 9); file_put_contents($this->owner->getDataFolder() . $fn, $bin); $sender->sendMessage(mc::_("Wrote %1% bytes to %2%", strlen($bin), $fn)); return true; case "load": $slim = false; if (isset($args[0]) && $args[0] == "--slim") { $slim = true; array_shift($args); } if ($human !== $sender && !MPMU::access($sender, "gb.cmd.skin.other")) { return true; } if (count($args) != 1) { return false; } if (!MPMU::inGame($human)) { return true; } $fn = preg_replace('/\\.skin$/', '', basename($args[0])) . ".skin"; $bin = file_get_contents($this->owner->getDataFolder() . $fn); if ($bin === false) { $sender->sendMessage(mc::_("Unable to read %1%", $fn)); return true; } $human->setSkin(zlib_decode($bin), $slim); $sender->sendMessage(mc::_("Updated skin for %1%", $human->getName())); return true; } return false; }
private function rmInvItem(CommandSender $sender, array $args) { if (count($args) == 0) { return false; } if (($target = $this->owner->getServer()->getPlayer($args[0])) === null) { if (!MPMU::inGame($sender)) { return true; } $target = $sender; $other = false; } else { if (!MPMU::access($sender, "gb.cmd.rminv.others")) { return true; } array_shift($args); $other = true; } if (count($args) == 0) { return false; } if ($target->isCreative() || $target->isSpectator()) { $sender->sendMessage(mc::_("%1% is in %2% mode", $target->getDisplayName(), MPMU::gamemodeStr($target->getGamemode()))); return true; } $count = null; if (count($args) > 1 && is_numeric($args[count($args) - 1])) { $count = array_pop($args); } $args = strtolower(implode("_", $args)); if ($args == "hand") { $item = clone $target->getInventory()->getItemInHand(); if ($item->getId() == 0) { $sender->sendMessage(mc::_("Must be holding something")); return true; } } else { $item = Item::fromString($args); if ($item->getId() == 0) { $sender->sendMessage(mc::_("There is no item called %1%", $args)); return true; } } $k = 0; foreach ($target->getInventory()->getContents() as $slot => &$inv) { if ($inv->getId() != $item->getId()) { continue; } if ($count !== null) { if ($inv->getCount() > $count) { $k += $count; $inv->setCount($inv->getCount() - $count); $target->getInventory()->setItem($slot, clone $inv); break; } $count -= $inv->getCount(); } $k += $inv->getCount(); $target->getInventory()->clear($slot); if ($count === 0) { break; } } if ($k) { $sender->sendMessage(mc::n(mc::_("one item of %1% removed", ItemName::str($item)), mc::_("%2% items of %1% removed", ItemName::str($item), $k), $k)); if ($other) { $target->sendMessage(mc::n(mc::_("%2% took one item of %1% from you", ItemName::str($item), $sender->getName()), mc::_("%3% took %2% items of %1% from you", ItemName::str($item), $k, $sender->getName()), $k)); } } else { $sender->sendMessage(mc::_("No items were removed!")); } return true; }
public function onPlayerJoin(PlayerJoinEvent $e) { $pl = $e->getPlayer(); if ($pl == null) { return; } if (!$pl->hasPermission("gb.cmd.rpt.read")) { return; } list($id, $rpt) = $this->rpt->getAll(); if (count($rpt)) { $pl->sendMessage(mc::n(mc::_("One report on file"), mc::_("%1% reports on file", count($rpt)), count($rpt))); } }