diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index ed2413e3b..0b1b7696f 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -122,7 +122,6 @@ use function file_exists; use function file_get_contents; use function file_put_contents; use function filemtime; -use function floor; use function function_exists; use function get_class; use function getmypid; @@ -295,15 +294,6 @@ class Server{ /** @var int */ public $networkCompressionLevel = 7; - /** @var bool */ - private $autoTickRate = true; - /** @var int */ - private $autoTickRateLimit = 20; - /** @var bool */ - private $alwaysTickPlayers = false; - /** @var int */ - private $baseTickRate = 1; - /** @var int */ private $autoSaveTicker = 0; /** @var int */ @@ -1109,8 +1099,6 @@ class Server{ (new LevelLoadEvent($level))->call(); - $level->setTickRate($this->baseTickRate); - return true; } @@ -1154,8 +1142,6 @@ class Server{ $level = new Level($this, $name, new $providerClass($path)); $this->levels[$level->getId()] = $level; - $level->setTickRate($this->baseTickRate); - (new LevelInitEvent($level))->call(); (new LevelLoadEvent($level))->call(); @@ -1593,11 +1579,6 @@ class Server{ } $this->networkCompressionAsync = (bool) $this->getProperty("network.async-compression", true); - $this->autoTickRate = (bool) $this->getProperty("level-settings.auto-tick-rate", true); - $this->autoTickRateLimit = (int) $this->getProperty("level-settings.auto-tick-rate-limit", 20); - $this->alwaysTickPlayers = (bool) $this->getProperty("level-settings.always-tick-players", false); - $this->baseTickRate = (int) $this->getProperty("level-settings.base-tick-rate", 1); - $this->doTitleTick = ((bool) $this->getProperty("console.title-tick", true)) && Terminal::hasFormattingCodes(); @@ -2431,8 +2412,6 @@ class Server{ foreach($this->players as $p){ if(!$p->loggedIn and ($tickTime - $p->creationTime) >= 10){ $p->close("", "Login timeout"); - }elseif($this->alwaysTickPlayers and $p->spawned){ - $p->onUpdate($currentTick); } } @@ -2442,9 +2421,6 @@ class Server{ // Level unloaded during the tick of a level earlier in this loop, perhaps by plugin continue; } - if($level->getTickRate() > $this->baseTickRate and --$level->tickRateCounter > 0){ - continue; - } $levelTime = microtime(true); $level->doTick($currentTick); @@ -2453,25 +2429,6 @@ class Server{ if($tickMs >= 50){ $this->getLogger()->debug(sprintf("World \"%s\" took too long to tick: %gms (%g ticks)", $level->getName(), $tickMs, round($tickMs / 50, 2))); } - - 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, (int) floor($tickMs / 50)))); - $this->getLogger()->debug(sprintf("Level \"%s\" took %gms, setting tick rate to %d ticks", $level->getName(), (int) round($tickMs, 2), $level->getTickRate())); - }elseif(($tickMs / $level->getTickRate()) >= 50 and $level->getTickRate() < $this->autoTickRateLimit){ - $level->setTickRate($level->getTickRate() + 1); - $this->getLogger()->debug(sprintf("Level \"%s\" took %gms, setting tick rate to %d ticks", $level->getName(), (int) round($tickMs, 2), $level->getTickRate())); - } - $level->tickRateCounter = $level->getTickRate(); - } - } } } diff --git a/src/pocketmine/command/defaults/StatusCommand.php b/src/pocketmine/command/defaults/StatusCommand.php index 9c258c3cc..d43f7df28 100644 --- a/src/pocketmine/command/defaults/StatusCommand.php +++ b/src/pocketmine/command/defaults/StatusCommand.php @@ -108,13 +108,11 @@ class StatusCommand extends VanillaCommand{ foreach($server->getLevels() as $level){ $levelName = $level->getFolderName() !== $level->getName() ? " (" . $level->getName() . ")" : ""; - $timeColor = ($level->getTickRate() > 1 or $level->getTickRateTime() > 40) ? TextFormat::RED : TextFormat::YELLOW; - $tickRate = $level->getTickRate() > 1 ? " (tick rate " . $level->getTickRate() . ")" : ""; + $timeColor = $level->getTickRateTime() > 40 ? TextFormat::RED : TextFormat::YELLOW; $sender->sendMessage(TextFormat::GOLD . "World \"{$level->getFolderName()}\"$levelName: " . TextFormat::RED . number_format(count($level->getChunks())) . TextFormat::GREEN . " chunks, " . - TextFormat::RED . number_format(count($level->getEntities())) . TextFormat::GREEN . " entities, " . - TextFormat::RED . number_format(count($level->getTiles())) . TextFormat::GREEN . " tiles. " . - "Time $timeColor" . round($level->getTickRateTime(), 2) . "ms" . $tickRate + TextFormat::RED . number_format(count($level->getEntities())) . TextFormat::GREEN . " entities. " . + "Time $timeColor" . round($level->getTickRateTime(), 2) . "ms" ); } diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index d32e04fa0..c72116386 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -1640,7 +1640,8 @@ abstract class Entity extends Location implements Metadatable, EntityIds{ assert(abs($dx) <= 20 and abs($dy) <= 20 and abs($dz) <= 20, "Movement distance is excessive: dx=$dx, dy=$dy, dz=$dz"); - $list = $this->level->getCollisionCubes($this, $this->level->getTickRate() > 1 ? $this->boundingBox->offsetCopy($dx, $dy, $dz) : $this->boundingBox->addCoord($dx, $dy, $dz), false); + //TODO: bad hack here will cause unexpected behaviour under heavy lag + $list = $this->level->getCollisionCubes($this, $this->level->getTickRateTime() > 50 ? $this->boundingBox->offsetCopy($dx, $dy, $dz) : $this->boundingBox->addCoord($dx, $dy, $dz), false); foreach($list as $bb){ $dy = $bb->calculateYOffset($this->boundingBox, $dy); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 040c2bcd1..9a8bc8a5c 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -261,12 +261,8 @@ class Level implements ChunkManager, Metadatable{ /** @var LevelTimings */ public $timings; - /** @var int */ - private $tickRate; /** @var int */ public $tickRateTime = 0; - /** @var int */ - public $tickRateCounter = 0; /** @var bool */ private $doingTick = false; @@ -411,19 +407,26 @@ class Level implements ChunkManager, Metadatable{ $this->timings = new LevelTimings($this); $this->temporalPosition = new Position(0, 0, 0, $this); $this->temporalVector = new Vector3(0, 0, 0); - $this->tickRate = 1; } + /** + * @deprecated + * @return int + */ public function getTickRate() : int{ - return $this->tickRate; + return 1; } public function getTickRateTime() : float{ return $this->tickRateTime; } + /** + * @deprecated does nothing + * @param int $tickRate + */ public function setTickRate(int $tickRate){ - $this->tickRate = $tickRate; + } public function registerGeneratorToWorker(int $worker) : void{