From 9ef5f9518c740da35728875eea73ea34dac580cb Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 8 Jul 2019 18:29:19 +0100 Subject: [PATCH] generator: prevent access to chunks that don't exist on this thread the generator shouldn't be creating chunks that it wasn't given. --- .../world/generator/GeneratorChunkManager.php | 38 +++++++++++++++++++ .../world/generator/GeneratorRegisterTask.php | 3 +- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/pocketmine/world/generator/GeneratorChunkManager.php diff --git a/src/pocketmine/world/generator/GeneratorChunkManager.php b/src/pocketmine/world/generator/GeneratorChunkManager.php new file mode 100644 index 000000000..312bf182e --- /dev/null +++ b/src/pocketmine/world/generator/GeneratorChunkManager.php @@ -0,0 +1,38 @@ +chunks[World::chunkHash($chunkX, $chunkZ)])){ + throw new \InvalidArgumentException("Chunk does not exist"); + } + return parent::getChunk($chunkX, $chunkZ, $create); + } +} diff --git a/src/pocketmine/world/generator/GeneratorRegisterTask.php b/src/pocketmine/world/generator/GeneratorRegisterTask.php index 8dd110c66..4904ca038 100644 --- a/src/pocketmine/world/generator/GeneratorRegisterTask.php +++ b/src/pocketmine/world/generator/GeneratorRegisterTask.php @@ -26,7 +26,6 @@ namespace pocketmine\world\generator; use pocketmine\block\BlockFactory; use pocketmine\scheduler\AsyncTask; use pocketmine\world\biome\Biome; -use pocketmine\world\SimpleChunkManager; use pocketmine\world\World; use function serialize; use function unserialize; @@ -50,7 +49,7 @@ class GeneratorRegisterTask extends AsyncTask{ public function onRun() : void{ BlockFactory::init(); Biome::init(); - $manager = new SimpleChunkManager($this->worldHeight); + $manager = new GeneratorChunkManager($this->worldHeight); $this->worker->saveToThreadStore("generation.world{$this->worldId}.manager", $manager); /**