RegionIO/internal/world
Master290 e0fdddd887 Write chunk NBT vanilla reads: flat root, byte section Y, four-bit block palettes
Our region files were not Anvil. Three things stood between them and vanilla's
deserializer, and each is enough on its own:

  * everything was nested under a "Level" compound. Chunk data lived there until
    1.18; SerializableChunkData builds a flat root and never looks for the key.
  * a section's Y was an Int. Vanilla writes putByte and reads getByteOr, so
    every section of ours decodes as index 0 and overwrites the one before it.
  * block palettes were packed at ceil(log2(size)) bits. Strategy's tableswitch
    routes bit counts 1 through 4 to the same four-bit configuration, so a
    palette of 2..16 states is four bits wide on disk. Ours were one to three,
    which makes the long array a quarter of the length vanilla computes, and
    SimpleBitStorage rejects the section outright rather than misreading it.

Biome containers were already right: Strategy has no such floor for them, and a
Global configuration above three bits still stores palette indices, just at its
own width. The suspicion that biomes collapsed on save/load was unfounded --
what let it stand is that every round-trip test in this package set blocks and
asserted blocks, so nothing proved biomes survived. They do now, per cell, for
every palette width a section can hold.

Verified against vanilla rather than against our reading of it:
tools/VanillaChunkFormatCheck.java opens a region file we wrote using vanilla's
RegionFile, NbtIo, Strategy and SimpleBitStorage. Sixteen generated chunks pass.
Reverting either the Y type or the palette floor makes it fail with vanilla's
own message -- "Invalid length given for storage, got: 64 but expected: 256" --
so the check can fail, which is the only reason to trust it passing.

Reading a world the official server generated is what the surface-height parity
capture in CLAUDE.md has always needed, and this is half of it.
2026-07-27 03:44:48 +03:00
..
testdata Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
anvil_format_test.go Write chunk NBT vanilla reads: flat root, byte section Y, four-bit block palettes 2026-07-27 03:44:48 +03:00
aquifer_verify_test.go Implement the vanilla Aquifer; stop flooding caves 2026-07-27 02:02:12 +03:00
banding_verify_test.go Restore the subsurface layers: real above_preliminary_surface and surface depth 2026-07-27 02:15:14 +03:00
bench_test.go Initial commit: RegionIO Minecraft server core (26.1.2/protocol 775) 2026-06-24 00:32:51 +03:00
biome_3d_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
biome_bench_test.go 3D per-cell biomes (4x4x4) with surface/underground/cave layers 2026-06-24 01:04:01 +03:00
biome_lookup.go Biome-aware surface rules from the vanilla rule tree 2026-06-24 19:44:07 +03:00
biome_lookup_test.go 3D per-cell biomes (4x4x4) with surface/underground/cave layers 2026-06-24 01:04:01 +03:00
biome_parameters.json Initial commit: RegionIO Minecraft server core (26.1.2/protocol 775) 2026-06-24 00:32:51 +03:00
block_properties.bin Send three real heightmaps instead of one repeated three times 2026-07-27 03:27:09 +03:00
block_properties.go Send three real heightmaps instead of one repeated three times 2026-07-27 03:27:09 +03:00
blocks.json Chunk persistence to Anvil .mca region files 2026-06-25 00:40:14 +03:00
cache.go Fix terrain streaming and surface spawning 2026-07-21 11:11:19 +03:00
cache_light.go Fix terrain streaming and surface spawning 2026-07-21 11:11:19 +03:00
cache_light_reuse_test.go Fix terrain streaming and surface spawning 2026-07-21 11:11:19 +03:00
cache_test.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
cache_tickets.go Implement ticketed chunk lifecycle 2026-07-21 10:04:56 +03:00
cache_tickets_test.go Implement ticketed chunk lifecycle 2026-07-21 10:04:56 +03:00
chunk.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
compress.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
deepslate_verify_test.go Bind the surface rule tree to the world seed 2026-07-27 02:25:09 +03:00
encode.go Write the section fluid count instead of a hardcoded zero 2026-07-27 03:28:49 +03:00
encode_test.go Write the section fluid count instead of a hardcoded zero 2026-07-27 03:28:49 +03:00
entity.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
features.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
golden_test.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
heightmap_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
item_blocks.json Initial commit: RegionIO Minecraft server core (26.1.2/protocol 775) 2026-06-24 00:32:51 +03:00
items.go Initial commit: RegionIO Minecraft server core (26.1.2/protocol 775) 2026-06-24 00:32:51 +03:00
light.go Implement ticketed chunk lifecycle 2026-07-21 10:04:56 +03:00
light_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
regionfile.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
spawn_surface_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
state_names.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
state_names_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
store.go Write chunk NBT vanilla reads: flat root, byte section Y, four-bit block palettes 2026-07-27 03:44:48 +03:00
store_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
surface_verify_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
terrain.go Implement multiplayer persistence and vanilla lighting 2026-07-21 09:21:44 +03:00
terrain_bench_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
terrain_debug_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
vanilla.go Real badlands clay bands and a real biome temperature table 2026-07-27 02:31:10 +03:00
vanilla_bench_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
vanilla_parity_test.go Resolve block names to the default state, not the first one 2026-07-27 03:35:39 +03:00
worldtime_test.go Run the world clock so day and night happen 2026-07-27 02:45:28 +03:00