nbt.StringifiedNBT as nbt.NBTEncoder
This commit is contained in:
58
nbt/snbt.go
58
nbt/snbt.go
@ -1,10 +1,58 @@
|
|||||||
package nbt
|
package nbt
|
||||||
|
|
||||||
type StringifiedNBT struct {
|
import "io"
|
||||||
Name string
|
|
||||||
Content string
|
type StringifiedNBT string
|
||||||
|
|
||||||
|
func (n StringifiedNBT) TagType() (tagType byte) {
|
||||||
|
d := decodeState{data: []byte(n)}
|
||||||
|
d.scan.reset()
|
||||||
|
d.scanWhile(scanSkipSpace)
|
||||||
|
switch d.opcode {
|
||||||
|
case scanBeginLiteral:
|
||||||
|
start := d.readIndex()
|
||||||
|
if d.scanWhile(scanContinue); d.opcode == scanError {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
literal := d.data[start:d.readIndex()]
|
||||||
|
tagType, _ = parseLiteral(literal)
|
||||||
|
|
||||||
|
case scanBeginCompound:
|
||||||
|
tagType = TagCompound
|
||||||
|
|
||||||
|
case scanBeginList:
|
||||||
|
d.scanWhile(scanSkipSpace)
|
||||||
|
if d.opcode == scanBeginLiteral {
|
||||||
|
start := d.readIndex()
|
||||||
|
if d.scanWhile(scanContinue); d.opcode == scanError {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
literal := d.data[start:d.readIndex()]
|
||||||
|
if d.opcode == scanSkipSpace {
|
||||||
|
d.scanWhile(scanSkipSpace)
|
||||||
|
}
|
||||||
|
if d.opcode == scanListType {
|
||||||
|
switch literal[0] {
|
||||||
|
case 'B':
|
||||||
|
tagType = TagByteArray
|
||||||
|
case 'I':
|
||||||
|
tagType = TagIntArray
|
||||||
|
case 'L':
|
||||||
|
tagType = TagLongArray
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tagType = TagList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *StringifiedNBT) Decode(tagType byte, tagName string, r DecoderReader) error {
|
func (n StringifiedNBT) Encode(w io.Writer) error {
|
||||||
panic("unimplemented")
|
d := decodeState{data: []byte(n)}
|
||||||
|
d.scan.reset()
|
||||||
|
return writeValue(NewEncoder(w), &d, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func (n *StringifiedNBT) Decode(tagType byte, r DecoderReader) error {
|
||||||
|
//}
|
||||||
|
@ -109,3 +109,22 @@ func Test_WriteSNBT_nestingList(t *testing.T) {
|
|||||||
t.Error("Exceeded the maximum depth of support, but no error was reported")
|
t.Error("Exceeded the maximum depth of support, but no error was reported")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStringifiedNBT_TagType(t *testing.T) {
|
||||||
|
for _, v := range []struct {
|
||||||
|
snbt string
|
||||||
|
Type byte
|
||||||
|
}{
|
||||||
|
{`123B`, TagByte},
|
||||||
|
{`123`, TagInt},
|
||||||
|
{`[]`, TagList},
|
||||||
|
{`[B;]`, TagByteArray},
|
||||||
|
{`[I;]`, TagIntArray},
|
||||||
|
{`[L;]`, TagLongArray},
|
||||||
|
{`{abc:123B}`, TagCompound},
|
||||||
|
} {
|
||||||
|
if T := StringifiedNBT(v.snbt).TagType(); T != v.Type {
|
||||||
|
t.Errorf("Parse SNBT TagType error: %s is %d, not %d", v.snbt, v.Type, T)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user