package mapblockparser type MapBlock struct { Size int `json:"size"` Version byte `json:"version"` Underground bool `json:"underground"` Mapdata []byte `json:"mapdata"` Metadata Metadata `json:"metadata"` BlockMapping map[int]string `json:"blockmapping"` Mtime int64 `json:"mtime"` } type Metadata struct { Inventories map[int]map[string]*Inventory `json:"inventories"` Pairs map[int]map[string]string `json:"pairs"` } type Item struct { Name string `json:"name"` Count int `json:"count"` Wear int `json:"wear"` } type Inventory struct { Size int `json:"size"` Items []Item `json:"items"` } func getNodePos(x, y, z int) int { return x + (y * 16) + (z * 256) } func (mb *MapBlock) GetNodeName(x, y, z int) string { pos := getNodePos(x, y, z) id := readU16(mb.Mapdata, pos*2) return mb.BlockMapping[id] } func NewMapblock() MapBlock { mb := MapBlock{} mb.Metadata = NewMetadata() mb.BlockMapping = make(map[int]string) return mb } func NewMetadata() Metadata { md := Metadata{} md.Inventories = make(map[int]map[string]*Inventory) md.Pairs = make(map[int]map[string]string) return md } func (md *Metadata) GetPairsMap(pos int) map[string]string { pairsMap := md.Pairs[pos] if pairsMap == nil { pairsMap = make(map[string]string) md.Pairs[pos] = pairsMap } return pairsMap } func (md *Metadata) GetInventoryMap(pos int) map[string]*Inventory { invMap := md.Inventories[pos] if invMap == nil { invMap = make(map[string]*Inventory) md.Inventories[pos] = invMap } return invMap } func (md *Metadata) GetInventory(pos int, name string) *Inventory { m := md.GetInventoryMap(pos) inv := m[name] if inv == nil { inv = &Inventory{} m[name] = inv } return inv }