public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if (count($args) == 0) { $args = ["summary"]; } switch ($cmd->getName()) { case "query": switch ($n = strtolower(array_shift($args))) { case "info": case "plugins": if (!MPMU::access($sender, "gb.cmd.query.details")) { return true; } return $this->cmdQuery($sender, $n, $args); case "players": if (!MPMU::access($sender, "gb.cmd.query.players")) { return true; } $pageNumber = $this->getPageNumber($args); if (count($args) && $sender->hasPermission("gb.cmd.query.players.showip")) { return $this->cmdQuery($sender, $n, $args, $pageNumber); } return $this->cmdPlayers($sender, $pageNumber); case "list": if (!MPMU::access($sender, "gb.cmd.query.list")) { return true; } $pageNumber = $this->getPageNumber($args); return $this->cmdListAll($sender, $pageNumber); case "summary": return $this->cmdSummary($sender); } } return false; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if ($cmd->getName() != "top") { return false; } switch (count($args)) { case 0: if (!MPMU::inGame($sender)) { return true; } $pl = $sender; break; case 1: if (!MPMU::access($sender, "gb.cmd.top.others")) { return true; } $pl = $this->owner->getServer()->getPlayer($args[0]); if (!$pl) { $sender->sendMessage(mc::_("%1% not found", $args[0])); return true; } break; default: return false; } $y = $pl->getLevel()->getHighestBlockAt($pl->getX(), $pl->getZ()) + 1; $pl->teleport(new Vector3($pl->getX(), $y, $pl->getZ())); return true; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if ($cmd->getName() != "top") { return false; } switch (count($args)) { case 0: if (!MPMU::inGame($sender)) { return true; } $pl = $sender; break; case 1: if (!MPMU::access($sender, "gb.cmd.top.others")) { return true; } if (($pl = MPMU::getPlayer($sender, $args[0])) === null) { return true; } break; default: return false; } $y = $pl->getLevel()->getHighestBlockAt($pl->getX(), $pl->getZ()) + 1; $pl->teleport(new Vector3($pl->getX(), $y, $pl->getZ())); return true; }
public function rptCmd(CommandSender $sender, array $args) { if (count($args) == 0) { return false; } list($id, $rpt) = $this->rpt->getAll(); if ($args[0] == "read" && (count($args) == 1 || count($args) == 2 && is_numeric($args[1]))) { if (!MPMU::access($sender, "gb.cmd.rpt.read")) { return false; } if (count($rpt) == 0) { $sender->sendMessage(TextFormat::RED . mc::_("No reports on file!")); return true; } $pageNumber = $this->getPageNumber($args); $tab = [[mc::_("ID"), mc::_("Date"), mc::_("Name"), mc::_("Reports: %1%", count($rpt))]]; foreach ($rpt as $i => $ln) { list($tm, $name, $ms) = $ln; $tm = date(mc::_("d-M H:i"), $tm); $tab[] = [$i, $tm, $name, $ms]; } $this->paginateTable($sender, $pageNumber, $tab); return true; } if ($args[0] == "clear" && count($args) == 2) { if (!MPMU::access($sender, "gb.cmd.rpt.read")) { return false; } if ($args[1] == "all") { $rpt = []; $sender->sendMessage(TextFormat::RED . mc::_("All reports deleted")); } else { $i = intval($args[1]); if (!isset($rpt[$i])) { $sender->sendMessage(mc::_("Unknown report #%1%", $i)); return true; } unset($rpt[$i]); $sender->sendMessage(mc::_("Deleting report #%1%", $i)); } } else { $rpt[++$id] = [time(), $sender->getName(), implode(" ", $args)]; $sender->sendMessage(mc::_("Report filed as #%1%", $id)); $ms = TextFormat::BLUE . mc::_("Rpt[#%1% from %2%] ", $id, $sender->getName()) . TextFormat::YELLOW . implode(" ", $args); $this->owner->getLogger()->info($ms); foreach ($this->owner->getServer()->getOnlinePlayers() as $pl) { if (!$pl->isOp()) { continue; } $pl->sendMessage($ms); } } $this->rpt->setAll([$id, $rpt]); $this->rpt->save(); return true; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if (count($args) > 1) { return false; } if (count($args) == 0) { if (!MPMU::inGame($sender)) { return true; } $target = $sender; $other = false; } else { if (!MPMU::access($sender, "gb.cmd." . $cmd->getName() . ".others")) { return true; } $target = $this->owner->getServer()->getPlayer($args[0]); if ($target === null) { $sender->sendMessage(mc::_("%1% can not be found.", $args[0])); return true; } $other = true; } $n = strtolower($target->getName()); if ($target->isOp()) { // Player is dropping from op... $this->reops[$n] = true; $target->setOp(false); if ($other) { $sender->sendMessage(mc::_("%1% is no longer Op", $target->getDisplayName())); } $target->sendMessage(mc::_("You are no longer Op")); return true; } // Player wants to resume op if (isset($this->reops[$n])) { $target->setOp(true); unset($this->reops[$n]); if ($other) { $sender->sendMessage(mc::_("%1% is now Op", $target->getDisplayName())); } $target->sendMessage(mc::_("You are now Op")); return true; } // This player can not be re-opped if ($other) { $sender->sendMessage(mc::_("That is not possible")); return true; } $sender->sendMessage(mc::_("You are not allowed to do this")); return true; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if (count($args) == 0) { return false; } $i = array_pop($args); if (($type = ArmorItems::str2quality($i)) == ArmorItems::ERROR) { $sender->sendMessage(mc::_("Unknown armor quality %1%", $i)); return false; } $slots = [0, 1, 2, 3]; // All slots if (count($args)) { $i = ArmorItems::str2part($args[count($args) - 1]); if ($i != ArmorItems::ERROR) { $slots = [$i]; array_pop($args); } } $pl = $sender; if (count($args)) { $i = $this->owner->getServer()->getPlayer($args[count($args) - 1]); if ($i) { $pl = $i; if (!MPMU::access($sender, "gb.cmd.setarmor.others")) { return true; } array_pop($args); } } if (count($args)) { return false; } if (!MPMU::inGame($pl)) { return true; } foreach ($slots as $i) { $pl->getInventory()->setArmorItem($i, new Item(ArmorItems::getItemId($type, $i), 0, 1)); } if ($type == ArmorItems::NONE) { $sender->sendMessage(mc::_("Amouring down %1%", $pl->getName())); } else { $sender->sendMessage(mc::_("Amouring up %1%", $pl->getName())); } // Make sure inventory is updated... $pl->getInventory()->sendArmorContents($pl); return true; }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if (strtolower($cmd->getName()) != "xyz") { return false; } if (count($args) == 0) { if (!MPMU::inGame($sender)) { return true; } $sender->sendMessage(mc::_("You are at %1%,%2%,%3% in world %4%, heading %5%", (int) $sender->getX(), (int) $sender->getY(), (int) $sender->getZ(), $sender->getLevel()->getName(), ExpandVars::bearing($sender->getYaw()))); } else { if (count($args) != 1) { return false; } if (!MPMU::access($sender, "gb.cmd.xyz.others")) { return true; } if (($player = MPMU::getPlayer($sender, $args[0])) === null) { return true; } $sender->sendMessage(mc::_("%6% is at %1%,%2%,%3% in world %4%, heading %5%", (int) $player->getX(), (int) $player->getY(), (int) $player->getZ(), $player->getLevel()->getName(), ExpandVars::bearing($player->getYaw()), $player->getDisplayName())); } return true; }
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 = []; foreach (glob($this->owner->getDataFolder() . "*.*") as $f) { if (SkinUtils::isSkinFile($f)) { $skins[] = $f; } } 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 "formats": case "fmt": if (count($args) != 0) { return false; } $sender->sendMessage(mc::_("Supported formats: %1%", implode(", ", SkinUtils::formats()))); return true; 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; } if (SkinUtils::isPngExt($args[0])) { $fmts = SkinUtils::formats(); if (!isset($fmts[SkinUtils::PNG_FMT])) { $sender->sendMessage(mc::_("PNG format is not supported")); return true; } $fn = $this->owner->getDataFolder() . preg_replace('/\\.[pP][nN][gG]$/', '', basename($args[0])) . ".png"; } else { $fn = $this->owner->getDataFolder() . preg_replace('/\\.skin$/', '', basename($args[0])) . ".skin"; } $cnt = SkinUtils::saveSkin($human, $fn); $sender->sendMessage(mc::_("Wrote %1% bytes to %2%", $cnt, $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; } if (SkinUtils::isPngExt($args[0])) { $fmts = SkinUtils::formats(); if (!isset($fmts[SkinUtils::PNG_FMT])) { $sender->sendMessage(mc::_("PNG format is not supported")); return true; } $fn = $this->owner->getDataFolder() . preg_replace('/\\.[pP][nN][gG]$/', '', basename($args[0])) . ".png"; } else { $fn = $this->owner->getDataFolder() . preg_replace('/\\.skin$/', '', basename($args[0])) . ".skin"; } if (SkinUtils::loadSkin($human, $slim, $fn)) { $sender->sendMessage(mc::_("Updated skin for %1%", $human->getName())); } else { $sender->sendMessage(mc::_("Unable to read %1%", $fn)); } return true; case "slim": if ($human !== $sender && !MPMU::access($sender, "gb.cmd.skin.other")) { return true; } if (count($args) != 0) { return false; } if (!MPMU::inGame($human)) { return true; } SkinUtils::setSlim($human, true); $sender->sendMessage(mc::_("%1% is now slim", $human->getName())); return true; case "thick": if ($human !== $sender && !MPMU::access($sender, "gb.cmd.skin.other")) { return true; } if (count($args) != 0) { return false; } if (!MPMU::inGame($human)) { return true; } SkinUtils::setSlim($human, false); $sender->sendMessage(mc::_("%1% is now thick", $human->getName())); return true; } return false; }
private function cmdSet($sender, $args) { switch (count($args)) { case 0: return false; case 1: $n = strtolower($args[0]); $pos = $sender; break; default: $n = strtolower(array_shift($args)); $pos = explode(":", implode(" ", $args), 2); if (count($pos) == 2) { $world = $pos[1]; $level = TPUtils::getLevelByName($this->owner->getServer(), $world); if ($level === null) { $sender->sendMessage(mc::_("World %1% does not exist", $world)); return true; } } else { if (MPMU::inGame($sender, false)) { $level = $sender->getLevel(); } else { $level = $this->owner->getServer()->getDefaultLevel(); } } $pos = explode(",", $pos[0]); if (count($pos) != 3) { $sender->sendMessage(mc::_("Invalid position")); return true; } $pos = new Position(intval($pos[0]), intval($pos[1]), intval($pos[2]), $level); } $warp = $this->getWarp($n); if ($warp == null) { if (!MPMU::access($sender, "gb.cmd.setwarp.new")) { return true; } PermUtils::add($this->owner, "gb.warp." . $n, "warp to " . $n, self::defaultWarpPerm); } else { if (!MPMU::access($sender, "gb.cmd.setwarp.move")) { return true; } } if ($this->setWarp($n, $pos)) { $sender->sendMessage(mc::_("Warp %1% created", $n)); } else { $sender->sendMessage(mc::_("Unable to create Warp %1%", $n)); } return true; }
private function cmdSet($sender) { $home = $this->getHome($sender, $sender->getLevel()); if ($home === null) { if (!MPMU::access($sender, "gb.cmd.sethome.new")) { return true; } } else { if (!MPMU::access($sender, "gb.cmd.sethome.move")) { return true; } } $this->setHome($sender, $sender); $sender->sendMessage(mc::_("Home is where the heart is!")); return true; }
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 = InvUtils::rmInvItem($target, $item, $count); 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 onCommand(CommandSender $sender, Command $cmd, $label, array $args) { switch ($cmd->getName()) { case "nick": if (!MPMU::inGame($sender)) { return true; } if (count($args) == 0) { $sender->sendMessage(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->setGlobalChat(false); $this->owner->getServer()->broadcastMessage(mc::_("Chat disabled globally from %1%", $sender->getName())); } else { $this->setGlobalChat(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 = $this->getSkins(); 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"; $cnt = $this->saveSkin($human, $fn); $sender->sendMessage(mc::_("Wrote %1% bytes to %2%", $cnt, $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"; if ($this->loadSkin($human, $fn)) { $sender->sendMessage(mc::_("Updated skin for %1%", $human->getName())); } else { $sender->sendMessage(mc::_("Unable to read %1%", $fn)); } return true; } return false; }
public function cmdAccept(Player $a, Player $b) { $k = implode(":", [strtolower($b->getName()), strtolower($a->getName())]); if (!isset($this->requests[$k])) { $a->sendMessage(mc::_("No teleport request from %1%", $b->getDisplayName())); return true; } $type = $this->requests[$k]; unset($this->requests[$k]); switch ($type) { case "tpa": if (!MPMU::access($a, "gb.cmd.tpaccept.tpask")) { return true; } $a->sendMessage(mc::_("Accepted teleport request from %1%", $b->getDisplayName())); $b->sendMessage(mc::_("%1% accepted your TPASK request", $a->getDisplayName())); $b->teleport($a); return true; case "tph": if (!MPMU::access($a, "gb.cmd.tpaccept.tpahere")) { return true; } $a->sendMessage(mc::_("Accepted teleport request to %1%", $b->getDisplayName())); $b->sendMessage(mc::_("%1% accepted your TPAHERE request", $a->getDisplayName())); $a->teleport($b); return true; } $this->owner->getLogger()->error(mc::_("Invalid teleport request: %1%", $type)); return false; }
private function cmdList(CommandSender $c, $args) { $pageNumber = $this->getPageNumber($args); $txt = [mc::_("Server connections")]; foreach ($this->servers as $id => $dat) { $ln = $id; $q = ": "; if (MPMU::access($c, "gb.cmd.servers.read.viewip", false)) { $ln .= $q . $dat["host"] . ":" . $dat["port"]; $q = ", "; } if (isset($dat["#"])) { $ln .= $q . mc::_(" #:%1%", $dat["#"]); $q = ", "; } $txt[] = $ln; } return $this->paginateText($c, $pageNumber, $txt); }
public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { if (count($args) == 0) { return false; } $pl = $this->owner->getServer()->getPlayer($args[0]); if ($pl !== null) { array_shift($args); if (count($args) == 0) { return false; } if (!MPMU::access($sender, "gb.cmd.setarmor.others")) { return true; } $others = true; } else { if (!MPMU::inGame($sender)) { return true; } $pl = $sender; $others = false; } $j = implode("_", $args); $item = Item::fromString($j); $slot = ArmorItems::getArmorPart($item->getId()); if ($slot != ArmorItems::ERROR) { $pl->getInventory()->setArmorItem($slot, clone $item); if ($others) { $pl->sendMessage(mc::_("You were equiped an %1% by %2%", ItemName::str($item), $sender->getName())); $sender->sendMessage(mc::_("Equiping %1% with %2%", $pl->getDisplayName(), ItemName::str($item))); } else { $sender->sendMessage(mc::_("Equiping armor %1%", ItemName::str($item))); } $pl->getInventory()->sendArmorContents($pl); return true; } if (($type = ArmorItems::str2quality($j)) == ArmorItems::ERROR) { $sender->sendMessage(mc::_("Unknown armor quality %1%", $j)); return false; } foreach ([0, 1, 2, 3] as $slot) { $pl->getInventory()->setArmorItem($slot, new Item(ArmorItems::getItemId($type, $slot), 0, 1)); } if ($type == ArmorItems::NONE) { if ($others) { $pl->sendMessage(mc::_("You were armoured down by %1%", $sender->getName())); $sender->sendMessage(mc::_("%1% was armoured down", $pl->getDisplayName())); } else { $sender->sendMessage(mc::_("Armoured down")); } } else { if ($others) { $pl->sendMessage(mc::_("You were armoured up by %1%", $sender->getName())); $sender->sendMessage(mc::_("%1% was armoured up", $pl->getDisplayName())); } else { $sender->sendMessage(mc::_("Armoured up")); } } $pl->getInventory()->sendArmorContents($pl); return true; }