From d43ff7f83d05bd3fd48a6ce077a10077ee519607 Mon Sep 17 00:00:00 2001 From: adman Date: Thu, 14 May 2026 00:06:45 +0200 Subject: [PATCH] add seek-back handling in entity metadata decoding --- proto_generated/v1_21_11/proto.go | 7 +++++-- proto_generated/v1_21_8/proto.go | 4 ++++ proto_generated/v1_21_9/proto.go | 7 +++++-- proto_generator/native_decoder.go | 5 +++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/proto_generated/v1_21_11/proto.go b/proto_generated/v1_21_11/proto.go index 14c7a08..47cadfe 100644 --- a/proto_generated/v1_21_11/proto.go +++ b/proto_generated/v1_21_11/proto.go @@ -2,11 +2,10 @@ package v1_21_11 import ( "encoding/binary" - "io" - "github.com/admin-else/strom/nbt" "github.com/admin-else/strom/proto_base" "github.com/google/uuid" + "io" ) type ArmorTrimMaterial struct { @@ -3512,6 +3511,10 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { if id == 255 { break } + _, err = r.Seek(-1, io.SeekCurrent) + if err != nil { + return + } var entry EntityMetadataEntry err = entry.Decode(r) if err != nil { diff --git a/proto_generated/v1_21_8/proto.go b/proto_generated/v1_21_8/proto.go index 9bd7118..a2b3f1c 100644 --- a/proto_generated/v1_21_8/proto.go +++ b/proto_generated/v1_21_8/proto.go @@ -2446,6 +2446,10 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { if id == 255 { break } + _, err = r.Seek(-1, io.SeekCurrent) + if err != nil { + return + } var entry EntityMetadataEntry err = entry.Decode(r) if err != nil { diff --git a/proto_generated/v1_21_9/proto.go b/proto_generated/v1_21_9/proto.go index 3b51fa0..9c971be 100644 --- a/proto_generated/v1_21_9/proto.go +++ b/proto_generated/v1_21_9/proto.go @@ -2,11 +2,10 @@ package v1_21_9 import ( "encoding/binary" - "io" - "github.com/admin-else/strom/nbt" "github.com/admin-else/strom/proto_base" "github.com/google/uuid" + "io" ) type ArmorTrimMaterial struct { @@ -3381,6 +3380,10 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) { if id == 255 { break } + _, err = r.Seek(-1, io.SeekCurrent) + if err != nil { + return + } var entry EntityMetadataEntry err = entry.Decode(r) if err != nil { diff --git a/proto_generator/native_decoder.go b/proto_generator/native_decoder.go index 3f96b20..8b056e0 100644 --- a/proto_generator/native_decoder.go +++ b/proto_generator/native_decoder.go @@ -578,6 +578,9 @@ func EntityMetadataLoopDecoder(g *Generator, varToSet ast.Expr, dataRaw any, nam decodeIdStatements, err := g.VisitDecoder(Ident("id"), "u8", name) endCheck := If(Equals(Ident("id"), NumLit(data.EndVal)), NewBlockEllipsis(Break())) + // r.Seek(-1, io.SeekCurrent) + seekBack := Assign(Exprs(Ident("_"), Ident("err")), Exprs(Call(Selector("r", "Seek"), NumLit(-1), Selector("io", "SeekCurrent")))) + declEntry := VarStmt("entry", innerType) decodingEntryStmts, err := g.VisitDecoder(Ident("entry"), data.Type, name+"Inner") if err != nil { @@ -588,6 +591,8 @@ func EntityMetadataLoopDecoder(g *Generator, varToSet ast.Expr, dataRaw any, nam var loopStmts []ast.Stmt loopStmts = append(loopStmts, decodeIdStatements...) loopStmts = append(loopStmts, endCheck) + loopStmts = append(loopStmts, seekBack) + loopStmts = append(loopStmts, IfErrNil()) loopStmts = append(loopStmts, declEntry) loopStmts = append(loopStmts, decodingEntryStmts...) loopStmts = append(loopStmts, assignEntry)