fix TAG_List<TAG_Compound>

This commit is contained in:
Tnze
2021-05-27 01:03:52 +08:00
parent d0c7a295a5
commit 72599f7058
3 changed files with 11 additions and 4 deletions

View File

@ -159,23 +159,30 @@ func writeListOrArray(e *Encoder, d *decodeState, tagName string) error {
case scanBeginList: // TAG_List<TAG_List>
case scanBeginCompound: // TAG_List<TAG_Compound>
for {
d.scanWhile(scanSkipSpace)
if d.opcode == scanSkipSpace {
d.scanWhile(scanSkipSpace)
}
if d.opcode != scanBeginCompound {
return errors.New("different TagType in List")
}
writeCompoundPayload(e2, d)
count++
// read ',' or ']'
if d.opcode == scanSkipSpace {
d.scanWhile(scanSkipSpace)
}
// read ',' or ']'
d.scanNext()
if d.opcode == scanSkipSpace {
d.scanWhile(scanSkipSpace)
}
if d.opcode == scanEndValue {
break
}
if d.opcode != scanListValue {
panic(phasePanicMsg)
}
// read '{'
d.scanNext()
}
e.writeListHeader(TagCompound, tagName, count)
e.w.Write(buf.Bytes())

View File

@ -38,7 +38,7 @@ func TestEncoder_WriteSNBT(t *testing.T) {
for i := range testCases {
buf.Reset()
if err := e.WriteSNBT(testCases[i].snbt); err != nil {
t.Error(err)
t.Errorf("Convert SNBT %q error: %v", testCases[i].snbt, err)
continue
}
want := testCases[i].nbt

View File

@ -9,7 +9,7 @@ func TestSNBT_checkScanCode(t *testing.T) {
//t.SkipNow()
var s scanner
s.reset()
for _, c := range []byte(`[I;1,2,3]`) {
for _, c := range []byte(`[{},{a:1b},{}]`) {
t.Logf("[%c] - %d", c, s.step(c))
}
t.Logf("[%c] - %d", ' ', s.eof())