diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 824d998b4..1a8aa9dd2 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1880,7 +1880,7 @@ class Level implements ChunkManager, Metadatable{ public function getChunk($x, $z, $create = false){ if(isset($this->chunks[$index = Level::chunkHash($x, $z)])){ return $this->chunks[$index]; - }elseif($this->loadChunk($x, $z, $create) and $this->chunks[$index] !== null){ + }elseif($this->loadChunk($x, $z, $create)){ return $this->chunks[$index]; } @@ -2159,21 +2159,16 @@ class Level implements ChunkManager, Metadatable{ $this->cancelUnloadChunkRequest($x, $z); $chunk = $this->provider->getChunk($x, $z, $generate); - if($chunk !== null){ - $this->chunks[$index] = $chunk; - $chunk->initChunk(); - }else{ - $this->provider->loadChunk($x, $z, $generate); - - if(($chunk = $this->provider->getChunk($x, $z)) !== null){ - $this->chunks[$index] = $chunk; - $chunk->initChunk(); - }else{ - $this->timings->syncChunkLoadTimer->stopTiming(); - return false; + if($chunk === null){ + if($generate){ + throw new \InvalidStateException("Could not create new Chunk"); } + return false; } + $this->chunks[$index] = $chunk; + $chunk->initChunk(); + if($chunk->getProvider() !== null){ $this->server->getPluginManager()->callEvent(new ChunkLoadEvent($chunk, !$chunk->isGenerated())); }else{ diff --git a/src/pocketmine/level/format/anvil/Anvil.php b/src/pocketmine/level/format/anvil/Anvil.php index aa525e74b..963e7c840 100644 --- a/src/pocketmine/level/format/anvil/Anvil.php +++ b/src/pocketmine/level/format/anvil/Anvil.php @@ -120,7 +120,7 @@ class Anvil extends McRegion{ } public function isChunkGenerated($chunkX, $chunkZ){ - if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) instanceof RegionLoader){ + if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) !== null){ return $region->chunkExists($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32) and $this->getChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32, true)->isGenerated(); } diff --git a/src/pocketmine/level/format/mcregion/McRegion.php b/src/pocketmine/level/format/mcregion/McRegion.php index d8fd4eb03..ae121979f 100644 --- a/src/pocketmine/level/format/mcregion/McRegion.php +++ b/src/pocketmine/level/format/mcregion/McRegion.php @@ -284,7 +284,7 @@ class McRegion extends BaseLevelProvider{ } public function isChunkGenerated($chunkX, $chunkZ){ - if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) instanceof RegionLoader){ + if(($region = $this->getRegion($chunkX >> 5, $chunkZ >> 5)) !== null){ return $region->chunkExists($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32) and $this->getChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32, true)->isGenerated(); } @@ -293,7 +293,7 @@ class McRegion extends BaseLevelProvider{ public function isChunkPopulated($chunkX, $chunkZ){ $chunk = $this->getChunk($chunkX, $chunkZ); - if($chunk instanceof FullChunk){ + if($chunk !== null){ return $chunk->isPopulated(); }else{ return false; diff --git a/src/pocketmine/level/generator/GenerationTask.php b/src/pocketmine/level/generator/GenerationTask.php index ef6c8fb64..fa042a13c 100644 --- a/src/pocketmine/level/generator/GenerationTask.php +++ b/src/pocketmine/level/generator/GenerationTask.php @@ -67,7 +67,7 @@ class GenerationTask extends AsyncTask{ $generator->generateChunk($chunk->getX(), $chunk->getZ()); $chunk = $manager->getChunk($chunk->getX(), $chunk->getZ()); - $chunk->setGenerated(true); + $chunk->setGenerated(); $this->chunk = $chunk->toFastBinary(); $manager->setChunk($chunk->getX(), $chunk->getZ(), null); diff --git a/src/pocketmine/level/generator/PopulationTask.php b/src/pocketmine/level/generator/PopulationTask.php index b023a6542..6a9b6ed08 100644 --- a/src/pocketmine/level/generator/PopulationTask.php +++ b/src/pocketmine/level/generator/PopulationTask.php @@ -112,6 +112,7 @@ class PopulationTask extends AsyncTask{ $manager->setChunk($c->getX(), $c->getZ(), $c); if(!$c->isGenerated()){ $generator->generateChunk($c->getX(), $c->getZ()); + $c = $manager->getChunk($c->getX(), $c->getZ()); $c->setGenerated(); } } @@ -175,7 +176,7 @@ class PopulationTask extends AsyncTask{ } $c = $this->{"chunk$i"}; if($c !== null){ - $c = $chunkC::fromFastBinary($c); + $c = $chunkC::fromFastBinary($c, $level->getProvider()); $level->generateChunkCallback($c->getX(), $c->getZ(), $c); } }