diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 2b7e024b6..66802a15d 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -2296,28 +2296,33 @@ class Level implements ChunkManager, Metadatable{ return $result; } - public function generateChunkCallback(int $x, int $z, Chunk $chunk){ + public function generateChunkCallback(int $x, int $z, ?Chunk $chunk){ Timings::$generationCallbackTimer->startTiming(); if(isset($this->chunkPopulationQueue[$index = Level::chunkHash($x, $z)])){ - $oldChunk = $this->getChunk($x, $z, false); for($xx = -1; $xx <= 1; ++$xx){ for($zz = -1; $zz <= 1; ++$zz){ unset($this->chunkPopulationLock[Level::chunkHash($x + $xx, $z + $zz)]); } } unset($this->chunkPopulationQueue[$index]); - $this->setChunk($x, $z, $chunk, false); - if(($oldChunk === null or !$oldChunk->isPopulated()) and $chunk->isPopulated()){ - $this->server->getPluginManager()->callEvent(new ChunkPopulateEvent($this, $chunk)); - foreach($this->getChunkLoaders($x, $z) as $loader){ - $loader->onChunkPopulated($chunk); + if($chunk !== null){ + $oldChunk = $this->getChunk($x, $z, false); + $this->setChunk($x, $z, $chunk, false); + if(($oldChunk === null or !$oldChunk->isPopulated()) and $chunk->isPopulated()){ + $this->server->getPluginManager()->callEvent(new ChunkPopulateEvent($this, $chunk)); + + foreach($this->getChunkLoaders($x, $z) as $loader){ + $loader->onChunkPopulated($chunk); + } } } }elseif(isset($this->chunkPopulationLock[$index])){ unset($this->chunkPopulationLock[$index]); - $this->setChunk($x, $z, $chunk, false); - }else{ + if($chunk !== null){ + $this->setChunk($x, $z, $chunk, false); + } + }elseif($chunk !== null){ $this->setChunk($x, $z, $chunk, false); } Timings::$generationCallbackTimer->stopTiming(); diff --git a/src/pocketmine/level/generator/PopulationTask.php b/src/pocketmine/level/generator/PopulationTask.php index 76f267784..6af27bb38 100644 --- a/src/pocketmine/level/generator/PopulationTask.php +++ b/src/pocketmine/level/generator/PopulationTask.php @@ -152,11 +152,11 @@ class PopulationTask extends AsyncTask{ $c = $this->{"chunk$i"}; if($c !== null){ $c = Chunk::fastDeserialize($c); - $level->generateChunkCallback($c->getX(), $c->getZ(), $c); + $level->generateChunkCallback($c->getX(), $c->getZ(), $this->state ? $c : null); } } - $level->generateChunkCallback($chunk->getX(), $chunk->getZ(), $chunk); + $level->generateChunkCallback($chunk->getX(), $chunk->getZ(), $this->state ? $chunk : null); } } }