From fde61b7d210d783345328706f8c09b886e34783b Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Mon, 29 Sep 2014 12:48:11 +0200 Subject: [PATCH] Improved single-threaded chunk generation efficiency --- src/pocketmine/level/Level.php | 9 +++------ .../level/generator/GenerationLevelManager.php | 6 ++---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index b0f63cf60..6a8ff339a 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1541,10 +1541,8 @@ class Level implements ChunkManager, Metadatable{ unset($this->chunkGenerationQueue["$x:$z"]); $this->setChunk($x, $z, $chunk); $chunk = $this->getChunk($x, $z); - if($chunk instanceof FullChunk){ - if(!($oldChunk instanceof FullChunk) or ($oldChunk->isPopulated() === false and $chunk->isPopulated())){ - $this->server->getPluginManager()->callEvent(new ChunkPopulateEvent($chunk)); - } + if($chunk instanceof FullChunk and (!($oldChunk instanceof FullChunk) or $oldChunk->isPopulated() === false) and $chunk->isPopulated()){ + $this->server->getPluginManager()->callEvent(new ChunkPopulateEvent($chunk)); } } @@ -1554,9 +1552,8 @@ class Level implements ChunkManager, Metadatable{ foreach($this->getUsingChunk($x, $z) as $player){ $player->unloadChunk($x, $z); } - unset($this->chunks[$index]); $this->provider->setChunk($x, $z, $chunk); - $this->loadChunk($x, $z); + $this->chunks[$index] = $chunk; }else{ $this->provider->setChunk($x, $z, $chunk); $this->chunks[$index] = $chunk; diff --git a/src/pocketmine/level/generator/GenerationLevelManager.php b/src/pocketmine/level/generator/GenerationLevelManager.php index 7e382920c..5ae5d7433 100644 --- a/src/pocketmine/level/generator/GenerationLevelManager.php +++ b/src/pocketmine/level/generator/GenerationLevelManager.php @@ -63,10 +63,8 @@ class GenerationLevelManager extends GenerationManager{ $this->levels[$levelID]->populateChunk($chunkX, $chunkZ); //Request population directly if(isset($this->levels[$levelID])){ foreach($this->levels[$levelID]->getChangedChunks() as $index => $chunk){ - if($chunk->isPopulated()){ - $this->sendChunk($levelID, $chunk); - $this->levels[$levelID]->cleanChangedChunk($index); - } + $this->sendChunk($levelID, $chunk); + $this->levels[$levelID]->cleanChangedChunk($index); } $this->levels[$levelID]->doGarbageCollection();