diff --git a/mc/proto_generated/v1_12_2/proto.go b/mc/proto_generated/v1_12_2/proto.go index 05ff8fe..0b5e2c2 100644 --- a/mc/proto_generated/v1_12_2/proto.go +++ b/mc/proto_generated/v1_12_2/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.12.2/protocol.json (sha256:21c57208db654a5e14a34cb696570080df179c5c642e53b16120399eee9232be) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_12_2 import ( @@ -45,7 +45,7 @@ type EntityMetadata struct { Key uint8 Type int8 } - Value EntityMetadataItem + Value any } } @@ -55,7 +55,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Key uint8 Type int8 } - Value EntityMetadataItem + Value any }) var id uint8 for { @@ -75,7 +75,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Key uint8 Type int8 } - Value EntityMetadataItem + Value any } err = binary.Read(r, binary.BigEndian, &entry.Anon.Key) if err != nil { @@ -85,9 +85,135 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { if err != nil { return } - err = entry.Value.Decode(r) - if err != nil { - return + switch entry.Anon.Type { + case 0: + var EntityMetadataInnerValue0Tmp int8 + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue0Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue0Tmp + case 1: + var EntityMetadataInnerValue1Tmp int32 + EntityMetadataInnerValue1Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue1Tmp + case 10: + var EntityMetadataInnerValue10Tmp int32 + EntityMetadataInnerValue10Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue10Tmp + case 11: + var EntityMetadataInnerValue11Tmp *uuid.UUID + var EntityMetadataInnerValue11TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue11TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue11TmpPresent { + var EntityMetadataInnerValue11TmpPresentValue uuid.UUID + _, err = io.ReadFull(r, EntityMetadataInnerValue11TmpPresentValue[:]) + if err != nil { + return + } + EntityMetadataInnerValue11Tmp = &EntityMetadataInnerValue11TmpPresentValue + } + entry.Value = EntityMetadataInnerValue11Tmp + case 12: + var EntityMetadataInnerValue12Tmp int32 + EntityMetadataInnerValue12Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue12Tmp + case 13: + var EntityMetadataInnerValue13Tmp nbt.Tag + err = EntityMetadataInnerValue13Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue13Tmp + case 2: + var EntityMetadataInnerValue2Tmp float32 + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue2Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue2Tmp + case 3: + var EntityMetadataInnerValue3Tmp string + EntityMetadataInnerValue3Tmp, err = proto_base.DecodeString(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue3Tmp + case 4: + var EntityMetadataInnerValue4Tmp string + EntityMetadataInnerValue4Tmp, err = proto_base.DecodeString(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue4Tmp + case 5: + var EntityMetadataInnerValue5Tmp Slot + err = EntityMetadataInnerValue5Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue5Tmp + case 6: + var EntityMetadataInnerValue6Tmp bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue6Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue6Tmp + case 7: + var EntityMetadataInnerValue7Tmp struct { + Pitch float32 + Yaw float32 + Roll float32 + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue7Tmp.Pitch) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue7Tmp.Yaw) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue7Tmp.Roll) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue7Tmp + case 8: + var EntityMetadataInnerValue8Tmp Position + err = EntityMetadataInnerValue8Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue8Tmp + case 9: + var EntityMetadataInnerValue9Tmp *Position + var EntityMetadataInnerValue9TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue9TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue9TmpPresent { + var EntityMetadataInnerValue9TmpPresentValue Position + err = EntityMetadataInnerValue9TmpPresentValue.Decode(r) + if err != nil { + return + } + EntityMetadataInnerValue9Tmp = &EntityMetadataInnerValue9TmpPresentValue + } + entry.Value = EntityMetadataInnerValue9Tmp } ret.Val[id] = entry } @@ -103,10 +229,175 @@ func (ret *EntityMetadata) Encode(w io.Writer) (err error) { if err != nil { return } - EntityMetadataValueEncTmp := v.Value - err = EntityMetadataValueEncTmp.Encode(w) - if err != nil { - return + switch v.Anon.Type { + case 0: + EntityMetadataValue, ok := v.Value.(int8) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 1: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 10: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 11: + EntityMetadataValue, ok := v.Value.(*uuid.UUID) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + _, err = w.Write((*EntityMetadataValue)[:]) + if err != nil { + return + } + } + case 12: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 13: + EntityMetadataValue, ok := v.Value.(nbt.Tag) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 2: + EntityMetadataValue, ok := v.Value.(float32) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 3: + EntityMetadataValue, ok := v.Value.(string) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeString(w, EntityMetadataValue) + if err != nil { + return + } + case 4: + EntityMetadataValue, ok := v.Value.(string) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeString(w, EntityMetadataValue) + if err != nil { + return + } + case 5: + EntityMetadataValue, ok := v.Value.(Slot) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 6: + EntityMetadataValue, ok := v.Value.(bool) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 7: + EntityMetadataValue, ok := v.Value.(struct { + Pitch float32 + Yaw float32 + Roll float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Pitch) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Yaw) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Roll) + if err != nil { + return + } + case 8: + EntityMetadataValue, ok := v.Value.(Position) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 9: + EntityMetadataValue, ok := v.Value.(*Position) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + EntityMetadataValueEncTmp := *EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + } } } err = binary.Write(w, binary.BigEndian, uint8(255)) @@ -8288,11 +8579,182 @@ type PlayToClientPacketWorldParticles struct { } func (ret *PlayToClientPacketWorldParticles) Decode(r io.ReadSeeker) (err error) { - err = proto_base.ToDoError + err = binary.Read(r, binary.BigEndian, &ret.ParticleId) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.LongDistance) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.X) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.Y) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.Z) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.OffsetX) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.OffsetY) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.OffsetZ) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.ParticleData) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.Particles) + if err != nil { + return + } + switch ret.ParticleId { + case 36: + var PlayToClientPacketWorldParticlesData36Tmp []int32 + var lPlayToClientPacketWorldParticlesData36Tmp int32 + lPlayToClientPacketWorldParticlesData36Tmp = 2 + PlayToClientPacketWorldParticlesData36Tmp = []int32{} + for range lPlayToClientPacketWorldParticlesData36Tmp { + var PlayToClientPacketWorldParticlesData36TmpElement int32 + PlayToClientPacketWorldParticlesData36TmpElement, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + PlayToClientPacketWorldParticlesData36Tmp = append(PlayToClientPacketWorldParticlesData36Tmp, PlayToClientPacketWorldParticlesData36TmpElement) + } + ret.Data = PlayToClientPacketWorldParticlesData36Tmp + case 37: + var PlayToClientPacketWorldParticlesData37Tmp []int32 + var lPlayToClientPacketWorldParticlesData37Tmp int32 + lPlayToClientPacketWorldParticlesData37Tmp = 1 + PlayToClientPacketWorldParticlesData37Tmp = []int32{} + for range lPlayToClientPacketWorldParticlesData37Tmp { + var PlayToClientPacketWorldParticlesData37TmpElement int32 + PlayToClientPacketWorldParticlesData37TmpElement, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + PlayToClientPacketWorldParticlesData37Tmp = append(PlayToClientPacketWorldParticlesData37Tmp, PlayToClientPacketWorldParticlesData37TmpElement) + } + ret.Data = PlayToClientPacketWorldParticlesData37Tmp + case 38: + var PlayToClientPacketWorldParticlesData38Tmp []int32 + var lPlayToClientPacketWorldParticlesData38Tmp int32 + lPlayToClientPacketWorldParticlesData38Tmp = 1 + PlayToClientPacketWorldParticlesData38Tmp = []int32{} + for range lPlayToClientPacketWorldParticlesData38Tmp { + var PlayToClientPacketWorldParticlesData38TmpElement int32 + PlayToClientPacketWorldParticlesData38TmpElement, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + PlayToClientPacketWorldParticlesData38Tmp = append(PlayToClientPacketWorldParticlesData38Tmp, PlayToClientPacketWorldParticlesData38TmpElement) + } + ret.Data = PlayToClientPacketWorldParticlesData38Tmp + default: + var PlayToClientPacketWorldParticlesDataTmp struct { + } + ret.Data = PlayToClientPacketWorldParticlesDataTmp + } return } func (ret *PlayToClientPacketWorldParticles) Encode(w io.Writer) (err error) { - err = proto_base.ToDoError + err = binary.Write(w, binary.BigEndian, ret.ParticleId) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.LongDistance) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.X) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.Y) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.Z) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.OffsetX) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.OffsetY) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.OffsetZ) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.ParticleData) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.Particles) + if err != nil { + return + } + switch ret.ParticleId { + case 36: + PlayToClientPacketWorldParticlesData, ok := ret.Data.([]int32) + if !ok { + err = proto_base.BadTypeError + return + } + for iPlayToClientPacketWorldParticlesData := range len(PlayToClientPacketWorldParticlesData) { + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData[iPlayToClientPacketWorldParticlesData]) + if err != nil { + return + } + } + case 37: + PlayToClientPacketWorldParticlesData, ok := ret.Data.([]int32) + if !ok { + err = proto_base.BadTypeError + return + } + for iPlayToClientPacketWorldParticlesData := range len(PlayToClientPacketWorldParticlesData) { + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData[iPlayToClientPacketWorldParticlesData]) + if err != nil { + return + } + } + case 38: + PlayToClientPacketWorldParticlesData, ok := ret.Data.([]int32) + if !ok { + err = proto_base.BadTypeError + return + } + for iPlayToClientPacketWorldParticlesData := range len(PlayToClientPacketWorldParticlesData) { + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData[iPlayToClientPacketWorldParticlesData]) + if err != nil { + return + } + } + default: + _, ok := ret.Data.(struct { + }) + if !ok { + err = proto_base.BadTypeError + return + } + } return } diff --git a/mc/proto_generated/v1_14_4/proto.go b/mc/proto_generated/v1_14_4/proto.go index 70ce850..5e2170f 100644 --- a/mc/proto_generated/v1_14_4/proto.go +++ b/mc/proto_generated/v1_14_4/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.14.4/protocol.json (sha256:b6edff5abaaf234037b5019024d749e27e746250a23253bb4ad77d8f76e93167) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_14_4 import ( @@ -141,7 +141,7 @@ type EntityMetadata struct { Key uint8 Type int32 } - Value EntityMetadataItem + Value any } } @@ -151,7 +151,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Key uint8 Type int32 } - Value EntityMetadataItem + Value any }) var id uint8 for { @@ -171,7 +171,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Key uint8 Type int32 } - Value EntityMetadataItem + Value any } err = binary.Read(r, binary.BigEndian, &entry.Anon.Key) if err != nil { @@ -181,9 +181,191 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { if err != nil { return } - err = entry.Value.Decode(r) - if err != nil { - return + switch entry.Anon.Type { + case 0: + var EntityMetadataInnerValue0Tmp int8 + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue0Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue0Tmp + case 1: + var EntityMetadataInnerValue1Tmp int32 + EntityMetadataInnerValue1Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue1Tmp + case 10: + var EntityMetadataInnerValue10Tmp *Position + var EntityMetadataInnerValue10TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue10TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue10TmpPresent { + var EntityMetadataInnerValue10TmpPresentValue Position + err = EntityMetadataInnerValue10TmpPresentValue.Decode(r) + if err != nil { + return + } + EntityMetadataInnerValue10Tmp = &EntityMetadataInnerValue10TmpPresentValue + } + entry.Value = EntityMetadataInnerValue10Tmp + case 11: + var EntityMetadataInnerValue11Tmp int32 + EntityMetadataInnerValue11Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue11Tmp + case 12: + var EntityMetadataInnerValue12Tmp *uuid.UUID + var EntityMetadataInnerValue12TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue12TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue12TmpPresent { + var EntityMetadataInnerValue12TmpPresentValue uuid.UUID + _, err = io.ReadFull(r, EntityMetadataInnerValue12TmpPresentValue[:]) + if err != nil { + return + } + EntityMetadataInnerValue12Tmp = &EntityMetadataInnerValue12TmpPresentValue + } + entry.Value = EntityMetadataInnerValue12Tmp + case 13: + var EntityMetadataInnerValue13Tmp int32 + EntityMetadataInnerValue13Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue13Tmp + case 14: + var EntityMetadataInnerValue14Tmp nbt.Tag + err = EntityMetadataInnerValue14Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue14Tmp + case 15: + var EntityMetadataInnerValue15Tmp Particle + err = EntityMetadataInnerValue15Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue15Tmp + case 16: + var EntityMetadataInnerValue16Tmp struct { + VillagerType int32 + VillagerProfession int32 + Level int32 + } + EntityMetadataInnerValue16Tmp.VillagerType, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + EntityMetadataInnerValue16Tmp.VillagerProfession, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + EntityMetadataInnerValue16Tmp.Level, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue16Tmp + case 17: + var EntityMetadataInnerValue17Tmp Optvarint + err = EntityMetadataInnerValue17Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue17Tmp + case 18: + var EntityMetadataInnerValue18Tmp int32 + EntityMetadataInnerValue18Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue18Tmp + case 2: + var EntityMetadataInnerValue2Tmp float32 + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue2Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue2Tmp + case 3: + var EntityMetadataInnerValue3Tmp string + EntityMetadataInnerValue3Tmp, err = proto_base.DecodeString(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue3Tmp + case 4: + var EntityMetadataInnerValue4Tmp string + EntityMetadataInnerValue4Tmp, err = proto_base.DecodeString(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue4Tmp + case 5: + var EntityMetadataInnerValue5Tmp *string + var EntityMetadataInnerValue5TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue5TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue5TmpPresent { + var EntityMetadataInnerValue5TmpPresentValue string + EntityMetadataInnerValue5TmpPresentValue, err = proto_base.DecodeString(r) + if err != nil { + return + } + EntityMetadataInnerValue5Tmp = &EntityMetadataInnerValue5TmpPresentValue + } + entry.Value = EntityMetadataInnerValue5Tmp + case 6: + var EntityMetadataInnerValue6Tmp Slot + err = EntityMetadataInnerValue6Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue6Tmp + case 7: + var EntityMetadataInnerValue7Tmp bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue7Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue7Tmp + case 8: + var EntityMetadataInnerValue8Tmp struct { + Pitch float32 + Yaw float32 + Roll float32 + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue8Tmp.Pitch) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue8Tmp.Yaw) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue8Tmp.Roll) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue8Tmp + case 9: + var EntityMetadataInnerValue9Tmp Position + err = EntityMetadataInnerValue9Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue9Tmp } ret.Val[id] = entry } @@ -199,10 +381,245 @@ func (ret *EntityMetadata) Encode(w io.Writer) (err error) { if err != nil { return } - EntityMetadataValueEncTmp := v.Value - err = EntityMetadataValueEncTmp.Encode(w) - if err != nil { - return + switch v.Anon.Type { + case 0: + EntityMetadataValue, ok := v.Value.(int8) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 1: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 10: + EntityMetadataValue, ok := v.Value.(*Position) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + EntityMetadataValueEncTmp := *EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + } + case 11: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 12: + EntityMetadataValue, ok := v.Value.(*uuid.UUID) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + _, err = w.Write((*EntityMetadataValue)[:]) + if err != nil { + return + } + } + case 13: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 14: + EntityMetadataValue, ok := v.Value.(nbt.Tag) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 15: + EntityMetadataValue, ok := v.Value.(Particle) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 16: + EntityMetadataValue, ok := v.Value.(struct { + VillagerType int32 + VillagerProfession int32 + Level int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue.VillagerType) + if err != nil { + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue.VillagerProfession) + if err != nil { + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue.Level) + if err != nil { + return + } + case 17: + EntityMetadataValue, ok := v.Value.(Optvarint) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 18: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 2: + EntityMetadataValue, ok := v.Value.(float32) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 3: + EntityMetadataValue, ok := v.Value.(string) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeString(w, EntityMetadataValue) + if err != nil { + return + } + case 4: + EntityMetadataValue, ok := v.Value.(string) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeString(w, EntityMetadataValue) + if err != nil { + return + } + case 5: + EntityMetadataValue, ok := v.Value.(*string) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + err = proto_base.EncodeString(w, *EntityMetadataValue) + if err != nil { + return + } + } + case 6: + EntityMetadataValue, ok := v.Value.(Slot) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 7: + EntityMetadataValue, ok := v.Value.(bool) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 8: + EntityMetadataValue, ok := v.Value.(struct { + Pitch float32 + Yaw float32 + Roll float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Pitch) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Yaw) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Roll) + if err != nil { + return + } + case 9: + EntityMetadataValue, ok := v.Value.(Position) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } } } err = binary.Write(w, binary.BigEndian, uint8(255)) @@ -339,7 +756,7 @@ func (ret *Optvarint) Encode(w io.Writer) (err error) { type Particle struct { ParticleId int32 - Data ParticleData + Data any } func (ret *Particle) Decode(r io.ReadSeeker) (err error) { @@ -347,9 +764,62 @@ func (ret *Particle) Decode(r io.ReadSeeker) (err error) { if err != nil { return } - err = ret.Data.Decode(r) - if err != nil { - return + switch ret.ParticleId { + case 14: + var ParticleData14Tmp struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Red) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Green) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Blue) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Scale) + if err != nil { + return + } + ret.Data = ParticleData14Tmp + case 23: + var ParticleData23Tmp struct { + BlockState int32 + } + ParticleData23Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = ParticleData23Tmp + case 3: + var ParticleData3Tmp struct { + BlockState int32 + } + ParticleData3Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = ParticleData3Tmp + case 32: + var ParticleData32Tmp struct { + Item Slot + } + err = ParticleData32Tmp.Item.Decode(r) + if err != nil { + return + } + ret.Data = ParticleData32Tmp + default: + var ParticleDataTmp struct { + } + ret.Data = ParticleDataTmp } return } @@ -358,10 +828,78 @@ func (ret *Particle) Encode(w io.Writer) (err error) { if err != nil { return } - ParticleDataEncTmp := ret.Data - err = ParticleDataEncTmp.Encode(w) - if err != nil { - return + switch ret.ParticleId { + case 14: + ParticleData, ok := ret.Data.(struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Red) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Green) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Blue) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Scale) + if err != nil { + return + } + case 23: + ParticleData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, ParticleData.BlockState) + if err != nil { + return + } + case 3: + ParticleData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, ParticleData.BlockState) + if err != nil { + return + } + case 32: + ParticleData, ok := ret.Data.(struct { + Item Slot + }) + if !ok { + err = proto_base.BadTypeError + return + } + ParticleDataItemEncTmp := ParticleData.Item + err = ParticleDataItemEncTmp.Encode(w) + if err != nil { + return + } + default: + _, ok := ret.Data.(struct { + }) + if !ok { + err = proto_base.BadTypeError + return + } } return } @@ -10329,7 +10867,7 @@ type PlayToClientPacketWorldParticles struct { OffsetZ float32 ParticleData float32 Particles int32 - Data ParticleData + Data any } func (ret *PlayToClientPacketWorldParticles) Decode(r io.ReadSeeker) (err error) { @@ -10373,9 +10911,62 @@ func (ret *PlayToClientPacketWorldParticles) Decode(r io.ReadSeeker) (err error) if err != nil { return } - err = ret.Data.Decode(r) - if err != nil { - return + switch ret.ParticleId { + case 14: + var PlayToClientPacketWorldParticlesData14Tmp struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Red) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Green) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Blue) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Scale) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData14Tmp + case 23: + var PlayToClientPacketWorldParticlesData23Tmp struct { + BlockState int32 + } + PlayToClientPacketWorldParticlesData23Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData23Tmp + case 3: + var PlayToClientPacketWorldParticlesData3Tmp struct { + BlockState int32 + } + PlayToClientPacketWorldParticlesData3Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData3Tmp + case 32: + var PlayToClientPacketWorldParticlesData32Tmp struct { + Item Slot + } + err = PlayToClientPacketWorldParticlesData32Tmp.Item.Decode(r) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData32Tmp + default: + var PlayToClientPacketWorldParticlesDataTmp struct { + } + ret.Data = PlayToClientPacketWorldParticlesDataTmp } return } @@ -10420,10 +11011,78 @@ func (ret *PlayToClientPacketWorldParticles) Encode(w io.Writer) (err error) { if err != nil { return } - PlayToClientPacketWorldParticlesDataEncTmp := ret.Data - err = PlayToClientPacketWorldParticlesDataEncTmp.Encode(w) - if err != nil { - return + switch ret.ParticleId { + case 14: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Red) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Green) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Blue) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Scale) + if err != nil { + return + } + case 23: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData.BlockState) + if err != nil { + return + } + case 3: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData.BlockState) + if err != nil { + return + } + case 32: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + Item Slot + }) + if !ok { + err = proto_base.BadTypeError + return + } + PlayToClientPacketWorldParticlesDataItemEncTmp := PlayToClientPacketWorldParticlesData.Item + err = PlayToClientPacketWorldParticlesDataItemEncTmp.Encode(w) + if err != nil { + return + } + default: + _, ok := ret.Data.(struct { + }) + if !ok { + err = proto_base.BadTypeError + return + } } return } diff --git a/mc/proto_generated/v1_16_5/proto.go b/mc/proto_generated/v1_16_5/proto.go index 0fd355c..3a18265 100644 --- a/mc/proto_generated/v1_16_5/proto.go +++ b/mc/proto_generated/v1_16_5/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.16.2/protocol.json (sha256:d96a3c5a7a7ddf2105e23990c2471b3aeafe4a6975e0c9d7d7943b599af9dfb3) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_16_5 import ( @@ -141,7 +141,7 @@ type EntityMetadata struct { Key uint8 Type int32 } - Value EntityMetadataItem + Value any } } @@ -151,7 +151,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Key uint8 Type int32 } - Value EntityMetadataItem + Value any }) var id uint8 for { @@ -171,7 +171,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Key uint8 Type int32 } - Value EntityMetadataItem + Value any } err = binary.Read(r, binary.BigEndian, &entry.Anon.Key) if err != nil { @@ -181,9 +181,191 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { if err != nil { return } - err = entry.Value.Decode(r) - if err != nil { - return + switch entry.Anon.Type { + case 0: + var EntityMetadataInnerValue0Tmp int8 + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue0Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue0Tmp + case 1: + var EntityMetadataInnerValue1Tmp int32 + EntityMetadataInnerValue1Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue1Tmp + case 10: + var EntityMetadataInnerValue10Tmp *Position + var EntityMetadataInnerValue10TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue10TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue10TmpPresent { + var EntityMetadataInnerValue10TmpPresentValue Position + err = EntityMetadataInnerValue10TmpPresentValue.Decode(r) + if err != nil { + return + } + EntityMetadataInnerValue10Tmp = &EntityMetadataInnerValue10TmpPresentValue + } + entry.Value = EntityMetadataInnerValue10Tmp + case 11: + var EntityMetadataInnerValue11Tmp int32 + EntityMetadataInnerValue11Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue11Tmp + case 12: + var EntityMetadataInnerValue12Tmp *uuid.UUID + var EntityMetadataInnerValue12TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue12TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue12TmpPresent { + var EntityMetadataInnerValue12TmpPresentValue uuid.UUID + _, err = io.ReadFull(r, EntityMetadataInnerValue12TmpPresentValue[:]) + if err != nil { + return + } + EntityMetadataInnerValue12Tmp = &EntityMetadataInnerValue12TmpPresentValue + } + entry.Value = EntityMetadataInnerValue12Tmp + case 13: + var EntityMetadataInnerValue13Tmp int32 + EntityMetadataInnerValue13Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue13Tmp + case 14: + var EntityMetadataInnerValue14Tmp nbt.Tag + err = EntityMetadataInnerValue14Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue14Tmp + case 15: + var EntityMetadataInnerValue15Tmp Particle + err = EntityMetadataInnerValue15Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue15Tmp + case 16: + var EntityMetadataInnerValue16Tmp struct { + VillagerType int32 + VillagerProfession int32 + Level int32 + } + EntityMetadataInnerValue16Tmp.VillagerType, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + EntityMetadataInnerValue16Tmp.VillagerProfession, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + EntityMetadataInnerValue16Tmp.Level, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue16Tmp + case 17: + var EntityMetadataInnerValue17Tmp Optvarint + err = EntityMetadataInnerValue17Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue17Tmp + case 18: + var EntityMetadataInnerValue18Tmp int32 + EntityMetadataInnerValue18Tmp, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue18Tmp + case 2: + var EntityMetadataInnerValue2Tmp float32 + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue2Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue2Tmp + case 3: + var EntityMetadataInnerValue3Tmp string + EntityMetadataInnerValue3Tmp, err = proto_base.DecodeString(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue3Tmp + case 4: + var EntityMetadataInnerValue4Tmp string + EntityMetadataInnerValue4Tmp, err = proto_base.DecodeString(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue4Tmp + case 5: + var EntityMetadataInnerValue5Tmp *string + var EntityMetadataInnerValue5TmpPresent bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue5TmpPresent) + if err != nil { + return + } + if EntityMetadataInnerValue5TmpPresent { + var EntityMetadataInnerValue5TmpPresentValue string + EntityMetadataInnerValue5TmpPresentValue, err = proto_base.DecodeString(r) + if err != nil { + return + } + EntityMetadataInnerValue5Tmp = &EntityMetadataInnerValue5TmpPresentValue + } + entry.Value = EntityMetadataInnerValue5Tmp + case 6: + var EntityMetadataInnerValue6Tmp Slot + err = EntityMetadataInnerValue6Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue6Tmp + case 7: + var EntityMetadataInnerValue7Tmp bool + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue7Tmp) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue7Tmp + case 8: + var EntityMetadataInnerValue8Tmp struct { + Pitch float32 + Yaw float32 + Roll float32 + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue8Tmp.Pitch) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue8Tmp.Yaw) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerValue8Tmp.Roll) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue8Tmp + case 9: + var EntityMetadataInnerValue9Tmp Position + err = EntityMetadataInnerValue9Tmp.Decode(r) + if err != nil { + return + } + entry.Value = EntityMetadataInnerValue9Tmp } ret.Val[id] = entry } @@ -199,10 +381,245 @@ func (ret *EntityMetadata) Encode(w io.Writer) (err error) { if err != nil { return } - EntityMetadataValueEncTmp := v.Value - err = EntityMetadataValueEncTmp.Encode(w) - if err != nil { - return + switch v.Anon.Type { + case 0: + EntityMetadataValue, ok := v.Value.(int8) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 1: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 10: + EntityMetadataValue, ok := v.Value.(*Position) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + EntityMetadataValueEncTmp := *EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + } + case 11: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 12: + EntityMetadataValue, ok := v.Value.(*uuid.UUID) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + _, err = w.Write((*EntityMetadataValue)[:]) + if err != nil { + return + } + } + case 13: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 14: + EntityMetadataValue, ok := v.Value.(nbt.Tag) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 15: + EntityMetadataValue, ok := v.Value.(Particle) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 16: + EntityMetadataValue, ok := v.Value.(struct { + VillagerType int32 + VillagerProfession int32 + Level int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue.VillagerType) + if err != nil { + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue.VillagerProfession) + if err != nil { + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue.Level) + if err != nil { + return + } + case 17: + EntityMetadataValue, ok := v.Value.(Optvarint) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 18: + EntityMetadataValue, ok := v.Value.(int32) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, EntityMetadataValue) + if err != nil { + return + } + case 2: + EntityMetadataValue, ok := v.Value.(float32) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 3: + EntityMetadataValue, ok := v.Value.(string) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeString(w, EntityMetadataValue) + if err != nil { + return + } + case 4: + EntityMetadataValue, ok := v.Value.(string) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeString(w, EntityMetadataValue) + if err != nil { + return + } + case 5: + EntityMetadataValue, ok := v.Value.(*string) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue != nil) + if err != nil { + return + } + if EntityMetadataValue != nil { + err = proto_base.EncodeString(w, *EntityMetadataValue) + if err != nil { + return + } + } + case 6: + EntityMetadataValue, ok := v.Value.(Slot) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } + case 7: + EntityMetadataValue, ok := v.Value.(bool) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue) + if err != nil { + return + } + case 8: + EntityMetadataValue, ok := v.Value.(struct { + Pitch float32 + Yaw float32 + Roll float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Pitch) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Yaw) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, EntityMetadataValue.Roll) + if err != nil { + return + } + case 9: + EntityMetadataValue, ok := v.Value.(Position) + if !ok { + err = proto_base.BadTypeError + return + } + EntityMetadataValueEncTmp := EntityMetadataValue + err = EntityMetadataValueEncTmp.Encode(w) + if err != nil { + return + } } } err = binary.Write(w, binary.BigEndian, uint8(255)) @@ -339,7 +756,7 @@ func (ret *Optvarint) Encode(w io.Writer) (err error) { type Particle struct { ParticleId int32 - Data ParticleData + Data any } func (ret *Particle) Decode(r io.ReadSeeker) (err error) { @@ -347,9 +764,62 @@ func (ret *Particle) Decode(r io.ReadSeeker) (err error) { if err != nil { return } - err = ret.Data.Decode(r) - if err != nil { - return + switch ret.ParticleId { + case 14: + var ParticleData14Tmp struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Red) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Green) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Blue) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ParticleData14Tmp.Scale) + if err != nil { + return + } + ret.Data = ParticleData14Tmp + case 23: + var ParticleData23Tmp struct { + BlockState int32 + } + ParticleData23Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = ParticleData23Tmp + case 3: + var ParticleData3Tmp struct { + BlockState int32 + } + ParticleData3Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = ParticleData3Tmp + case 34: + var ParticleData34Tmp struct { + Item Slot + } + err = ParticleData34Tmp.Item.Decode(r) + if err != nil { + return + } + ret.Data = ParticleData34Tmp + default: + var ParticleDataTmp struct { + } + ret.Data = ParticleDataTmp } return } @@ -358,10 +828,78 @@ func (ret *Particle) Encode(w io.Writer) (err error) { if err != nil { return } - ParticleDataEncTmp := ret.Data - err = ParticleDataEncTmp.Encode(w) - if err != nil { - return + switch ret.ParticleId { + case 14: + ParticleData, ok := ret.Data.(struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Red) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Green) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Blue) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ParticleData.Scale) + if err != nil { + return + } + case 23: + ParticleData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, ParticleData.BlockState) + if err != nil { + return + } + case 3: + ParticleData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, ParticleData.BlockState) + if err != nil { + return + } + case 34: + ParticleData, ok := ret.Data.(struct { + Item Slot + }) + if !ok { + err = proto_base.BadTypeError + return + } + ParticleDataItemEncTmp := ParticleData.Item + err = ParticleDataItemEncTmp.Encode(w) + if err != nil { + return + } + default: + _, ok := ret.Data.(struct { + }) + if !ok { + err = proto_base.BadTypeError + return + } } return } @@ -10484,7 +11022,7 @@ type PlayToClientPacketWorldParticles struct { OffsetZ float32 ParticleData float32 Particles int32 - Data ParticleData + Data any } func (ret *PlayToClientPacketWorldParticles) Decode(r io.ReadSeeker) (err error) { @@ -10528,9 +11066,62 @@ func (ret *PlayToClientPacketWorldParticles) Decode(r io.ReadSeeker) (err error) if err != nil { return } - err = ret.Data.Decode(r) - if err != nil { - return + switch ret.ParticleId { + case 14: + var PlayToClientPacketWorldParticlesData14Tmp struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Red) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Green) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Blue) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &PlayToClientPacketWorldParticlesData14Tmp.Scale) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData14Tmp + case 23: + var PlayToClientPacketWorldParticlesData23Tmp struct { + BlockState int32 + } + PlayToClientPacketWorldParticlesData23Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData23Tmp + case 3: + var PlayToClientPacketWorldParticlesData3Tmp struct { + BlockState int32 + } + PlayToClientPacketWorldParticlesData3Tmp.BlockState, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData3Tmp + case 34: + var PlayToClientPacketWorldParticlesData34Tmp struct { + Item Slot + } + err = PlayToClientPacketWorldParticlesData34Tmp.Item.Decode(r) + if err != nil { + return + } + ret.Data = PlayToClientPacketWorldParticlesData34Tmp + default: + var PlayToClientPacketWorldParticlesDataTmp struct { + } + ret.Data = PlayToClientPacketWorldParticlesDataTmp } return } @@ -10575,10 +11166,78 @@ func (ret *PlayToClientPacketWorldParticles) Encode(w io.Writer) (err error) { if err != nil { return } - PlayToClientPacketWorldParticlesDataEncTmp := ret.Data - err = PlayToClientPacketWorldParticlesDataEncTmp.Encode(w) - if err != nil { - return + switch ret.ParticleId { + case 14: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + Red float32 + Green float32 + Blue float32 + Scale float32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Red) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Green) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Blue) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, PlayToClientPacketWorldParticlesData.Scale) + if err != nil { + return + } + case 23: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData.BlockState) + if err != nil { + return + } + case 3: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + BlockState int32 + }) + if !ok { + err = proto_base.BadTypeError + return + } + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData.BlockState) + if err != nil { + return + } + case 34: + PlayToClientPacketWorldParticlesData, ok := ret.Data.(struct { + Item Slot + }) + if !ok { + err = proto_base.BadTypeError + return + } + PlayToClientPacketWorldParticlesDataItemEncTmp := PlayToClientPacketWorldParticlesData.Item + err = PlayToClientPacketWorldParticlesDataItemEncTmp.Encode(w) + if err != nil { + return + } + default: + _, ok := ret.Data.(struct { + }) + if !ok { + err = proto_base.BadTypeError + return + } } return } diff --git a/mc/proto_generated/v1_21_11/proto.go b/mc/proto_generated/v1_21_11/proto.go index ec6529d..c660ff1 100644 --- a/mc/proto_generated/v1_21_11/proto.go +++ b/mc/proto_generated/v1_21_11/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.21.11/protocol.json (sha256:97d2726cce3a39cc967a954f27f4ebf029ec3f0f655bb21942aab8745d13cdab) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_21_11 import ( @@ -22085,7 +22085,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Decode(r io.ReadSeeker) (err error if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": var PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp float32 err = binary.Read(r, binary.BigEndian, &PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp) @@ -22192,7 +22192,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Encode(w io.Writer) (err error) { if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": PlayToClientPacketTrackedWaypointWaypointData, ok := ret.Waypoint.Data.(float32) if !ok { diff --git a/mc/proto_generated/v1_21_8/proto.go b/mc/proto_generated/v1_21_8/proto.go index ffaec09..9d5f452 100644 --- a/mc/proto_generated/v1_21_8/proto.go +++ b/mc/proto_generated/v1_21_8/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.21.8/protocol.json (sha256:930fbb4c69fd2ecadddcee3c38d3f02908adc23b54b707cb21112e7ab1e9dba1) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_21_8 import ( @@ -20500,7 +20500,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Decode(r io.ReadSeeker) (err error if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": var PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp float32 err = binary.Read(r, binary.BigEndian, &PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp) @@ -20607,7 +20607,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Encode(w io.Writer) (err error) { if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": PlayToClientPacketTrackedWaypointWaypointData, ok := ret.Waypoint.Data.(float32) if !ok { diff --git a/mc/proto_generated/v1_21_9/proto.go b/mc/proto_generated/v1_21_9/proto.go index e3bf24b..001aca6 100644 --- a/mc/proto_generated/v1_21_9/proto.go +++ b/mc/proto_generated/v1_21_9/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.21.9/protocol.json (sha256:9861cee397931c678c3b1837dcdf82e3fc885442c6bd0e4a60522fbf26653e59) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_21_9 import ( @@ -21908,7 +21908,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Decode(r io.ReadSeeker) (err error if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": var PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp float32 err = binary.Read(r, binary.BigEndian, &PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp) @@ -22015,7 +22015,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Encode(w io.Writer) (err error) { if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": PlayToClientPacketTrackedWaypointWaypointData, ok := ret.Waypoint.Data.(float32) if !ok { diff --git a/mc/proto_generated/v1_8/proto.go b/mc/proto_generated/v1_8/proto.go index 547edc4..3c78d80 100644 --- a/mc/proto_generated/v1_8/proto.go +++ b/mc/proto_generated/v1_8/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/1.8/protocol.json (sha256:79fe774bfc255dd281899c004fbb9c7adc40fb107de9353da1dd0371ea4b53af) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v1_8 import ( @@ -45,7 +45,7 @@ type EntityMetadata struct { Type uint8 Key uint8 } - Value EntityMetadataItem + Value any } } @@ -55,7 +55,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Type uint8 Key uint8 } - Value EntityMetadataItem + Value any }) var id uint8 for { @@ -75,7 +75,7 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { Type uint8 Key uint8 } - Value EntityMetadataItem + Value any } var EntityMetadataInnerAnonPacked uint8 err = binary.Read(r, binary.BigEndian, &EntityMetadataInnerAnonPacked) @@ -84,10 +84,6 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { } entry.Anon.Type = EntityMetadataInnerAnonPacked << 0 >> 5 entry.Anon.Key = EntityMetadataInnerAnonPacked << 3 >> 3 - err = entry.Value.Decode(r) - if err != nil { - return - } ret.Val[id] = entry } return @@ -101,11 +97,6 @@ func (ret *EntityMetadata) Encode(w io.Writer) (err error) { if err != nil { return } - EntityMetadataValueEncTmp := v.Value - err = EntityMetadataValueEncTmp.Encode(w) - if err != nil { - return - } } err = binary.Write(w, binary.BigEndian, uint8(127)) if err != nil { @@ -7105,11 +7096,182 @@ type PlayToClientPacketWorldParticles struct { } func (ret *PlayToClientPacketWorldParticles) Decode(r io.ReadSeeker) (err error) { - err = proto_base.ToDoError + err = binary.Read(r, binary.BigEndian, &ret.ParticleId) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.LongDistance) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.X) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.Y) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.Z) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.OffsetX) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.OffsetY) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.OffsetZ) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.ParticleData) + if err != nil { + return + } + err = binary.Read(r, binary.BigEndian, &ret.Particles) + if err != nil { + return + } + switch ret.ParticleId { + case 36: + var PlayToClientPacketWorldParticlesData36Tmp []int32 + var lPlayToClientPacketWorldParticlesData36Tmp int32 + lPlayToClientPacketWorldParticlesData36Tmp = 2 + PlayToClientPacketWorldParticlesData36Tmp = []int32{} + for range lPlayToClientPacketWorldParticlesData36Tmp { + var PlayToClientPacketWorldParticlesData36TmpElement int32 + PlayToClientPacketWorldParticlesData36TmpElement, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + PlayToClientPacketWorldParticlesData36Tmp = append(PlayToClientPacketWorldParticlesData36Tmp, PlayToClientPacketWorldParticlesData36TmpElement) + } + ret.Data = PlayToClientPacketWorldParticlesData36Tmp + case 37: + var PlayToClientPacketWorldParticlesData37Tmp []int32 + var lPlayToClientPacketWorldParticlesData37Tmp int32 + lPlayToClientPacketWorldParticlesData37Tmp = 1 + PlayToClientPacketWorldParticlesData37Tmp = []int32{} + for range lPlayToClientPacketWorldParticlesData37Tmp { + var PlayToClientPacketWorldParticlesData37TmpElement int32 + PlayToClientPacketWorldParticlesData37TmpElement, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + PlayToClientPacketWorldParticlesData37Tmp = append(PlayToClientPacketWorldParticlesData37Tmp, PlayToClientPacketWorldParticlesData37TmpElement) + } + ret.Data = PlayToClientPacketWorldParticlesData37Tmp + case 38: + var PlayToClientPacketWorldParticlesData38Tmp []int32 + var lPlayToClientPacketWorldParticlesData38Tmp int32 + lPlayToClientPacketWorldParticlesData38Tmp = 1 + PlayToClientPacketWorldParticlesData38Tmp = []int32{} + for range lPlayToClientPacketWorldParticlesData38Tmp { + var PlayToClientPacketWorldParticlesData38TmpElement int32 + PlayToClientPacketWorldParticlesData38TmpElement, err = proto_base.DecodeVarInt(r) + if err != nil { + return + } + PlayToClientPacketWorldParticlesData38Tmp = append(PlayToClientPacketWorldParticlesData38Tmp, PlayToClientPacketWorldParticlesData38TmpElement) + } + ret.Data = PlayToClientPacketWorldParticlesData38Tmp + default: + var PlayToClientPacketWorldParticlesDataTmp struct { + } + ret.Data = PlayToClientPacketWorldParticlesDataTmp + } return } func (ret *PlayToClientPacketWorldParticles) Encode(w io.Writer) (err error) { - err = proto_base.ToDoError + err = binary.Write(w, binary.BigEndian, ret.ParticleId) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.LongDistance) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.X) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.Y) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.Z) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.OffsetX) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.OffsetY) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.OffsetZ) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.ParticleData) + if err != nil { + return + } + err = binary.Write(w, binary.BigEndian, ret.Particles) + if err != nil { + return + } + switch ret.ParticleId { + case 36: + PlayToClientPacketWorldParticlesData, ok := ret.Data.([]int32) + if !ok { + err = proto_base.BadTypeError + return + } + for iPlayToClientPacketWorldParticlesData := range len(PlayToClientPacketWorldParticlesData) { + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData[iPlayToClientPacketWorldParticlesData]) + if err != nil { + return + } + } + case 37: + PlayToClientPacketWorldParticlesData, ok := ret.Data.([]int32) + if !ok { + err = proto_base.BadTypeError + return + } + for iPlayToClientPacketWorldParticlesData := range len(PlayToClientPacketWorldParticlesData) { + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData[iPlayToClientPacketWorldParticlesData]) + if err != nil { + return + } + } + case 38: + PlayToClientPacketWorldParticlesData, ok := ret.Data.([]int32) + if !ok { + err = proto_base.BadTypeError + return + } + for iPlayToClientPacketWorldParticlesData := range len(PlayToClientPacketWorldParticlesData) { + err = proto_base.EncodeVarInt(w, PlayToClientPacketWorldParticlesData[iPlayToClientPacketWorldParticlesData]) + if err != nil { + return + } + } + default: + _, ok := ret.Data.(struct { + }) + if !ok { + err = proto_base.BadTypeError + return + } + } return } diff --git a/mc/proto_generated/v26_1/proto.go b/mc/proto_generated/v26_1/proto.go index ff0d70e..eac5d4c 100644 --- a/mc/proto_generated/v26_1/proto.go +++ b/mc/proto_generated/v26_1/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/26.1/protocol.json (sha256:dfb6318886cd3ceab617f75ac05e24f9836a64501d60551071289b904ebfc389) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v26_1 import ( @@ -22183,7 +22183,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Decode(r io.ReadSeeker) (err error if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": var PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp float32 err = binary.Read(r, binary.BigEndian, &PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp) @@ -22290,7 +22290,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Encode(w io.Writer) (err error) { if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": PlayToClientPacketTrackedWaypointWaypointData, ok := ret.Waypoint.Data.(float32) if !ok { diff --git a/mc/proto_generated/v26_2/proto.go b/mc/proto_generated/v26_2/proto.go index b1466f0..795189d 100644 --- a/mc/proto_generated/v26_2/proto.go +++ b/mc/proto_generated/v26_2/proto.go @@ -1,6 +1,6 @@ // Code generated by strom. DO NOT EDIT. // source: minecraft-data/pc/26.2/protocol.json (sha256:7ba66411adcc68a668f38211e1b00eeb386a345d5eb16fadd6dc1c7f94bb175f) -// version: (devel) (go1.26.2) +// version: v0.6.6-0.20260805154326-fa70ea36c6f5+dirty (go1.26.2) package v26_2 import ( @@ -22192,7 +22192,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Decode(r io.ReadSeeker) (err error if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": var PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp float32 err = binary.Read(r, binary.BigEndian, &PlayToClientPacketTrackedWaypointWaypointDataAzimuthTmp) @@ -22299,7 +22299,7 @@ func (ret *PlayToClientPacketTrackedWaypoint) Encode(w io.Writer) (err error) { if err != nil { return } - switch ret.Waypoint.Type { + switch ret.Waypoint.Anon { case "azimuth": PlayToClientPacketTrackedWaypointWaypointData, ok := ret.Waypoint.Data.(float32) if !ok { diff --git a/mc/proto_generator/main.go b/mc/proto_generator/main.go index cf858f8..3aa4912 100644 --- a/mc/proto_generator/main.go +++ b/mc/proto_generator/main.go @@ -7,6 +7,7 @@ import ( "go/ast" "go/token" "io" + "maps" "os" "runtime/debug" "slices" @@ -56,6 +57,7 @@ type Generator struct { EncoderNatives map[string]FunctionGeneratorFunc CompareToNatives map[string]CompareToGeneratorFunc Protocol Protocol + RawTypes map[string]map[string]any File *ast.File // These persist in the current GenerateType call @@ -129,6 +131,11 @@ func (g *Generator) VisitNameAndData(tName string, tData any) (e ast.Expr, err e } t, found := g.Protocol.Types.Types[tName] if t != "native" && found { + if tData != nil { + if _, ok := g.mergeCompareTo(tName, t, tData); ok { + return Ident("any"), nil + } + } return Ident(util2.CamelCase(tName)), nil } t, found = g.CurrentlyGeneratingTypes.Types[tName] @@ -152,6 +159,14 @@ func (g *Generator) VisitDecoder(varToSet ast.Expr, data any, name string) (e [] if found { return d(g, varToSet, tData, name) } + if tData != nil { + if merged, ok := g.mergeCompareTo(tName, g.Protocol.Types.Types[tName], tData); ok { + s, found := g.DecoderNatives[merged.tName] + if found { + return s(g, varToSet, merged.data, name) + } + } + } t, found := g.Protocol.Types.Types[tName] if t == "native" { err = fmt.Errorf("decoder native not implemented %v", tName) @@ -160,6 +175,55 @@ func (g *Generator) VisitDecoder(varToSet ast.Expr, data any, name string) (e [] return DefaultDecoder(g, varToSet, tData, name) } +type mergedType struct { + tName string + data any +} + +func (g *Generator) mergeCompareTo(tName string, t any, overrideData any) (mergedType, bool) { + overrideMap, ok := overrideData.(map[string]any) + if !ok { + return mergedType{}, false + } + overrideCompareTo, hasOverride := overrideMap["compareTo"] + if !hasOverride { + return mergedType{}, false + } + if s, ok := overrideCompareTo.(string); ok && strings.HasPrefix(s, "$") { + return mergedType{}, false + } + var typeMap map[string]any + var nativeName string + if m, ok := t.(map[string]any); ok { + typeMap = m + nativeName = "container" + } else if a, ok := t.([]any); ok && len(a) >= 2 { + if m, ok := a[1].(map[string]any); ok { + typeMap = m + } + if s, ok := a[0].(string); ok { + nativeName = s + } + } else { + m, ok := g.RawTypes[tName] + if !ok { + return mergedType{}, false + } + typeMap = m + nativeName = "switch" + } + typeCompareTo, hasType := typeMap["compareTo"] + if !hasType { + return mergedType{}, false + } + if s, ok := typeCompareTo.(string); !ok || !strings.HasPrefix(s, "$") { + return mergedType{}, false + } + merged := maps.Clone(typeMap) + merged["compareTo"] = overrideCompareTo + return mergedType{tName: nativeName, data: merged}, true +} + func (g *Generator) VisitEncoder(varToSet ast.Expr, data any, name string) (e []ast.Stmt, err error) { g.Depth += 1 defer func() { g.Depth -= 1 }() @@ -172,6 +236,14 @@ func (g *Generator) VisitEncoder(varToSet ast.Expr, data any, name string) (e [] if found { return d(g, varToSet, tData, name) } + if tData != nil { + if merged, ok := g.mergeCompareTo(tName, g.Protocol.Types.Types[tName], tData); ok { + s, found := g.EncoderNatives[merged.tName] + if found { + return s(g, varToSet, merged.data, name) + } + } + } t, found := g.Protocol.Types.Types[tName] if t == "native" { err = fmt.Errorf("encoder native not implemented %v", tName) @@ -357,6 +429,20 @@ func Generate(version string, w io.Writer, sourceHash string) (packetInfos []Pac g := &Generator{Protocol: protocol} + g.RawTypes = make(map[string]map[string]any) + for k, v := range protocol.Types.Types { + if m, ok := v.(map[string]any); ok { + g.RawTypes[k] = m + } + if a, ok := v.([]any); ok && len(a) == 2 { + if m, ok := a[1].(map[string]any); ok { + if _, has := m["fields"]; has { + g.RawTypes[k] = m + } + } + } + } + g.File = NewFile("v" + strings.ReplaceAll(version, ".", "_")) // Add file header comment for IDE recognition and reproducibility diff --git a/mc/proto_generator/native_compare_to.go b/mc/proto_generator/native_compare_to.go index eeacf16..38f0eb8 100644 --- a/mc/proto_generator/native_compare_to.go +++ b/mc/proto_generator/native_compare_to.go @@ -59,6 +59,13 @@ func ContainerCompareTo(g *Generator, parts []string, inExpr ast.Expr, dataRaw a if field.Name == name { return g.VisitCompareTo(parts, SelectorExprAndStr(inExpr, util2.CamelCase(field.Name)), field.Type) } + if field.Anon { + anonParts := append([]string{name}, parts...) + e, cet, err2 := g.VisitCompareTo(anonParts, SelectorExprAndStr(inExpr, "Anon"), field.Type) + if err2 == nil { + return e, cet, nil + } + } } err = errors.New("field not found") return diff --git a/mc/proto_generator/native_decoder.go b/mc/proto_generator/native_decoder.go index 97f5fd7..75ad4e1 100644 --- a/mc/proto_generator/native_decoder.go +++ b/mc/proto_generator/native_decoder.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "go/ast" "go/token" "slices" @@ -124,13 +125,14 @@ func ArrayDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s return } } else { + countStr := fmt.Sprint(data.Count) var n int - n, err = strconv.Atoi(data.Count) + n, err = strconv.Atoi(countStr) var e ast.Expr if err == nil { e = NumLit(n) } else { - e, _, err = g.ParseCompareTo(data.Count) + e, _, err = g.ParseCompareTo(countStr) } s2 = append(s2, Assign121(Ident(lName), e)) } diff --git a/mc/proto_generator/native_encoder.go b/mc/proto_generator/native_encoder.go index f73e122..3bdaa4a 100644 --- a/mc/proto_generator/native_encoder.go +++ b/mc/proto_generator/native_encoder.go @@ -79,7 +79,7 @@ func ArrayEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s iName := "i" + name //s, err = g.VisitEncoder(varToSet, data.Type, name) var s1 []ast.Stmt - if data.Count == "" { + if data.Count == nil { s1, err = g.VisitEncoder(Call(ct, Call(Ident("len"), varToSet)), data.CountType, name) if err != nil { return diff --git a/mc/proto_generator/protodef/types.go b/mc/proto_generator/protodef/types.go index a3a4822..ed3e942 100644 --- a/mc/proto_generator/protodef/types.go +++ b/mc/proto_generator/protodef/types.go @@ -35,7 +35,7 @@ type ( Array struct { CountType any - Count string + Count any Type any }