diff --git a/go.mod b/go.mod index 5c591af..cfe3918 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ require ( github.com/gorilla/websocket v1.4.2 github.com/lib/pq v1.10.2 github.com/mattn/go-sqlite3 v1.14.8 + github.com/minetest-go/mapparser v0.1.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible github.com/prometheus/client_golang v1.11.0 github.com/sirupsen/logrus v1.8.1 diff --git a/go.sum b/go.sum index d11e398..07140ed 100644 --- a/go.sum +++ b/go.sum @@ -50,6 +50,8 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -64,6 +66,8 @@ github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxz github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/minetest-go/mapparser v0.1.0 h1:wjVrS2QXURnphPlqqPRD6vt1gvkT55RRUjroT3G5Two= +github.com/minetest-go/mapparser v0.1.0/go.mod h1:Jnf9+Oe8Hs8IJw6Tk8XPd72NTJkjxLOamTpO51KJoXU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= diff --git a/mapblockaccessor/get.go b/mapblockaccessor/get.go index 6e16e2f..eafaf45 100644 --- a/mapblockaccessor/get.go +++ b/mapblockaccessor/get.go @@ -3,9 +3,9 @@ package mapblockaccessor import ( "mapserver/coords" "mapserver/eventbus" - "mapserver/mapblockparser" "sync" + "github.com/minetest-go/mapparser" cache "github.com/patrickmn/go-cache" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" @@ -13,7 +13,7 @@ import ( var lock = &sync.RWMutex{} -func (a *MapBlockAccessor) GetMapBlock(pos *coords.MapBlockCoords) (*mapblockparser.MapBlock, error) { +func (a *MapBlockAccessor) GetMapBlock(pos *coords.MapBlockCoords) (*mapparser.MapBlock, error) { key := getKey(pos) //maintenance @@ -40,7 +40,7 @@ func (a *MapBlockAccessor) GetMapBlock(pos *coords.MapBlockCoords) (*mapblockpar if cachedblock == nil { return nil, nil } else { - return cachedblock.(*mapblockparser.MapBlock), nil + return cachedblock.(*mapparser.MapBlock), nil } } @@ -61,7 +61,7 @@ func (a *MapBlockAccessor) GetMapBlock(pos *coords.MapBlockCoords) (*mapblockpar if cachedblock == nil { return nil, nil } else { - return cachedblock.(*mapblockparser.MapBlock), nil + return cachedblock.(*mapparser.MapBlock), nil } } @@ -79,7 +79,7 @@ func (a *MapBlockAccessor) GetMapBlock(pos *coords.MapBlockCoords) (*mapblockpar getCacheMissCount.Inc() - mapblock, err := mapblockparser.Parse(block.Data, block.Mtime, pos) + mapblock, err := mapparser.Parse(block.Data) if err != nil { return nil, err } diff --git a/mapblockaccessor/legacyblocks.go b/mapblockaccessor/legacyblocks.go index 597f29c..ca6f8f6 100644 --- a/mapblockaccessor/legacyblocks.go +++ b/mapblockaccessor/legacyblocks.go @@ -3,16 +3,16 @@ package mapblockaccessor import ( "mapserver/eventbus" "mapserver/layer" - "mapserver/mapblockparser" "mapserver/settings" + "github.com/minetest-go/mapparser" cache "github.com/patrickmn/go-cache" "github.com/sirupsen/logrus" ) type FindNextLegacyBlocksResult struct { HasMore bool - List []*mapblockparser.MapBlock + List []*mapparser.MapBlock UnfilteredCount int Progress float64 LastMtime int64 @@ -29,7 +29,7 @@ func (a *MapBlockAccessor) FindNextLegacyBlocks(s settings.Settings, layers []*l blocks := nextResult.List result := FindNextLegacyBlocksResult{} - mblist := make([]*mapblockparser.MapBlock, 0) + mblist := make([]*mapparser.MapBlock, 0) result.HasMore = nextResult.HasMore result.UnfilteredCount = nextResult.UnfilteredCount result.Progress = nextResult.Progress @@ -46,7 +46,7 @@ func (a *MapBlockAccessor) FindNextLegacyBlocks(s settings.Settings, layers []*l key := getKey(block.Pos) - mapblock, err := mapblockparser.Parse(block.Data, block.Mtime, block.Pos) + mapblock, err := mapparser.Parse(block.Data) if err != nil { fields := logrus.Fields{ "x": block.Pos.X, diff --git a/mapblockaccessor/mtime.go b/mapblockaccessor/mtime.go index d0a5cb0..3c66a1a 100644 --- a/mapblockaccessor/mtime.go +++ b/mapblockaccessor/mtime.go @@ -4,8 +4,8 @@ import ( "mapserver/coords" "mapserver/eventbus" "mapserver/layer" - "mapserver/mapblockparser" + "github.com/minetest-go/mapparser" cache "github.com/patrickmn/go-cache" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" @@ -15,7 +15,7 @@ type FindMapBlocksByMtimeResult struct { HasMore bool LastPos *coords.MapBlockCoords LastMtime int64 - List []*mapblockparser.MapBlock + List []*mapparser.MapBlock UnfilteredCount int } @@ -39,7 +39,7 @@ func (a *MapBlockAccessor) FindMapBlocksByMtime(lastmtime int64, limit int, laye result := FindMapBlocksByMtimeResult{} - mblist := make([]*mapblockparser.MapBlock, 0) + mblist := make([]*mapparser.MapBlock, 0) var newlastpos *coords.MapBlockCoords result.HasMore = len(blocks) == limit result.UnfilteredCount = len(blocks) @@ -65,7 +65,7 @@ func (a *MapBlockAccessor) FindMapBlocksByMtime(lastmtime int64, limit int, laye key := getKey(block.Pos) - mapblock, err := mapblockparser.Parse(block.Data, block.Mtime, block.Pos) + mapblock, err := mapparser.Parse(block.Data) if err != nil { fields := logrus.Fields{ "x": block.Pos.X, diff --git a/mapblockaccessor/update.go b/mapblockaccessor/update.go index 02c80d3..ba81796 100644 --- a/mapblockaccessor/update.go +++ b/mapblockaccessor/update.go @@ -2,12 +2,12 @@ package mapblockaccessor import ( "mapserver/coords" - "mapserver/mapblockparser" + "github.com/minetest-go/mapparser" cache "github.com/patrickmn/go-cache" ) -func (a *MapBlockAccessor) Update(pos *coords.MapBlockCoords, mb *mapblockparser.MapBlock) { +func (a *MapBlockAccessor) Update(pos *coords.MapBlockCoords, mb *mapparser.MapBlock) { key := getKey(pos) cacheBlockCount.Inc() a.blockcache.Set(key, mb, cache.DefaultExpiration) diff --git a/mapblockparser/countedreader.go b/mapblockparser/countedreader.go deleted file mode 100644 index a268258..0000000 --- a/mapblockparser/countedreader.go +++ /dev/null @@ -1,22 +0,0 @@ -package mapblockparser - -import ( - "bytes" -) - -type CountedReader struct { - Reader *bytes.Reader - Count int -} - -func (r *CountedReader) Read(p []byte) (int, error) { - i, err := r.Reader.Read(p) - r.Count += i - return i, err -} - -func (r *CountedReader) ReadByte() (byte, error) { - i, err := r.Reader.ReadByte() - r.Count++ - return i, err -} diff --git a/mapblockparser/iterate.go b/mapblockparser/iterate.go deleted file mode 100644 index 6beea0b..0000000 --- a/mapblockparser/iterate.go +++ /dev/null @@ -1,11 +0,0 @@ -package mapblockparser - -func IterateMapblock(cb func(x, y, z int)) { - for x := 0; x < 16; x++ { - for y := 0; y < 16; y++ { - for z := 0; z < 16; z++ { - cb(x, y, z) - } - } - } -} diff --git a/mapblockparser/logger.go b/mapblockparser/logger.go deleted file mode 100644 index 497ea67..0000000 --- a/mapblockparser/logger.go +++ /dev/null @@ -1,11 +0,0 @@ -package mapblockparser - -import ( - "github.com/sirupsen/logrus" -) - -var log *logrus.Entry - -func init() { - log = logrus.WithFields(logrus.Fields{"prefix": "mapblockaccessor"}) -} diff --git a/mapblockparser/mapblock.go b/mapblockparser/mapblock.go deleted file mode 100644 index 36438c0..0000000 --- a/mapblockparser/mapblock.go +++ /dev/null @@ -1,148 +0,0 @@ -package mapblockparser - -import ( - "mapserver/coords" -) - -type MapBlock struct { - Pos *coords.MapBlockCoords `json:"pos"` - Size int `json:"size"` - Version byte `json:"version"` - Underground bool `json:"underground"` - Mapdata *MapData `json:"mapdata"` - Metadata *Metadata `json:"metadata"` - BlockMapping map[int]string `json:"blockmapping"` - Mtime int64 `json:"mtime"` -} - -type MapData struct { - ContentId []int `json:"contentid"` - Param1 []int `json:"param1"` - Param2 []int `json:"param2"` -} - -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"` - //TODO: metadata -} - -func (this *MapBlock) IsEmpty() bool { - if len(this.BlockMapping) == 0 { - // only air - return true - } - - if len(this.BlockMapping) == 1 { - for _, name := range this.BlockMapping { - if name == "vacuum:vacuum" { - // only vacuum - return true - } - } - } - - // other stuff - return false -} - -func (this *Item) IsEmpty() bool { - return this.Name == "" && this.Count == 0 -} - -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 (inv *Inventory) IsEmpty() bool { - if len(inv.Items) == 0 { - return true - } - - for _, item := range inv.Items { - if item.Name != "" && item.Count > 0 { - return false - } - } - - return true -} - -func (mb *MapBlock) GetNodeId(x, y, z int) int { - pos := getNodePos(x, y, z) - return mb.Mapdata.ContentId[pos] -} - -func (mb *MapBlock) GetParam2(x, y, z int) int { - pos := getNodePos(x, y, z) - return mb.Mapdata.Param2[pos] -} - -func (mb *MapBlock) GetNodeName(x, y, z int) string { - id := mb.GetNodeId(x, y, z) - 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) GetMetadata(x, y, z int) map[string]string { - return md.GetPairsMap(getNodePos(x, y, z)) -} - -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) GetInventoryMapAtPos(x, y, z int) map[string]*Inventory { - return md.GetInventoryMap(getNodePos(x, y, z)) -} - -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 -} diff --git a/mapblockparser/mapdata.go b/mapblockparser/mapdata.go deleted file mode 100644 index 6d7b1ba..0000000 --- a/mapblockparser/mapdata.go +++ /dev/null @@ -1,47 +0,0 @@ -package mapblockparser - -import ( - "bytes" - "compress/zlib" - "errors" - "io" - "strconv" -) - -func parseMapdata(mapblock *MapBlock, data []byte) (int, error) { - r := bytes.NewReader(data) - - cr := new(CountedReader) - cr.Reader = r - - z, err := zlib.NewReader(cr) - if err != nil { - return 0, err - } - - defer z.Close() - - buf := new(bytes.Buffer) - io.Copy(buf, z) - - if buf.Len() != 16384 { - return 0, errors.New("Mapdata length invalid: " + strconv.Itoa(buf.Len())) - } - - rawdata := buf.Bytes() - - mapd := MapData{ - ContentId: make([]int, 4096), - Param1: make([]int, 4096), - Param2: make([]int, 4096), - } - mapblock.Mapdata = &mapd - - for i := 0; i < 4096; i++ { - mapd.ContentId[i] = readU16(rawdata, i*2) - mapd.Param1[i] = readU8(rawdata, (4096*2)+i) - mapd.Param2[i] = readU8(rawdata, (4096*3)+i) - } - - return cr.Count, nil -} diff --git a/mapblockparser/metadata.go b/mapblockparser/metadata.go deleted file mode 100644 index 98cf529..0000000 --- a/mapblockparser/metadata.go +++ /dev/null @@ -1,180 +0,0 @@ -package mapblockparser - -import ( - "bufio" - "bytes" - "compress/zlib" - "errors" - "io" - "strconv" - "strings" - - "github.com/sirupsen/logrus" -) - -/* -lua vm: https://github.com/yuin/gopher-lua -*/ - -const ( - INVENTORY_TERMINATOR = "EndInventory" - INVENTORY_END = "EndInventoryList" - INVENTORY_START = "List" -) - -func readU16(data []byte, offset int) int { - return (int(data[offset]) << 8) | int(data[offset+1]) -} - -func readU8(data []byte, offset int) int { - return int(data[offset]) -} - -func readU32(data []byte, offset int) int { - return int(data[offset])<<24 | - int(data[offset+1])<<16 | - int(data[offset+2])<<8 | - int(data[offset+3]) -} - -func parseMetadata(mapblock *MapBlock, data []byte) (int, error) { - r := bytes.NewReader(data) - - cr := new(CountedReader) - cr.Reader = r - - z, err := zlib.NewReader(cr) - if err != nil { - return 0, err - } - - defer z.Close() - - buf := new(bytes.Buffer) - io.Copy(buf, z) - - if cr.Count == 0 { - return 0, errors.New("no data") - } - - metadata := buf.Bytes() - - log.WithFields(logrus.Fields{"metadata-length": len(metadata)}).Trace("Parsing metadata") - - offset := 0 - version := metadata[offset] - - if version == 0 { - //No data? - return cr.Count, nil - } - - offset++ - count := readU16(metadata, offset) - - offset += 2 - - for i := 0; i < count; i++ { - position := readU16(metadata, offset) - pairsMap := mapblock.Metadata.GetPairsMap(position) - - offset += 2 - valuecount := readU32(metadata, offset) - - offset += 4 - for j := 0; j < valuecount; j++ { - keyLength := readU16(metadata, offset) - offset += 2 - - key := string(metadata[offset : keyLength+offset]) - offset += keyLength - - valueLength := readU32(metadata, offset) - offset += 4 - - if len(metadata) <= valueLength+offset { - return 0, errors.New("metadata too short: " + strconv.Itoa(len(metadata)) + - ", valuelength: " + strconv.Itoa(int(valueLength))) - } - - value := string(metadata[offset : valueLength+offset]) - offset += valueLength - - pairsMap[key] = value - - priv := 0 - if version >= 2 { /* private tag doesn't exist in version=1 */ - priv = readU8(metadata, offset) - offset++ - } - - if priv != 0 { - // do something usefull - logrus.Trace("Private items in Inventory") - } - } - - var currentInventoryName *string - var currentInventory *Inventory - - scanner := bufio.NewScanner(bytes.NewReader(metadata[offset:])) - for scanner.Scan() { - txt := scanner.Text() - offset += len(txt) + 1 - - log.WithFields(logrus.Fields{"txt": txt, "position": position}).Trace("Parsing inventory") - - if strings.HasPrefix(txt, INVENTORY_START) { - pairs := strings.Split(txt, " ") - currentInventoryName = &pairs[1] - currentInventory = mapblock.Metadata.GetInventory(position, *currentInventoryName) - currentInventory.Size = 0 - - } else if txt == INVENTORY_END { - currentInventoryName = nil - currentInventory = nil - } else if currentInventory != nil { - //content - if strings.HasPrefix(txt, "Item") { - item := Item{} - parts := strings.Split(txt, " ") - - if len(parts) >= 2 { - item.Name = parts[1] - } - - if len(parts) >= 3 { - val, err := strconv.ParseInt(parts[2], 10, 32) - if err != nil { - return 0, err - } - item.Count = int(val) - } - - if len(parts) >= 4 { - val, err := strconv.ParseInt(parts[3], 10, 32) - if err != nil { - return 0, err - } - item.Count = int(val) - } - - currentInventory.Items = append(currentInventory.Items, &item) - currentInventory.Size += 1 - - } - - } else if txt == INVENTORY_TERMINATOR { - break - - } else { - return 0, errors.New("Malformed inventory: " + txt) - } - } - - //TODO - - } - - return cr.Count, nil -} diff --git a/mapblockparser/parse.go b/mapblockparser/parse.go deleted file mode 100644 index 36ba7d5..0000000 --- a/mapblockparser/parse.go +++ /dev/null @@ -1,112 +0,0 @@ -package mapblockparser - -import ( - "errors" - "github.com/prometheus/client_golang/prometheus" - "mapserver/coords" - "strconv" -) - -func Parse(data []byte, mtime int64, pos *coords.MapBlockCoords) (*MapBlock, error) { - if len(data) == 0 { - return nil, errors.New("no data") - } - - timer := prometheus.NewTimer(parseDuration) - defer timer.ObserveDuration() - - mapblock := NewMapblock() - mapblock.Mtime = mtime - mapblock.Pos = pos - mapblock.Size = len(data) - - // version - mapblock.Version = data[0] - - if mapblock.Version < 25 || mapblock.Version > 28 { - return nil, errors.New("mapblock-version not supported: " + strconv.Itoa(int(mapblock.Version))) - } - - //flags - flags := data[1] - mapblock.Underground = (flags & 0x01) == 0x01 - - var offset int - - if mapblock.Version >= 27 { - offset = 4 - } else { - //u16 lighting_complete not present - offset = 2 - } - - content_width := data[offset] - params_width := data[offset+1] - - if content_width != 2 { - return nil, errors.New("content_width = " + strconv.Itoa(int(content_width))) - } - - if params_width != 2 { - return nil, errors.New("params_width = " + strconv.Itoa(int(params_width))) - } - - //mapdata (blocks) - if mapblock.Version >= 27 { - offset = 6 - - } else { - offset = 4 - - } - - //metadata - count, err := parseMapdata(mapblock, data[offset:]) - if err != nil { - return nil, err - } - - offset += count - - count, err = parseMetadata(mapblock, data[offset:]) - if err != nil { - return nil, err - } - - offset += count - - //static objects - - offset++ //static objects version - staticObjectsCount := readU16(data, offset) - offset += 2 - for i := 0; i < staticObjectsCount; i++ { - offset += 13 - dataSize := readU16(data, offset) - offset += dataSize + 2 - } - - //timestamp - offset += 4 - - //mapping version - offset++ - - numMappings := readU16(data, offset) - offset += 2 - for i := 0; i < numMappings; i++ { - nodeId := readU16(data, offset) - offset += 2 - - nameLen := readU16(data, offset) - offset += 2 - - blockName := string(data[offset : offset+nameLen]) - offset += nameLen - - mapblock.BlockMapping[nodeId] = blockName - } - - parsedMapBlocks.Inc() - return mapblock, nil -} diff --git a/mapblockparser/parse_test.go b/mapblockparser/parse_test.go deleted file mode 100644 index 67dc082..0000000 --- a/mapblockparser/parse_test.go +++ /dev/null @@ -1,122 +0,0 @@ -package mapblockparser - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "mapserver/coords" - "strconv" - "testing" -) - -func TestReadU16(t *testing.T) { - v := readU16([]byte{0x00, 0x00}, 0) - if v != 0 { - t.Error(v) - } - - v = readU16([]byte{0x00, 0x01}, 0) - if v != 1 { - t.Error(v) - } - - v = readU16([]byte{0x01, 0x00}, 0) - if v != 256 { - t.Error(v) - } - -} -func TestReadU32(t *testing.T) { - v := readU32([]byte{0x00, 0x00, 0x00, 0x00}, 0) - if v != 0 { - t.Error(v) - } -} - -func TestParse(t *testing.T) { - - data, err := ioutil.ReadFile("testdata/0.0.0") - if err != nil { - t.Error(err) - } - - mapblock, err := Parse(data, 0, coords.NewMapBlockCoords(0, 0, 0)) - - if err != nil { - t.Error(err) - } - - if mapblock.Version != 28 { - t.Error("wrong mapblock version: " + strconv.Itoa(int(mapblock.Version))) - } - - if !mapblock.Underground { - t.Error("Underground flag") - } - - if len(mapblock.Mapdata.ContentId) != 4096 { - t.Error("Mapdata length wrong") - } - - if len(mapblock.Mapdata.Param2) != 4096 { - t.Error("Mapdata length wrong") - } - - if len(mapblock.Mapdata.Param1) != 4096 { - t.Error("Mapdata length wrong") - } - - pairs := mapblock.Metadata.GetPairsMap(0) - if pairs["owner"] != "pipo" { - t.Error(pairs["owner"]) - } -} - -func TestParse2(t *testing.T) { - - data, err := ioutil.ReadFile("testdata/11.0.2") - if err != nil { - t.Error(err) - } - - mapblock, err := Parse(data, 0, coords.NewMapBlockCoords(0, 0, 0)) - - if err != nil { - t.Error(err) - } - - for k, v := range mapblock.BlockMapping { - fmt.Println("Key", k, "Value", v) - } -} - -func TestParse3(t *testing.T) { - - data, err := ioutil.ReadFile("testdata/0.1.0") - if err != nil { - t.Error(err) - } - - _, err = Parse(data, 0, coords.NewMapBlockCoords(0, 0, 0)) - - if err != nil { - t.Error(err) - } -} - -func TestParseMetadata(t *testing.T) { - - data, err := ioutil.ReadFile("testdata/mb-with-metadata.bin") - if err != nil { - t.Error(err) - } - - mb, err := Parse(data, 0, coords.NewMapBlockCoords(0, 0, 0)) - - if err != nil { - t.Error(err) - } - - str, err := json.MarshalIndent(mb, "", " ") - fmt.Println(string(str)) -} diff --git a/mapblockparser/prometheus.go b/mapblockparser/prometheus.go deleted file mode 100644 index 30c147a..0000000 --- a/mapblockparser/prometheus.go +++ /dev/null @@ -1,24 +0,0 @@ -package mapblockparser - -import ( - "github.com/prometheus/client_golang/prometheus" -) - -var ( - parsedMapBlocks = prometheus.NewCounter( - prometheus.CounterOpts{ - Name: "mapblocks_parsed_count", - Help: "Overall count of parsed mapblocks", - }, - ) - parseDuration = prometheus.NewHistogram(prometheus.HistogramOpts{ - Name: "mapblock_parse_time", - Help: "Histogram for mapblock parse timings", - Buckets: prometheus.LinearBuckets(0.001, 0.002, 10), - }) -) - -func init() { - prometheus.MustRegister(parsedMapBlocks) - prometheus.MustRegister(parseDuration) -} diff --git a/mapblockparser/testdata/0.-1.0 b/mapblockparser/testdata/0.-1.0 deleted file mode 100644 index c3dbcdf..0000000 Binary files a/mapblockparser/testdata/0.-1.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.0.0 b/mapblockparser/testdata/0.0.0 deleted file mode 100644 index 350dc8f..0000000 Binary files a/mapblockparser/testdata/0.0.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.1.0 b/mapblockparser/testdata/0.1.0 deleted file mode 100644 index af71256..0000000 Binary files a/mapblockparser/testdata/0.1.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.10.0 b/mapblockparser/testdata/0.10.0 deleted file mode 100644 index c898a29..0000000 Binary files a/mapblockparser/testdata/0.10.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.2.0 b/mapblockparser/testdata/0.2.0 deleted file mode 100644 index 84b5a1c..0000000 Binary files a/mapblockparser/testdata/0.2.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.3.0 b/mapblockparser/testdata/0.3.0 deleted file mode 100644 index 64b3bc5..0000000 Binary files a/mapblockparser/testdata/0.3.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.4.0 b/mapblockparser/testdata/0.4.0 deleted file mode 100644 index 05dc431..0000000 Binary files a/mapblockparser/testdata/0.4.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.5.0 b/mapblockparser/testdata/0.5.0 deleted file mode 100644 index 92cd4f9..0000000 Binary files a/mapblockparser/testdata/0.5.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.6.0 b/mapblockparser/testdata/0.6.0 deleted file mode 100644 index ae4e38e..0000000 Binary files a/mapblockparser/testdata/0.6.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.7.0 b/mapblockparser/testdata/0.7.0 deleted file mode 100644 index f82c4a5..0000000 Binary files a/mapblockparser/testdata/0.7.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.8.0 b/mapblockparser/testdata/0.8.0 deleted file mode 100644 index 1dc9d49..0000000 Binary files a/mapblockparser/testdata/0.8.0 and /dev/null differ diff --git a/mapblockparser/testdata/0.9.0 b/mapblockparser/testdata/0.9.0 deleted file mode 100644 index fe215a7..0000000 Binary files a/mapblockparser/testdata/0.9.0 and /dev/null differ diff --git a/mapblockparser/testdata/11.0.2 b/mapblockparser/testdata/11.0.2 deleted file mode 100644 index 4b8626b..0000000 Binary files a/mapblockparser/testdata/11.0.2 and /dev/null differ diff --git a/mapblockparser/testdata/mb-with-metadata.bin b/mapblockparser/testdata/mb-with-metadata.bin deleted file mode 100644 index 987b0fd..0000000 Binary files a/mapblockparser/testdata/mb-with-metadata.bin and /dev/null differ diff --git a/mapobject/atm.go b/mapobject/atm.go index 2c02458..05106f3 100644 --- a/mapobject/atm.go +++ b/mapobject/atm.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type ATM struct{} -func (this *ATM) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *ATM) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { nodename := block.GetNodeName(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "atm") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "atm") if nodename == "atm:wtt" { o.Attributes["type"] = "wiretransfer" diff --git a/mapobject/bones.go b/mapobject/bones.go index aec5012..d070c79 100644 --- a/mapobject/bones.go +++ b/mapobject/bones.go @@ -1,14 +1,16 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" "strconv" + + "github.com/minetest-go/mapparser" ) type BonesBlock struct{} -func (this *BonesBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *BonesBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) invMap := block.Metadata.GetInventoryMapAtPos(x, y, z) @@ -18,7 +20,7 @@ func (this *BonesBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) return nil } - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "bones") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "bones") o.Attributes["time"] = md["time"] if _, ok := md["owner"]; ok { diff --git a/mapobject/border.go b/mapobject/border.go index 8c72391..850314f 100644 --- a/mapobject/border.go +++ b/mapobject/border.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type BorderBlock struct{} -func (this *BorderBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *BorderBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "border") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "border") o.Attributes["name"] = md["name"] o.Attributes["index"] = md["index"] o.Attributes["owner"] = md["owner"] diff --git a/mapobject/digilinelcd.go b/mapobject/digilinelcd.go index f684310..13d8531 100644 --- a/mapobject/digilinelcd.go +++ b/mapobject/digilinelcd.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type DigilineLcdBlock struct{} -func (this *DigilineLcdBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *DigilineLcdBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "digilinelcd") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "digilinelcd") o.Attributes["text"] = md["text"] o.Attributes["channel"] = md["channel"] diff --git a/mapobject/digiterms.go b/mapobject/digiterms.go index 7637645..0d6d79c 100644 --- a/mapobject/digiterms.go +++ b/mapobject/digiterms.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type DigitermsBlock struct{} -func (this *DigitermsBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *DigitermsBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "digiterm") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "digiterm") o.Attributes["display_text"] = md["display_text"] o.Attributes["channel"] = md["channel"] diff --git a/mapobject/fancyvend.go b/mapobject/fancyvend.go index 3719f42..2d233ca 100644 --- a/mapobject/fancyvend.go +++ b/mapobject/fancyvend.go @@ -1,18 +1,19 @@ package mapobject import ( + "mapserver/coords" "mapserver/luaparser" - "mapserver/mapblockparser" "mapserver/mapobjectdb" "math" "strconv" + "github.com/minetest-go/mapparser" "github.com/sirupsen/logrus" ) type FancyVend struct{} -func (this *FancyVend) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *FancyVend) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) nodename := block.GetNodeName(x, y, z) invMap := block.Metadata.GetInventoryMapAtPos(x, y, z) @@ -46,7 +47,7 @@ func (this *FancyVend) onMapObject(x, y, z int, block *mapblockparser.MapBlock) "x": x, "y": y, "z": z, - "pos": block.Pos, + "pos": mbpos, "err": err, } log.WithFields(fields).Error("Fancyvend setting error") @@ -84,7 +85,7 @@ func (this *FancyVend) onMapObject(x, y, z int, block *mapblockparser.MapBlock) stock_factor := int(float64(stock) / float64(out_count)) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "shop") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "shop") o.Attributes["owner"] = md["owner"] o.Attributes["type"] = "fancyvend" diff --git a/mapobject/jumpdrive.go b/mapobject/jumpdrive.go index cb7e2a7..c7ce5e4 100644 --- a/mapobject/jumpdrive.go +++ b/mapobject/jumpdrive.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type JumpdriveBlock struct{} -func (this *JumpdriveBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *JumpdriveBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "jumpdrive") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "jumpdrive") o.Attributes["owner"] = md["owner"] o.Attributes["radius"] = md["radius"] diff --git a/mapobject/label.go b/mapobject/label.go index e8f2cd4..662764b 100644 --- a/mapobject/label.go +++ b/mapobject/label.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type LabelBlock struct{} -func (this *LabelBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *LabelBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "label") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "label") o.Attributes["text"] = md["text"] o.Attributes["size"] = md["size"] o.Attributes["direction"] = md["direction"] diff --git a/mapobject/locator.go b/mapobject/locator.go index 2df41d8..d555d05 100644 --- a/mapobject/locator.go +++ b/mapobject/locator.go @@ -1,13 +1,15 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type Locator struct{} -func (this *Locator) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *Locator) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) nodename := block.GetNodeName(x, y, z) @@ -19,7 +21,7 @@ func (this *Locator) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *m level = "3" } - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "locator") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "locator") o.Attributes["owner"] = md["owner"] o.Attributes["name"] = md["name"] o.Attributes["active"] = md["active"] diff --git a/mapobject/luacontroller.go b/mapobject/luacontroller.go index a846d51..d777bc4 100644 --- a/mapobject/luacontroller.go +++ b/mapobject/luacontroller.go @@ -1,17 +1,19 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type LuaControllerBlock struct{} -func (this *LuaControllerBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *LuaControllerBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { //md := block.Metadata.GetMetadata(x, y, z) nodename := block.GetNodeName(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "luacontroller") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "luacontroller") //o.Attributes["code"] = md["code"] //o.Attributes["lc_memory"] = md["lc_memory"] diff --git a/mapobject/mission.go b/mapobject/mission.go index 6320591..57bb82f 100644 --- a/mapobject/mission.go +++ b/mapobject/mission.go @@ -1,20 +1,22 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type MissionBlock struct{} -func (this *MissionBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *MissionBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) if md["hidden"] == "1" { return nil } - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "mission") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "mission") o.Attributes["name"] = md["name"] o.Attributes["time"] = md["time"] o.Attributes["owner"] = md["owner"] diff --git a/mapobject/nuclearreactor.go b/mapobject/nuclearreactor.go index 9c458e3..6558938 100644 --- a/mapobject/nuclearreactor.go +++ b/mapobject/nuclearreactor.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type NuclearReactorBlock struct{} -func (this *NuclearReactorBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *NuclearReactorBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "nuclearreactor") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "nuclearreactor") o.Attributes["burn_time"] = md["burn_time"] o.Attributes["structure_accumulated_badness"] = md["structure_accumulated_badness"] diff --git a/mapobject/poi.go b/mapobject/poi.go index 666eb30..16c2604 100644 --- a/mapobject/poi.go +++ b/mapobject/poi.go @@ -1,18 +1,20 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type PoiBlock struct { Color string } -func (this *PoiBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *PoiBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "poi") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "poi") o.Attributes["name"] = md["name"] o.Attributes["category"] = md["category"] o.Attributes["url"] = md["url"] diff --git a/mapobject/privprotector.go b/mapobject/privprotector.go index 261ad45..798c0a5 100644 --- a/mapobject/privprotector.go +++ b/mapobject/privprotector.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type PrivProtectorBlock struct{} -func (this *PrivProtectorBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *PrivProtectorBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "privprotector") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "privprotector") o.Attributes["owner"] = md["owner"] o.Attributes["priv"] = md["priv"] diff --git a/mapobject/protector.go b/mapobject/protector.go index 86e81de..d661bca 100644 --- a/mapobject/protector.go +++ b/mapobject/protector.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type ProtectorBlock struct{} -func (this *ProtectorBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *ProtectorBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "protector") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "protector") o.Attributes["owner"] = md["owner"] o.Attributes["members"] = md["members"] diff --git a/mapobject/quarry.go b/mapobject/quarry.go index f45bb40..52c4652 100644 --- a/mapobject/quarry.go +++ b/mapobject/quarry.go @@ -1,20 +1,22 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type QuarryBlock struct{} -func (this *QuarryBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *QuarryBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) if md["owner"] == "" { return nil } - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "technicquarry") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "technicquarry") o.Attributes["owner"] = md["owner"] o.Attributes["dug"] = md["dug"] o.Attributes["enabled"] = md["enabled"] diff --git a/mapobject/sign.go b/mapobject/sign.go index 83caec8..97b9ff9 100644 --- a/mapobject/sign.go +++ b/mapobject/sign.go @@ -1,18 +1,20 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type SignBlock struct { Material string } -func (this *SignBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *SignBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "sign") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "sign") o.Attributes["display_text"] = md["text"] o.Attributes["material"] = this.Material diff --git a/mapobject/smartshop.go b/mapobject/smartshop.go index df4dfd7..75b710f 100644 --- a/mapobject/smartshop.go +++ b/mapobject/smartshop.go @@ -1,15 +1,17 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" "math" "strconv" + + "github.com/minetest-go/mapparser" ) type SmartShopBlock struct{} -func (this *SmartShopBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) []*mapobjectdb.MapObject { +func (this *SmartShopBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) []*mapobjectdb.MapObject { list := make([]*mapobjectdb.MapObject, 0) md := block.Metadata.GetMetadata(x, y, z) @@ -32,7 +34,7 @@ func (this *SmartShopBlock) onMapObject(x, y, z int, block *mapblockparser.MapBl continue } - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "shop") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "shop") o.Attributes["type"] = "smartshop" o.Attributes["owner"] = md["owner"] diff --git a/mapobject/technicanchor.go b/mapobject/technicanchor.go index 2c7a338..d1852f8 100644 --- a/mapobject/technicanchor.go +++ b/mapobject/technicanchor.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type TechnicAnchorBlock struct{} -func (this *TechnicAnchorBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *TechnicAnchorBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "technicanchor") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "technicanchor") o.Attributes["owner"] = md["owner"] o.Attributes["radius"] = md["radius"] o.Attributes["locked"] = md["locked"] diff --git a/mapobject/technicswitch.go b/mapobject/technicswitch.go index deda9c9..e6430ae 100644 --- a/mapobject/technicswitch.go +++ b/mapobject/technicswitch.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type TechnicSwitchBlock struct{} -func (this *TechnicSwitchBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *TechnicSwitchBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "technicswitch") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "technicswitch") o.Attributes["active"] = md["active"] o.Attributes["channel"] = md["channel"] o.Attributes["supply"] = md["supply"] diff --git a/mapobject/train.go b/mapobject/train.go index 5476071..4b11684 100644 --- a/mapobject/train.go +++ b/mapobject/train.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type TrainBlock struct{} -func (this *TrainBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *TrainBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "train") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "train") o.Attributes["station"] = md["station"] o.Attributes["line"] = md["line"] o.Attributes["index"] = md["index"] diff --git a/mapobject/travelnet.go b/mapobject/travelnet.go index ea64174..64f35bf 100644 --- a/mapobject/travelnet.go +++ b/mapobject/travelnet.go @@ -1,14 +1,16 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" "strings" + + "github.com/minetest-go/mapparser" ) type TravelnetBlock struct{} -func (tn *TravelnetBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (tn *TravelnetBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) // ignore (P) prefixed stations @@ -17,7 +19,7 @@ func (tn *TravelnetBlock) onMapObject(x, y, z int, block *mapblockparser.MapBloc return nil } - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "travelnet") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "travelnet") o.Attributes["owner"] = md["owner"] o.Attributes["station_name"] = md["station_name"] o.Attributes["station_network"] = md["station_network"] diff --git a/mapobject/xpprotector.go b/mapobject/xpprotector.go index d73a9a9..7360e39 100644 --- a/mapobject/xpprotector.go +++ b/mapobject/xpprotector.go @@ -1,16 +1,18 @@ package mapobject import ( - "mapserver/mapblockparser" + "mapserver/coords" "mapserver/mapobjectdb" + + "github.com/minetest-go/mapparser" ) type XPProtectorBlock struct{} -func (this *XPProtectorBlock) onMapObject(x, y, z int, block *mapblockparser.MapBlock) *mapobjectdb.MapObject { +func (this *XPProtectorBlock) onMapObject(mbpos *coords.MapBlockCoords, x, y, z int, block *mapparser.MapBlock) *mapobjectdb.MapObject { md := block.Metadata.GetMetadata(x, y, z) - o := mapobjectdb.NewMapObject(block.Pos, x, y, z, "xpprotector") + o := mapobjectdb.NewMapObject(mbpos, x, y, z, "xpprotector") o.Attributes["owner"] = md["owner"] o.Attributes["xpthreshold"] = md["xpthreshold"] diff --git a/tilerendererjob/common.go b/tilerendererjob/common.go index 82cb978..abddfad 100644 --- a/tilerendererjob/common.go +++ b/tilerendererjob/common.go @@ -3,9 +3,9 @@ package tilerendererjob import ( "mapserver/app" "mapserver/coords" - "mapserver/mapblockparser" "strconv" + "github.com/minetest-go/mapparser" "github.com/sirupsen/logrus" ) @@ -14,7 +14,7 @@ func getTileKey(tc *coords.TileCoords) string { strconv.Itoa(tc.Zoom) + "/" + strconv.Itoa(tc.LayerId) } -func renderMapblocks(ctx *app.App, mblist []*mapblockparser.MapBlock) int { +func renderMapblocks(ctx *app.App, mblist []*mapparser.MapBlock) int { tileRenderedMap := make(map[string]bool) tilecount := 0 totalRenderedMapblocks.Add(float64(len(mblist)))