1
0
forked from MTSR/mapserver
mapserver/mapblockparser/mapblock.go

81 lines
1.4 KiB
Go
Raw Normal View History

2019-01-06 23:00:24 +03:00
package mapblockparser
type MapBlock struct {
2019-01-07 21:53:05 +03:00
Version byte
Underground bool
Mapdata []byte
Metadata Metadata
BlockMapping map[int]string
2019-01-07 10:59:06 +03:00
}
2019-01-13 18:37:03 +03:00
func getNodePos(x, y, z int) int {
2019-01-10 18:04:20 +03:00
return x + (y * 16) + (z * 256)
}
2019-01-13 18:37:03 +03:00
func (mb *MapBlock) GetNodeName(x, y, z int) string {
pos := getNodePos(x, y, z)
id := readU16(mb.Mapdata, pos*2)
2019-01-10 18:04:20 +03:00
return mb.BlockMapping[id]
}
2019-01-07 21:38:53 +03:00
func NewMapblock() MapBlock {
mb := MapBlock{}
mb.Metadata = NewMetadata()
2019-01-07 21:53:05 +03:00
mb.BlockMapping = make(map[int]string)
2019-01-07 21:38:53 +03:00
return mb
}
2019-01-07 10:59:06 +03:00
type Metadata struct {
2019-01-07 18:06:03 +03:00
Inventories map[int]map[string]*Inventory
2019-01-07 21:38:53 +03:00
Pairs map[int]map[string]string
2019-01-07 18:06:03 +03:00
}
2019-01-07 21:38:53 +03:00
func NewMetadata() Metadata {
md := Metadata{}
md.Inventories = make(map[int]map[string]*Inventory)
md.Pairs = make(map[int]map[string]string)
return md
}
2019-01-07 18:06:03 +03:00
2019-01-07 21:38:53 +03:00
func (md *Metadata) GetPairsMap(pos int) map[string]string {
2019-01-07 18:06:03 +03:00
pairsMap := md.Pairs[pos]
if pairsMap == nil {
2019-01-07 18:35:26 +03:00
pairsMap = make(map[string]string)
2019-01-07 18:06:03 +03:00
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
2019-01-07 10:59:06 +03:00
}
type Item struct {
2019-01-07 21:38:53 +03:00
Name string
2019-01-07 10:59:06 +03:00
Count int
2019-01-07 21:38:53 +03:00
Wear int
2019-01-07 10:59:06 +03:00
}
type Inventory struct {
2019-01-07 21:38:53 +03:00
Size int
2019-01-07 10:59:06 +03:00
Items []Item
2019-01-07 21:38:53 +03:00
}