diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 8276f59dbb..0dca6fb9fa 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2137,7 +2137,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $this->connected = false; $this->interface->close($this, $reason); - $this->server->removePlayer($this); $this->getLevel()->freeAllChunks($this); @@ -2157,6 +2156,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $this->loadQueue = []; unset($this->buffer); } + + $this->server->removePlayer($this); } /** diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index f8d6b4ae9f..fc05211860 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1984,10 +1984,13 @@ class Server{ } public function doAutoSave(){ - Timings::$worldSaveTimer->startTiming(); - foreach($this->getOnlinePlayers() as $player){ - $player->save(); + foreach($this->getOnlinePlayers() as $index => $player){ + if($player->isOnline()){ + $player->save(); + }elseif(!$player->isConnected()){ + unset($this->players[$index]); + } } foreach($this->getLevels() as $level){ diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 14e48887e0..7cefa28d3d 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -251,7 +251,7 @@ class Level implements ChunkManager, Metadatable{ $this->nextSave = microtime(true) + 90; $this->chunkTickRadius = min($this->server->getViewDistance(), max(1, (int) $this->server->getProperty("chunk-ticking.tick-radius", 3))); - $this->chunksPerTick = (int) $this->server->getProperty("chunk-ticking.per-tick", 128); + $this->chunksPerTick = (int) $this->server->getProperty("chunk-ticking.per-tick", 80); $this->chunkTickList = []; $this->clearChunksOnTick = (bool) $this->server->getProperty("chunk-ticking.clear-tick-list", false); $this->timings = new LevelTimings($this);