From 419abdaad6d34b87cdc6797f91610bc46048ad25 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sat, 16 May 2015 15:43:34 +0200 Subject: [PATCH] Proper chunk unloading in case of generation/loading without players --- src/pocketmine/level/Level.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 2148d06c6..01ff267bf 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -568,6 +568,8 @@ class Level implements ChunkManager, Metadatable{ ++$this->loaders[$hash]; } + $this->cancelUnloadChunkRequest($chunkX, $chunkZ); + if($autoLoad){ $this->loadChunk($chunkX, $chunkZ); } @@ -634,9 +636,6 @@ class Level implements ChunkManager, Metadatable{ $this->unloadChunks(); - $X = null; - $Z = null; - //Do block updates $this->timings->doTickPending->startTiming(); while($this->updateQueue->count() > 0 and $this->updateQueue->current()["priority"] <= $currentTick){ @@ -2047,8 +2046,12 @@ class Level implements ChunkManager, Metadatable{ unset($this->chunkCache[$index]); $chunk->setChanged(); - foreach($this->getChunkLoaders($chunkX, $chunkZ) as $loader){ - $loader->onChunkChanged($chunk); + if(!$this->isChunkInUse($chunkX, $chunkZ)){ + $this->unloadChunkRequest($chunkX, $chunkZ); + }else{ + foreach($this->getChunkLoaders($chunkX, $chunkZ) as $loader){ + $loader->onChunkChanged($chunk); + } } } @@ -2286,8 +2289,12 @@ class Level implements ChunkManager, Metadatable{ $chunk->setChanged(false); - foreach($this->getChunkLoaders($x, $z) as $loader){ - $loader->onChunkLoaded($chunk); + if($this->isChunkInUse($x, $z)){ + foreach($this->getChunkLoaders($x, $z) as $loader){ + $loader->onChunkLoaded($chunk); + } + }else{ + $this->unloadChunkRequest($x, $z); } $this->timings->syncChunkLoadTimer->stopTiming();