look at the code if you want to know what i did

This commit is contained in:
adman
2026-03-22 00:35:07 +01:00
parent a6102b7ec9
commit ea024fe808
21 changed files with 294 additions and 78 deletions
+3 -1
View File
@@ -291,6 +291,8 @@ func readPayload(id int8, r io.Reader) (ret any, err error) {
return
}
var UnknownTagTypeErr = errors.New("unknown nbt type")
func writePayload(v any, w io.Writer) (err error) {
switch v := v.(type) {
case struct{}:
@@ -361,7 +363,7 @@ func writePayload(v any, w io.Writer) (err error) {
}
err = binary.Write(w, Order, End)
default:
err = errors.New("unknown nbt type")
err = UnknownTagTypeErr
}
return
}
+91
View File
@@ -0,0 +1,91 @@
package nbt
import (
"fmt"
"io"
)
// PrintSNBTAny documented at https://minecraft.wiki/w/NBT_format#SNBT_format
func PrintSNBTAny(t any, w io.Writer) (err error) {
switch t := t.(type) {
case int8:
_, err = fmt.Fprintf(w, "%vB", t)
case bool:
_, err = fmt.Fprintf(w, "%v", t)
case int16:
_, err = fmt.Fprintf(w, "%vS", t)
case int32:
_, err = fmt.Fprintf(w, "%vI", t)
case int64:
_, err = fmt.Fprintf(w, "%vL", t)
case float32:
_, err = fmt.Fprintf(w, "%vF", t)
case float64:
_, err = fmt.Fprintf(w, "%vD", t)
case string:
_, err = fmt.Fprintf(w, "%q", t)
case []any:
_, err = fmt.Fprintf(w, "[")
for _, v := range t {
err = PrintSNBTAny(v, w)
if err != nil {
return
}
_, err = fmt.Fprintf(w, ",")
}
_, err = fmt.Fprintf(w, "]")
case map[string]any:
_, err = fmt.Fprintf(w, "{")
for k, v := range t {
_, err = fmt.Fprintf(w, "%q:,", k)
err = PrintSNBTAny(v, w)
if err != nil {
return
}
_, err = fmt.Fprintf(w, ",")
}
_, err = fmt.Fprintf(w, "}")
case []int8:
_, err = fmt.Fprintf(w, "[B;")
if err != nil {
return
}
for _, v := range t {
err = PrintSNBTAny(v, w)
if err != nil {
return
}
_, err = fmt.Fprintf(w, ",")
}
_, err = fmt.Fprintf(w, "]")
case []int32:
_, err = fmt.Fprintf(w, "[I;")
if err != nil {
return
}
for _, v := range t {
err = PrintSNBTAny(v, w)
if err != nil {
return
}
_, err = fmt.Fprintf(w, ",")
}
_, err = fmt.Fprintf(w, "]")
case []int64:
_, err = fmt.Fprintf(w, "[L;")
if err != nil {
return
}
for _, v := range t {
err = PrintSNBTAny(v, w)
if err != nil {
return
}
_, err = fmt.Fprintf(w, ",")
}
_, err = fmt.Fprintf(w, "]")
default:
err = UnknownTagTypeErr
}
return
}
+23
View File
@@ -0,0 +1,23 @@
package nbt
import (
"bytes"
_ "embed"
"testing"
)
//go:embed testdata/top_0_20.nbt
var topSNBT []byte
func TestPrintSNBTAny(t *testing.T) {
n, err := ReadFile(bytes.NewReader(topSNBT))
if err != nil {
panic(err)
}
bb := bytes.NewBuffer(nil)
err = PrintSNBTAny(n.Value, bb)
if err != nil {
panic(err)
}
t.Log(bb.String())
}
BIN
View File
Binary file not shown.