fix: correct bitfield decoder using mask extraction, fix command_node

- Switch bitfield decoder from shift-based to mask-based extraction (var>>pos & mask)
  fixes non-power-of-2 bitfields like 6-bit command_node flags
- Fix MultiTypeFix to handle CaseExprTypeOnlyNumber/OnlyBool variants
- Update minecraft-data command_node bitfield order for all 1.21.8+ versions
  to LSB-first convention (matches reverse encoder/decoder)
- Implement SwitchDecoder for extraNodeData via compareTo visitor
- DeclareCommands now decodes successfully (was EOF)
- Add 6 regression tests (entity_equipment, metadata, recipes, commands)
This commit is contained in:
OpenCode
2026-08-05 22:29:08 +02:00
parent f4c2762881
commit e58499ed09
17 changed files with 8532 additions and 263 deletions
+12 -12
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.12.2/protocol.json (sha256:21c57208db654a5e14a34cb696570080df179c5c642e53b16120399eee9232be)
// version: v0.6.6-0.20260805175346-53d366ae5301+dirty (go1.26.2)
// version: v0.6.6-0.20260805191907-f4c27628815b+dirty (go1.26.2)
package v1_12_2
import (
@@ -432,17 +432,17 @@ func (ret *Position) Decode(r io.ReadSeeker) (err error) {
if err != nil {
return
}
ret.X = int32(PositionPacked << 0 >> 38)
if ret.X >= 1<<25 {
ret.X -= 1 << 26
ret.Z = int32(PositionPacked >> 0 & 67108863)
if ret.Z >= 1<<25 {
ret.Z -= 1 << 26
}
ret.Y = int16(PositionPacked << 26 >> 52)
ret.Y = int16(PositionPacked >> 26 & 4095)
if ret.Y >= 1<<11 {
ret.Y -= 1 << 12
}
ret.Z = int32(PositionPacked << 38 >> 38)
if ret.Z >= 1<<25 {
ret.Z -= 1 << 26
ret.X = int32(PositionPacked >> 38 & 67108863)
if ret.X >= 1<<25 {
ret.X -= 1 << 26
}
return
}
@@ -2810,10 +2810,10 @@ func (ret *PlayToClientPacketAdvancements) Decode(r io.ReadSeeker) (err error) {
if err != nil {
return
}
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.Unused = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked << 0 >> 3
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.Hidden = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked<<29>>31 == 1
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.ShowToast = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked<<30>>31 == 1
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.HasBackgroundTexture = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked<<31>>31 == 1
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.HasBackgroundTexture = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked>>0&1 == 1
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.ShowToast = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked>>1&1 == 1
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.Hidden = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked>>2&1 == 1
PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.Unused = PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataFlagsPacked >> 3 & 536870911
switch PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataPresentValue.Flags.HasBackgroundTexture {
case true:
var PlayToClientPacketAdvancementsAdvancementMappingElementValueDisplayDataBackgroundTexture1Tmp string