state = true; $this->levelId = $level->getId(); $this->chunk = $chunk->fastSerialize(); } public function onRun(){ /** @var SimpleChunkManager $manager */ $manager = $this->getFromThreadStore("generation.level{$this->levelId}.manager"); /** @var Generator $generator */ $generator = $this->getFromThreadStore("generation.level{$this->levelId}.generator"); if($manager === null or $generator === null){ $this->state = false; return; } /** @var Chunk $chunk */ $chunk = GenericChunk::fastDeserialize($this->chunk); if($chunk === null){ //TODO error return; } $manager->setChunk($chunk->getX(), $chunk->getZ(), $chunk); $generator->generateChunk($chunk->getX(), $chunk->getZ()); $chunk = $manager->getChunk($chunk->getX(), $chunk->getZ()); $chunk->setGenerated(); $this->chunk = $chunk->fastSerialize(); $manager->setChunk($chunk->getX(), $chunk->getZ(), null); } public function onCompletion(Server $server){ $level = $server->getLevel($this->levelId); if($level !== null){ if($this->state === false){ $level->registerGenerator(); return; } /** @var Chunk $chunk */ $chunk = GenericChunk::fastDeserialize($this->chunk, $level->getProvider()); if($chunk === null){ //TODO error return; } $level->generateChunkCallback($chunk->getX(), $chunk->getZ(), $chunk); } } }