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 __construct(XcelGame $game)
 {
     parent::__construct(XcelNgien::getInstance());
     $this->game = $game;
 }
Exemple #3
0
 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();
 }
Exemple #4
0
 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));
     }
 }
 public function __construct(XcelPlayer $player)
 {
     parent::__construct(XcelNgien::getInstance());
     $this->player = $player;
 }
 public function playerMove(XcelPlayer $player, PlayerMoveEvent $event)
 {
     if (!$player->isAlive()) {
         return;
     }
     if (!XcelNgien::isSameGame($player->getGame(), $this)) {
         return;
     }
     $oldTo = $event->getTo();
     $x = $oldTo->getX() < -1 ? -1 : $oldTo->getX();
     $x = $x > 2 ? 2 : $x;
     $event->setTo(new Location($x, $oldTo->getY(), $oldTo->getZ(), $oldTo->getYaw(), $oldTo->getPitch(), $oldTo->getLevel()));
 }
Exemple #7
0
 public function onRun($currentTick)
 {
     XcelNgien::tick();
 }