diff --git a/nbt/snbt_decode.go b/nbt/snbt_decode.go index 06962d0..e4d5e7c 100644 --- a/nbt/snbt_decode.go +++ b/nbt/snbt_decode.go @@ -254,6 +254,12 @@ func writeListOrArray(e *Encoder, d *decodeState, writeTag bool, tagName string) return tagType, err } case scanBeginList: // TAG_List + if writeTag { + err = e.writeTag(TagList, tagName) + if err != nil { + return tagType, err + } + } var elemType byte for { if d.opcode == scanSkipSpace { @@ -291,6 +297,12 @@ func writeListOrArray(e *Encoder, d *decodeState, writeTag bool, tagName string) return } case scanBeginCompound: // TAG_List + if writeTag { + err = e.writeTag(TagList, tagName) + if err != nil { + return tagType, err + } + } for { if d.opcode == scanSkipSpace { d.scanWhile(scanSkipSpace) diff --git a/nbt/snbt_decode_test.go b/nbt/snbt_decode_test.go index 39b3e67..d9d10cb 100644 --- a/nbt/snbt_decode_test.go +++ b/nbt/snbt_decode_test.go @@ -50,6 +50,7 @@ var testCases = []testCase{ {`{d:[]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'd', 0, 0, 0, 0, 0, 0}}, {`{e:[]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'e', 0, 0, 0, 0, 0, 0}}, {`{f:[], g:[]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'f', 0, 0, 0, 0, 0, 9, 0, 1, 'g', 0, 0, 0, 0, 0, 0}}, + {`{a:[{b:3B}]}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'a', 10, 0, 0, 0, 1, 1, 0, 1, 'b', 3, 0, 0}}, // issue#121 {`{a:[b],c:0B}`, TagCompound, []byte{10, 0, 0, 9, 0, 1, 'a', 8, 0, 0, 0, 1, 0, 1, 'b', 1, 0, 1, 'c', 0, 0}},