verify pass 2: resolve markers via ViaBackwards/ViaRewind/ViaLegacy

Closed most remaining UNCONFIRMED items + caught corrections: 1.7 data[]=proto5,
1.8 multi-block nibble order (z/x), stance y+1.62, 1.15 wolf idx18=begging,
1.18 below-zero sections NOT stripped (claim was wrong), CONTAINER_SLOT_STATE
1.20.3, + pinned first-appeared versions (report details/server links=1.21,
fluidCount=26.1, block-state id14=1.19.4, itemCount VarInt=1.20.5).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
claude-timemachine
2026-06-19 19:13:19 +02:00
parent e4ab541200
commit 02a249a379
10 changed files with 42 additions and 62 deletions
+1 -1
View File
@@ -343,7 +343,7 @@ Minecraft-data confirms: the clientbound packet list in `data/pc/1.18/protocol.j
A proxy bridging 1.17.1 clients to a 1.18 server (or vice-versa) faces the most expensive chunk translation in the 1.17/1.18 era:
1. **Section count change**: must expand/shrink the section array from 16 to 24 (or back). For 1.17.1 clients receiving a 1.18 chunk, the 8 extra sections (Y = 64 to 1) are simply not representable — ViaVersion does not send those sections to old clients; they appear as void. <!-- UNCONFIRMED: the v1_17_1to1_18 ViaVersion package translates FROM a 1.17.1 server TO a 1.18 client (reads ChunkType1_17, writes ChunkType1_18); the reverse direction (1.18 server → 1.17.1 client) is not covered by this package's WorldPacketRewriter1_18. The below-zero section stripping behaviour for a 1.17.1 client on a 1.18 server cannot be confirmed from the available ViaVersion source. -->
1. **Section count change**: must expand/shrink the section array from 16 to 24 (or back). For 1.17.1 clients receiving a 1.18 chunk, ViaBackwards **does not strip** the 8 below-zero sections — it passes all 24 sections through to the 1.17.1 client using `ChunkType1_17(tracker.currentWorldSectionHeight())` where the tracker reflects the 1.18 world height (24 sections). The 1.17.1 client can accept extended-height chunks because the 1.17 chunk format already used a variable-length bitmask. The `BlockItemPacketRewriter1_18.java:158209` (ViaBackwards `Protocol1_18To1_17_1`) reads the 1.18 chunk with `ChunkType1_18`, rebuilds the section array and bitmask (null sections replaced for non-air blocks, line 177180), then writes with `ChunkType1_17` at the same 24-section height — below-zero sections are included as long as they are non-empty. Source: ViaBackwards `BlockItemPacketRewriter1_18.java:158209`; `ChunkType1_17.java:4246` (parameterised `ySectionCount`).
2. **Biome re-encoding**: The 1.17.1 biome format is a flat `VarInt[]` of 1024 entries (4×4×4 per section × 16 sections). The 1.18 format is per-section paletted containers. ViaVersion's conversion:
- Receiving a 1.17.1 chunk: reads the flat biome array, slices it into 16-entry groups (one per section × 64 biome cells), and creates a `DataPaletteImpl` per section — `WorldPacketRewriter1_18.java:146-155`.