fix: resolve parameterized $compareTo types and fix array count type
- VisitNameAndData: return any instead of named struct when mergeCompareTo resolves $compareTo, fixing field type mismatches for switch/container types - ContainerCompareTo: traverse anon/bitfield fields for compareTo resolution, fixes entityMetadata 'field not found' errors - Array.Count: change from string to any to handle numeric count values - ArrayEncoder: fix nil check to correctly write length prefix for arrays - ArrayDecoder: use fmt.Sprint for safe Count conversion
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user