From a311c7c2e3e6726507481202b5aa697882a200fe Mon Sep 17 00:00:00 2001 From: Thomas Rudin Date: Mon, 7 Jan 2019 19:53:05 +0100 Subject: [PATCH] working block id mappings --- mapblockparser/mapblock.go | 10 ++++++---- mapblockparser/parse.go | 34 ++++++++++++++++++++++++++++++++++ mapblockparser/parse_test.go | 7 ++++++- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/mapblockparser/mapblock.go b/mapblockparser/mapblock.go index 57206e3..e3c2e1e 100644 --- a/mapblockparser/mapblock.go +++ b/mapblockparser/mapblock.go @@ -1,15 +1,17 @@ package mapblockparser type MapBlock struct { - Version byte - Underground bool - Mapdata []byte - Metadata Metadata + Version byte + Underground bool + Mapdata []byte + Metadata Metadata + BlockMapping map[int]string } func NewMapblock() MapBlock { mb := MapBlock{} mb.Metadata = NewMetadata() + mb.BlockMapping = make(map[int]string) return mb } diff --git a/mapblockparser/parse.go b/mapblockparser/parse.go index 36f4fe6..be82172 100644 --- a/mapblockparser/parse.go +++ b/mapblockparser/parse.go @@ -53,5 +53,39 @@ func Parse(data []byte) (*MapBlock, error) { 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 + } + return &mapblock, nil } diff --git a/mapblockparser/parse_test.go b/mapblockparser/parse_test.go index c002c56..1035dad 100644 --- a/mapblockparser/parse_test.go +++ b/mapblockparser/parse_test.go @@ -1,6 +1,7 @@ package mapblockparser import ( + "fmt" "io/ioutil" "strconv" "testing" @@ -72,11 +73,15 @@ func TestParse2(t *testing.T) { t.Error(err) } - _, err = Parse(data) + mapblock, err := Parse(data) if err != nil { t.Error(err) } + + for k, v := range mapblock.BlockMapping { + fmt.Println("Key", k, "Value", v) + } } func TestParse3(t *testing.T) {