public function onTick() { $this->innerTick++; $this->roundTick++; switch ($this->currentStatus) { case self::STATUS_NOT_STARTED: break; case self::STATUS_PREPARING: if ($this->roundTick >= $this->configs["preparation-term"]) { $this->startGame(); } foreach ($this->players as $xcelPlayer) { $xcelPlayer->getPlayer()->teleport($this->getPreparationPosition($xcelPlayer)); } break; case self::STATUS_IN_GAME: if ($this->roundStatus === self::STATUS_IN_ROUND) { if ($this->roundTick >= $this->configs["round-term"]) { $this->roundTick = 0; $this->roundStatus = self::STATUS_ROUND_PREPARATION; $this->broadcastMessageForPlayers(TextFormat::AQUA . XcelNgien::getTranslation("ROUND_FINISHED", $this->round)); Server::getInstance()->getPluginManager()->callEvent(new GameStatusUpdateEvent($this)); $this->prepareNextRound(); } } else { if ($this->roundTick >= $this->configs["preparation-round-term"]) { $this->roundTick = 0; $this->round++; if ($this->round >= $this->configs["max-round"]) { $alive = []; foreach ($this->players as $xcelPlayer) { if ($xcelPlayer->isAlive()) { $alive[] = $xcelPlayer; } } $this->winGame($alive); return; } Server::getInstance()->getPluginManager()->callEvent(new GameStatusUpdateEvent($this)); $this->broadcastMessageForPlayers(TextFormat::AQUA . XcelNgien::getTranslation("ROUND_STARTED", $this->round)); } } if ($this->roundTick % self::MESSAGE_SEND_TERM === 0) { foreach ($this->players as $xcelPlayer) { $xcelPlayer->getPlayer()->sendTip($this->getTip($xcelPlayer)); } } } $this->afterTick(); }
public function removePlayer(XcelPlayer $player, $notify = false) { if ($notify && $player->isAlive()) { $this->broadcastMessageForPlayers(TextFormat::RED . XcelNgien::getTranslation("PLAYER_OUT", $player->getPlayer()->getDisplayName())); } if ($this->currentStatus === self::STATUS_IN_GAME || $this->currentStatus === self::STATUS_FINISHED) { $this->removePrivilege($player); } $player->setGame(null); $player->getPlayer()->setGamemode(Server::getInstance()->getDefaultGamemode()); $player->getPlayer()->setHealth($player->getPlayer()->getMaxHealth()); $player->getPlayer()->teleport(Server::getInstance()->getDefaultLevel()->getSpawnLocation()); unset($this->players[$player->getPlayer()->getName()]); $this->recalculatePlayers(); }
public function onPlayerInteract(PlayerInteractEvent $event) { $loc = $this->encodeLoc($event->getBlock()); if (isset(self::$warpData[$loc])) { if (!$event->getPlayer()->hasPermission("warp.join")) { $event->getPlayer()->sendMessage(TextFormat::DARK_RED . XcelNgien::getTranslation("CANNOT_JOIN")); return; } $world = self::$warpData[$loc]["world"]; if (!isset(XcelNgien::$worlds[$world])) { $event->getPlayer()->sendMessage(TextFormat::RED . "Invalid Warp!"); return; } $game = XcelNgien::$worlds[$world]; if (!isset(XcelNgien::$players[$event->getPlayer()->getName()])) { return; } $player = XcelNgien::$players[$event->getPlayer()->getName()]; if (!$game->canWarpTo($player)) { $player->getPlayer()->sendMessage(TextFormat::RED . XcelNgien::getTranslation("CANNOT_JOIN")); return; } $player->getPlayer()->teleport($game->getPreparationPosition($player)); } }