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
+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
}