setChunk($chunkX, $chunkZ, $chunk ?? new Chunk([], false)); if($chunk === null){ $generator->generateChunk($manager, $chunkX, $chunkZ); $chunk = $manager->getChunk($chunkX, $chunkZ); if($chunk === null){ throw new AssumptionFailedError("We just set this chunk, so it must exist"); } } return $chunk; } /** * @param Chunk[]|null[] $adjacentChunks * @phpstan-param array $adjacentChunks * * @return Chunk[]|Chunk[][] * @phpstan-return array{Chunk, array} */ public static function populateChunkWithAdjacents(int $minY, int $maxY, Generator $generator, int $chunkX, int $chunkZ, ?Chunk $centerChunk, array $adjacentChunks) : array{ $manager = new SimpleChunkManager($minY, $maxY); self::setOrGenerateChunk($manager, $generator, $chunkX, $chunkZ, $centerChunk); $resultChunks = []; //this is just to keep phpstan's type inference happy foreach($adjacentChunks as $relativeChunkHash => $c){ World::getXZ($relativeChunkHash, $relativeX, $relativeZ); $resultChunks[$relativeChunkHash] = self::setOrGenerateChunk($manager, $generator, $chunkX + $relativeX, $chunkZ + $relativeZ, $c); } $adjacentChunks = $resultChunks; $generator->populateChunk($manager, $chunkX, $chunkZ); $centerChunk = $manager->getChunk($chunkX, $chunkZ); if($centerChunk === null){ throw new AssumptionFailedError("We just generated this chunk, so it must exist"); } $centerChunk->setPopulated(); return [$centerChunk, $adjacentChunks]; } }