Minetest map parser library for go
- Extracts metadata/inventories
 - NodeID/Param1/Param2 handling
 - Supports zlib compressed mapblocks
 - zstd compressed mapblocks (minetest 5.5+)
 
// read mapblock data from db/file/somewhere else
data, err := ioutil.ReadFile("mapblock.bin")
if err != nil {
    panic(err)
}
// parse
mapblock, err := Parse(data)
if err != nil {
    panic(err)
}
// mapblock version
fmt.Printf("Version: %d", mapblock.Version)
// nodes
fmt.Printf("%s", mapblock.GetNodeName(10,0,2)) // node-name
fmt.Printf("%s", mapblock.GetNodeId(10,0,2)) //raw nodeid
fmt.Printf("%s", mapblock.GetParam2(10,0,2)) //param2
// node-id mapping
for id, name := range mapblock.BlockMapping {
    fmt.Printf("%d = %s", id, name)
}
// inventories
invMap := mapblock.Metadata.GetInventoryMapAtPos(10,0,0)
mainInv := invMap["main"]
for _, item := range mainInv {
    fmt.Printf("%s %d", item.Name, item.Count)
}
// metadata
md := mapblock.Metadata.GetMetadata(10,0,1)
for key, value := range md {
    fmt.Printf("%s = %s", key, value)
}Code: MIT