Files
go-mc/nbt/README.md
2021-06-22 11:18:18 +08:00

1.6 KiB

NBT Go Reference

This package implement the Named Binary Tag format of Minecraft.

The API is very similar to the standard library encoding/json. If you (high probability) have used that, it is easy to use this.

Basic Usage

For the following NBT tag:

TAG_Compound("hello world") {
    TAG_String("name"): "Bananrama"
}   

To read and write would look like:

package main

import "github.com/Tnze/go-mc/nbt"

type Compound struct {
    Name string `nbt:"name"` // The field must be started with the capital letter
}

func main() {
    banana := Compound{Name: "Bananrama"}
    data, _ := nbt.Marshal(banana)

    var rama Compound
    _ = nbt.Unmarshal(data, &rama)
}

Struct field tags

There are two tags supported:

  • nbt
  • nbt_type

The nbt tag is used to change the name of the NBT Tag field, whereas the nbt_type tag is used to enforce a certain NBT Tag type when it is ambiguous.

For example:

type Compound struct {
    LongArray []int64
    LongList []int64 `nbt_type:"list"` // forces a long list instead of a long array
}

Stringified NBT

You can transform SNBT string into binary NBT by using go-mc, which could be useful when parsing command, but the reverse conversion is not supported at the moment.

package main

import (
    "bytes"
    "github.com/Tnze/go-mc/nbt"
)

func main() {
    var buf bytes.Buffer
    e := nbt.NewEncoder(&buf)
    err := e.WriteSNBT(`{Tnze: 1, 'sp ace': [I;1,2,3]}`)
    if err != nil {
        panic(err)
    }
}