public static ChunkRenderCache?GenerateCache(ClientWorld world, Vector3Int from, Vector3Int to, int padding) { int startX = from.x - padding >> 4; int startZ = from.z - padding >> 4; int lastX = to.x + padding >> 4; int lastZ = to.z + padding >> 4; var chunks = new Chunk[lastX - startX + 1, lastZ - startZ + 1]; for (int x = startX; x <= lastX; ++x) { for (int z = startZ; z <= lastZ; ++z) { chunks[x - startX, z - startZ] = world.GetChunk(x, z); } } var startPos = from - Vector3Int.one; var endPos = to + Vector3Int.one; if (ContainsGaps(startPos, endPos, startX, startZ, chunks)) { return(null); } return(new ChunkRenderCache(world, startX, startZ, startPos, endPos, chunks)); }