add seek-back handling in entity metadata decoding
This commit is contained in:
@@ -2,11 +2,10 @@ package v1_21_11
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/admin-else/strom/nbt"
|
"github.com/admin-else/strom/nbt"
|
||||||
"github.com/admin-else/strom/proto_base"
|
"github.com/admin-else/strom/proto_base"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ArmorTrimMaterial struct {
|
type ArmorTrimMaterial struct {
|
||||||
@@ -3512,6 +3511,10 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) {
|
|||||||
if id == 255 {
|
if id == 255 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
_, err = r.Seek(-1, io.SeekCurrent)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
var entry EntityMetadataEntry
|
var entry EntityMetadataEntry
|
||||||
err = entry.Decode(r)
|
err = entry.Decode(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -2446,6 +2446,10 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) {
|
|||||||
if id == 255 {
|
if id == 255 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
_, err = r.Seek(-1, io.SeekCurrent)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
var entry EntityMetadataEntry
|
var entry EntityMetadataEntry
|
||||||
err = entry.Decode(r)
|
err = entry.Decode(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -2,11 +2,10 @@ package v1_21_9
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/admin-else/strom/nbt"
|
"github.com/admin-else/strom/nbt"
|
||||||
"github.com/admin-else/strom/proto_base"
|
"github.com/admin-else/strom/proto_base"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ArmorTrimMaterial struct {
|
type ArmorTrimMaterial struct {
|
||||||
@@ -3381,6 +3380,10 @@ func (ret *EntityMetadata) Decode(r io.ReadSeeker) (err error) {
|
|||||||
if id == 255 {
|
if id == 255 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
_, err = r.Seek(-1, io.SeekCurrent)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
var entry EntityMetadataEntry
|
var entry EntityMetadataEntry
|
||||||
err = entry.Decode(r)
|
err = entry.Decode(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -578,6 +578,9 @@ func EntityMetadataLoopDecoder(g *Generator, varToSet ast.Expr, dataRaw any, nam
|
|||||||
|
|
||||||
decodeIdStatements, err := g.VisitDecoder(Ident("id"), "u8", name)
|
decodeIdStatements, err := g.VisitDecoder(Ident("id"), "u8", name)
|
||||||
endCheck := If(Equals(Ident("id"), NumLit(data.EndVal)), NewBlockEllipsis(Break()))
|
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)
|
declEntry := VarStmt("entry", innerType)
|
||||||
decodingEntryStmts, err := g.VisitDecoder(Ident("entry"), data.Type, name+"Inner")
|
decodingEntryStmts, err := g.VisitDecoder(Ident("entry"), data.Type, name+"Inner")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -588,6 +591,8 @@ func EntityMetadataLoopDecoder(g *Generator, varToSet ast.Expr, dataRaw any, nam
|
|||||||
var loopStmts []ast.Stmt
|
var loopStmts []ast.Stmt
|
||||||
loopStmts = append(loopStmts, decodeIdStatements...)
|
loopStmts = append(loopStmts, decodeIdStatements...)
|
||||||
loopStmts = append(loopStmts, endCheck)
|
loopStmts = append(loopStmts, endCheck)
|
||||||
|
loopStmts = append(loopStmts, seekBack)
|
||||||
|
loopStmts = append(loopStmts, IfErrNil())
|
||||||
loopStmts = append(loopStmts, declEntry)
|
loopStmts = append(loopStmts, declEntry)
|
||||||
loopStmts = append(loopStmts, decodingEntryStmts...)
|
loopStmts = append(loopStmts, decodingEntryStmts...)
|
||||||
loopStmts = append(loopStmts, assignEntry)
|
loopStmts = append(loopStmts, assignEntry)
|
||||||
|
|||||||
Reference in New Issue
Block a user