fix: implement IDSet (registryEntryHolderSet) decoder/encoder

- Replace old broken RegistryEntryHolderSetDecoder with correct varint
  discriminator: id != 0 returns raw ID, id == 0 decodes string base
- Add RegistryEntryHolderSetEncoder using type switch (string/int32)
- Add NonErroringIndex to proto_base (zero-fallback index lookup)
- DeclareRecipes now fails with index not found (mapper) instead of to do
This commit is contained in:
OpenCode
2026-08-05 19:53:46 +02:00
parent 56ac8e154e
commit 53d366ae53
13 changed files with 776 additions and 70 deletions
+1 -1
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.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_12_2
import (
+1 -1
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.14.4/protocol.json (sha256:b6edff5abaaf234037b5019024d749e27e746250a23253bb4ad77d8f76e93167)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_14_4
import (
+1 -1
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.16.2/protocol.json (sha256:d96a3c5a7a7ddf2105e23990c2471b3aeafe4a6975e0c9d7d7943b599af9dfb3)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_16_5
import (
+140 -5
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.21.11/protocol.json (sha256:97d2726cce3a39cc967a954f27f4ebf029ec3f0f655bb21942aab8745d13cdab)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_21_11
import (
@@ -901,11 +901,42 @@ type IDSet struct {
}
func (ret *IDSet) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var IDSetId int32
IDSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if IDSetId != 0 {
ret.Val = IDSetId
} else {
var IDSetResult string
IDSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ret.Val = IDSetResult
}
return
}
func (ret *IDSet) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
switch IDSetKnownType := ret.Val.(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, IDSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, IDSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
return
}
@@ -965,11 +996,115 @@ type ItemBlockPredicate struct {
}
func (ret *ItemBlockPredicate) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var ItemBlockPredicateBlockSetPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicateBlockSetPresent)
if err != nil {
return
}
if ItemBlockPredicateBlockSetPresent {
var ItemBlockPredicateBlockSetPresentValue any
var ItemBlockPredicateBlockSetId int32
ItemBlockPredicateBlockSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if ItemBlockPredicateBlockSetId != 0 {
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetId
} else {
var ItemBlockPredicateBlockSetResult string
ItemBlockPredicateBlockSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetResult
}
ret.BlockSet = &ItemBlockPredicateBlockSetPresentValue
}
var ItemBlockPredicatePropertiesPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicatePropertiesPresent)
if err != nil {
return
}
if ItemBlockPredicatePropertiesPresent {
var ItemBlockPredicatePropertiesPresentValue []ItemBlockProperty
var lItemBlockPredicateProperties int32
lItemBlockPredicateProperties, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = []ItemBlockProperty{}
for range lItemBlockPredicateProperties {
var ItemBlockPredicatePropertiesElement ItemBlockProperty
err = ItemBlockPredicatePropertiesElement.Decode(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = append(ItemBlockPredicatePropertiesPresentValue, ItemBlockPredicatePropertiesElement)
}
ret.Properties = &ItemBlockPredicatePropertiesPresentValue
}
err = ret.Nbt.Decode(r)
if err != nil {
return
}
err = ret.Components.Decode(r)
if err != nil {
return
}
return
}
func (ret *ItemBlockPredicate) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
err = binary.Write(w, binary.BigEndian, ret.BlockSet != nil)
if err != nil {
return
}
if ret.BlockSet != nil {
switch ItemBlockPredicateBlockSetKnownType := (*ret.BlockSet).(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
}
err = binary.Write(w, binary.BigEndian, ret.Properties != nil)
if err != nil {
return
}
if ret.Properties != nil {
err = proto_base.EncodeVarInt(w, int32(len(*ret.Properties)))
if err != nil {
return
}
for iItemBlockPredicateProperties := range len(*ret.Properties) {
ItemBlockPredicatePropertiesInnerEncTmp := (*ret.Properties)[iItemBlockPredicateProperties]
err = ItemBlockPredicatePropertiesInnerEncTmp.Encode(w)
if err != nil {
return
}
}
}
ItemBlockPredicateNbtEncTmp := ret.Nbt
err = ItemBlockPredicateNbtEncTmp.Encode(w)
if err != nil {
return
}
ItemBlockPredicateComponentsEncTmp := ret.Components
err = ItemBlockPredicateComponentsEncTmp.Encode(w)
if err != nil {
return
}
return
}
+140 -5
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.21.8/protocol.json (sha256:930fbb4c69fd2ecadddcee3c38d3f02908adc23b54b707cb21112e7ab1e9dba1)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_21_8
import (
@@ -525,11 +525,42 @@ type IDSet struct {
}
func (ret *IDSet) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var IDSetId int32
IDSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if IDSetId != 0 {
ret.Val = IDSetId
} else {
var IDSetResult string
IDSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ret.Val = IDSetResult
}
return
}
func (ret *IDSet) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
switch IDSetKnownType := ret.Val.(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, IDSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, IDSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
return
}
@@ -589,11 +620,115 @@ type ItemBlockPredicate struct {
}
func (ret *ItemBlockPredicate) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var ItemBlockPredicateBlockSetPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicateBlockSetPresent)
if err != nil {
return
}
if ItemBlockPredicateBlockSetPresent {
var ItemBlockPredicateBlockSetPresentValue any
var ItemBlockPredicateBlockSetId int32
ItemBlockPredicateBlockSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if ItemBlockPredicateBlockSetId != 0 {
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetId
} else {
var ItemBlockPredicateBlockSetResult string
ItemBlockPredicateBlockSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetResult
}
ret.BlockSet = &ItemBlockPredicateBlockSetPresentValue
}
var ItemBlockPredicatePropertiesPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicatePropertiesPresent)
if err != nil {
return
}
if ItemBlockPredicatePropertiesPresent {
var ItemBlockPredicatePropertiesPresentValue []ItemBlockProperty
var lItemBlockPredicateProperties int32
lItemBlockPredicateProperties, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = []ItemBlockProperty{}
for range lItemBlockPredicateProperties {
var ItemBlockPredicatePropertiesElement ItemBlockProperty
err = ItemBlockPredicatePropertiesElement.Decode(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = append(ItemBlockPredicatePropertiesPresentValue, ItemBlockPredicatePropertiesElement)
}
ret.Properties = &ItemBlockPredicatePropertiesPresentValue
}
err = ret.Nbt.Decode(r)
if err != nil {
return
}
err = ret.Components.Decode(r)
if err != nil {
return
}
return
}
func (ret *ItemBlockPredicate) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
err = binary.Write(w, binary.BigEndian, ret.BlockSet != nil)
if err != nil {
return
}
if ret.BlockSet != nil {
switch ItemBlockPredicateBlockSetKnownType := (*ret.BlockSet).(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
}
err = binary.Write(w, binary.BigEndian, ret.Properties != nil)
if err != nil {
return
}
if ret.Properties != nil {
err = proto_base.EncodeVarInt(w, int32(len(*ret.Properties)))
if err != nil {
return
}
for iItemBlockPredicateProperties := range len(*ret.Properties) {
ItemBlockPredicatePropertiesInnerEncTmp := (*ret.Properties)[iItemBlockPredicateProperties]
err = ItemBlockPredicatePropertiesInnerEncTmp.Encode(w)
if err != nil {
return
}
}
}
ItemBlockPredicateNbtEncTmp := ret.Nbt
err = ItemBlockPredicateNbtEncTmp.Encode(w)
if err != nil {
return
}
ItemBlockPredicateComponentsEncTmp := ret.Components
err = ItemBlockPredicateComponentsEncTmp.Encode(w)
if err != nil {
return
}
return
}
+140 -5
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.21.9/protocol.json (sha256:9861cee397931c678c3b1837dcdf82e3fc885442c6bd0e4a60522fbf26653e59)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_21_9
import (
@@ -807,11 +807,42 @@ type IDSet struct {
}
func (ret *IDSet) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var IDSetId int32
IDSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if IDSetId != 0 {
ret.Val = IDSetId
} else {
var IDSetResult string
IDSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ret.Val = IDSetResult
}
return
}
func (ret *IDSet) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
switch IDSetKnownType := ret.Val.(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, IDSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, IDSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
return
}
@@ -871,11 +902,115 @@ type ItemBlockPredicate struct {
}
func (ret *ItemBlockPredicate) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var ItemBlockPredicateBlockSetPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicateBlockSetPresent)
if err != nil {
return
}
if ItemBlockPredicateBlockSetPresent {
var ItemBlockPredicateBlockSetPresentValue any
var ItemBlockPredicateBlockSetId int32
ItemBlockPredicateBlockSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if ItemBlockPredicateBlockSetId != 0 {
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetId
} else {
var ItemBlockPredicateBlockSetResult string
ItemBlockPredicateBlockSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetResult
}
ret.BlockSet = &ItemBlockPredicateBlockSetPresentValue
}
var ItemBlockPredicatePropertiesPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicatePropertiesPresent)
if err != nil {
return
}
if ItemBlockPredicatePropertiesPresent {
var ItemBlockPredicatePropertiesPresentValue []ItemBlockProperty
var lItemBlockPredicateProperties int32
lItemBlockPredicateProperties, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = []ItemBlockProperty{}
for range lItemBlockPredicateProperties {
var ItemBlockPredicatePropertiesElement ItemBlockProperty
err = ItemBlockPredicatePropertiesElement.Decode(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = append(ItemBlockPredicatePropertiesPresentValue, ItemBlockPredicatePropertiesElement)
}
ret.Properties = &ItemBlockPredicatePropertiesPresentValue
}
err = ret.Nbt.Decode(r)
if err != nil {
return
}
err = ret.Components.Decode(r)
if err != nil {
return
}
return
}
func (ret *ItemBlockPredicate) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
err = binary.Write(w, binary.BigEndian, ret.BlockSet != nil)
if err != nil {
return
}
if ret.BlockSet != nil {
switch ItemBlockPredicateBlockSetKnownType := (*ret.BlockSet).(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
}
err = binary.Write(w, binary.BigEndian, ret.Properties != nil)
if err != nil {
return
}
if ret.Properties != nil {
err = proto_base.EncodeVarInt(w, int32(len(*ret.Properties)))
if err != nil {
return
}
for iItemBlockPredicateProperties := range len(*ret.Properties) {
ItemBlockPredicatePropertiesInnerEncTmp := (*ret.Properties)[iItemBlockPredicateProperties]
err = ItemBlockPredicatePropertiesInnerEncTmp.Encode(w)
if err != nil {
return
}
}
}
ItemBlockPredicateNbtEncTmp := ret.Nbt
err = ItemBlockPredicateNbtEncTmp.Encode(w)
if err != nil {
return
}
ItemBlockPredicateComponentsEncTmp := ret.Components
err = ItemBlockPredicateComponentsEncTmp.Encode(w)
if err != nil {
return
}
return
}
+1 -1
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/1.8/protocol.json (sha256:79fe774bfc255dd281899c004fbb9c7adc40fb107de9353da1dd0371ea4b53af)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v1_8
import (
+140 -5
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/26.1/protocol.json (sha256:dfb6318886cd3ceab617f75ac05e24f9836a64501d60551071289b904ebfc389)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v26_1
import (
@@ -901,11 +901,42 @@ type IDSet struct {
}
func (ret *IDSet) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var IDSetId int32
IDSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if IDSetId != 0 {
ret.Val = IDSetId
} else {
var IDSetResult string
IDSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ret.Val = IDSetResult
}
return
}
func (ret *IDSet) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
switch IDSetKnownType := ret.Val.(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, IDSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, IDSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
return
}
@@ -965,11 +996,115 @@ type ItemBlockPredicate struct {
}
func (ret *ItemBlockPredicate) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var ItemBlockPredicateBlockSetPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicateBlockSetPresent)
if err != nil {
return
}
if ItemBlockPredicateBlockSetPresent {
var ItemBlockPredicateBlockSetPresentValue any
var ItemBlockPredicateBlockSetId int32
ItemBlockPredicateBlockSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if ItemBlockPredicateBlockSetId != 0 {
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetId
} else {
var ItemBlockPredicateBlockSetResult string
ItemBlockPredicateBlockSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetResult
}
ret.BlockSet = &ItemBlockPredicateBlockSetPresentValue
}
var ItemBlockPredicatePropertiesPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicatePropertiesPresent)
if err != nil {
return
}
if ItemBlockPredicatePropertiesPresent {
var ItemBlockPredicatePropertiesPresentValue []ItemBlockProperty
var lItemBlockPredicateProperties int32
lItemBlockPredicateProperties, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = []ItemBlockProperty{}
for range lItemBlockPredicateProperties {
var ItemBlockPredicatePropertiesElement ItemBlockProperty
err = ItemBlockPredicatePropertiesElement.Decode(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = append(ItemBlockPredicatePropertiesPresentValue, ItemBlockPredicatePropertiesElement)
}
ret.Properties = &ItemBlockPredicatePropertiesPresentValue
}
err = ret.Nbt.Decode(r)
if err != nil {
return
}
err = ret.Components.Decode(r)
if err != nil {
return
}
return
}
func (ret *ItemBlockPredicate) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
err = binary.Write(w, binary.BigEndian, ret.BlockSet != nil)
if err != nil {
return
}
if ret.BlockSet != nil {
switch ItemBlockPredicateBlockSetKnownType := (*ret.BlockSet).(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
}
err = binary.Write(w, binary.BigEndian, ret.Properties != nil)
if err != nil {
return
}
if ret.Properties != nil {
err = proto_base.EncodeVarInt(w, int32(len(*ret.Properties)))
if err != nil {
return
}
for iItemBlockPredicateProperties := range len(*ret.Properties) {
ItemBlockPredicatePropertiesInnerEncTmp := (*ret.Properties)[iItemBlockPredicateProperties]
err = ItemBlockPredicatePropertiesInnerEncTmp.Encode(w)
if err != nil {
return
}
}
}
ItemBlockPredicateNbtEncTmp := ret.Nbt
err = ItemBlockPredicateNbtEncTmp.Encode(w)
if err != nil {
return
}
ItemBlockPredicateComponentsEncTmp := ret.Components
err = ItemBlockPredicateComponentsEncTmp.Encode(w)
if err != nil {
return
}
return
}
+140 -5
View File
@@ -1,6 +1,6 @@
// Code generated by strom. DO NOT EDIT.
// source: minecraft-data/pc/26.2/protocol.json (sha256:7ba66411adcc68a668f38211e1b00eeb386a345d5eb16fadd6dc1c7f94bb175f)
// version: v0.6.6-0.20260805170503-1d8f70c7fdae+dirty (go1.26.2)
// version: v0.6.6-0.20260805173638-56ac8e154ea1+dirty (go1.26.2)
package v26_2
import (
@@ -901,11 +901,42 @@ type IDSet struct {
}
func (ret *IDSet) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var IDSetId int32
IDSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if IDSetId != 0 {
ret.Val = IDSetId
} else {
var IDSetResult string
IDSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ret.Val = IDSetResult
}
return
}
func (ret *IDSet) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
switch IDSetKnownType := ret.Val.(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, IDSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, IDSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
return
}
@@ -965,11 +996,115 @@ type ItemBlockPredicate struct {
}
func (ret *ItemBlockPredicate) Decode(r io.ReadSeeker) (err error) {
err = proto_base.ToDoError
var ItemBlockPredicateBlockSetPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicateBlockSetPresent)
if err != nil {
return
}
if ItemBlockPredicateBlockSetPresent {
var ItemBlockPredicateBlockSetPresentValue any
var ItemBlockPredicateBlockSetId int32
ItemBlockPredicateBlockSetId, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
if ItemBlockPredicateBlockSetId != 0 {
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetId
} else {
var ItemBlockPredicateBlockSetResult string
ItemBlockPredicateBlockSetResult, err = proto_base.DecodeString(r)
if err != nil {
return
}
ItemBlockPredicateBlockSetPresentValue = ItemBlockPredicateBlockSetResult
}
ret.BlockSet = &ItemBlockPredicateBlockSetPresentValue
}
var ItemBlockPredicatePropertiesPresent bool
err = binary.Read(r, binary.BigEndian, &ItemBlockPredicatePropertiesPresent)
if err != nil {
return
}
if ItemBlockPredicatePropertiesPresent {
var ItemBlockPredicatePropertiesPresentValue []ItemBlockProperty
var lItemBlockPredicateProperties int32
lItemBlockPredicateProperties, err = proto_base.DecodeVarInt(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = []ItemBlockProperty{}
for range lItemBlockPredicateProperties {
var ItemBlockPredicatePropertiesElement ItemBlockProperty
err = ItemBlockPredicatePropertiesElement.Decode(r)
if err != nil {
return
}
ItemBlockPredicatePropertiesPresentValue = append(ItemBlockPredicatePropertiesPresentValue, ItemBlockPredicatePropertiesElement)
}
ret.Properties = &ItemBlockPredicatePropertiesPresentValue
}
err = ret.Nbt.Decode(r)
if err != nil {
return
}
err = ret.Components.Decode(r)
if err != nil {
return
}
return
}
func (ret *ItemBlockPredicate) Encode(w io.Writer) (err error) {
err = proto_base.ToDoError
err = binary.Write(w, binary.BigEndian, ret.BlockSet != nil)
if err != nil {
return
}
if ret.BlockSet != nil {
switch ItemBlockPredicateBlockSetKnownType := (*ret.BlockSet).(type) {
case string:
err = proto_base.EncodeVarInt(w, 0)
if err != nil {
return
}
err = proto_base.EncodeString(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
case int32:
err = proto_base.EncodeVarInt(w, ItemBlockPredicateBlockSetKnownType)
if err != nil {
return
}
default:
err = proto_base.BadTypeError
}
}
err = binary.Write(w, binary.BigEndian, ret.Properties != nil)
if err != nil {
return
}
if ret.Properties != nil {
err = proto_base.EncodeVarInt(w, int32(len(*ret.Properties)))
if err != nil {
return
}
for iItemBlockPredicateProperties := range len(*ret.Properties) {
ItemBlockPredicatePropertiesInnerEncTmp := (*ret.Properties)[iItemBlockPredicateProperties]
err = ItemBlockPredicatePropertiesInnerEncTmp.Encode(w)
if err != nil {
return
}
}
}
ItemBlockPredicateNbtEncTmp := ret.Nbt
err = ItemBlockPredicateNbtEncTmp.Encode(w)
if err != nil {
return
}
ItemBlockPredicateComponentsEncTmp := ret.Components
err = ItemBlockPredicateComponentsEncTmp.Encode(w)
if err != nil {
return
}
return
}