private function checkTickUpdates($currentTick, $tickTime) { foreach ($this->players as $p) { if (!$p->loggedIn and $tickTime - $p->creationTime >= 10) { $p->close("", "Login timeout"); } elseif ($this->alwaysTickPlayers) { $p->onUpdate($currentTick); } } //Do level ticks foreach ($this->getLevels() as $level) { if ($level->getTickRate() > $this->baseTickRate and --$level->tickRateCounter > 0) { continue; } try { $levelTime = microtime(true); $level->doTick($currentTick); $tickMs = (microtime(true) - $levelTime) * 1000; $level->tickRateTime = $tickMs; if ($this->autoTickRate) { if ($tickMs < 50 and $level->getTickRate() > $this->baseTickRate) { $level->setTickRate($r = $level->getTickRate() - 1); if ($r > $this->baseTickRate) { $level->tickRateCounter = $level->getTickRate(); } $this->getLogger()->debug("Raising level \"" . $level->getName() . "\" tick rate to " . $level->getTickRate() . " ticks"); } elseif ($tickMs >= 50) { if ($level->getTickRate() === $this->baseTickRate) { $level->setTickRate(max($this->baseTickRate + 1, min($this->autoTickRateLimit, floor($tickMs / 50)))); $this->getLogger()->debug("Level \"" . $level->getName() . "\" took " . round($tickMs, 2) . "ms, setting tick rate to " . $level->getTickRate() . " ticks"); } elseif ($tickMs / $level->getTickRate() >= 50 and $level->getTickRate() < $this->autoTickRateLimit) { $level->setTickRate($level->getTickRate() + 1); $this->getLogger()->debug("Level \"" . $level->getName() . "\" took " . round($tickMs, 2) . "ms, setting tick rate to " . $level->getTickRate() . " ticks"); } $level->tickRateCounter = $level->getTickRate(); } } } catch (\Exception $e) { $this->logger->critical($this->getLanguage()->translateString("pocketmine.level.tickError", [$level->getName(), $e->getMessage()])); if (\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger) { $this->logger->logException($e); } } } }
private function checkTickUpdates($currentTick) { //Do level ticks foreach ($this->getLevels() as $level) { try { $level->doTick($currentTick); } catch (\Exception $e) { $this->logger->critical("Could not tick level " . $level->getName() . ": " . $e->getMessage()); if (\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger) { $this->logger->logException($e); } } } }