"""The zone grid as the companion mod sees it (datapacks/core/data/cobblesurvival/zones/island.json). zone_at() answers like zone/Zones.kt: a cave biome is its cave zone; otherwise the grid cell's zone. """ import json from pathlib import Path ROOT = Path(__file__).resolve().parent.parent ISLAND = ROOT / "datapacks/core/data/cobblesurvival/zones/island.json" class Grid: def __init__(self, data): self.radius, self.step, self.size = data["radius"], data["step"], data["size"] self.ids = [z["id"] for z in data["zones"]] self.caves = {c["biome"]: c["id"] for c in data["caves"]} self.cells = [value for value, count in data["grid_rle"] for _ in range(count)] if len(self.cells) != self.size * self.size: raise ValueError(f"zone grid has {len(self.cells)} cells, expected {self.size ** 2}") def zone_at(self, x, z, biome=None): if biome in self.caves: return self.caves[biome] col = (x + self.radius + self.step // 2) // self.step row = (z + self.radius + self.step // 2) // self.step if not (0 <= col < self.size and 0 <= row < self.size): return None index = self.cells[row * self.size + col] return self.ids[index] if 0 <= index < len(self.ids) else None def load(path=ISLAND): return Grid(json.loads(Path(path).read_text()))