X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=deserialize.go;h=78b9ea2573699faac004e947a6e2f2270161ad2c;hb=2f0d89c5cfb101bccf7bbe8be1b070ce2a4fee4c;hp=7980ca6ff8968989fd31ae901e3f7b44647b9125;hpb=e63a04085cf4a7a89eca1968bb5c1631f6202815;p=mtmap.git diff --git a/deserialize.go b/deserialize.go index 7980ca6..78b9ea2 100644 --- a/deserialize.go +++ b/deserialize.go @@ -86,65 +86,67 @@ func Deserialize(r io.Reader, idNameMap map[string]mt.Content) *MapBlk { panic(err) } - if version != NodeMetaVer { - panic(ErrInvalidNodeMetaVer) - } - - var count uint16 - if err := binary.Read(r, binary.BigEndian, &count); err != nil { - panic(err) - } - - for i := uint16(0); i < count; i++ { - var pos uint16 - if err := binary.Read(r, binary.BigEndian, &pos); err != nil { - panic(err) + if version != 0 { + if version != NodeMetaVer { + panic(ErrInvalidNodeMetaVer) } - var num uint32 - if err := binary.Read(r, binary.BigEndian, &num); err != nil { + var count uint16 + if err := binary.Read(r, binary.BigEndian, &count); err != nil { panic(err) } - var data = &mt.NodeMeta{} - data.Fields = make([]mt.NodeMetaField, 0) - for j := uint32(0); j < num; j++ { - var field mt.NodeMetaField - - var lenName uint16 - if err := binary.Read(r, binary.BigEndian, &lenName); err != nil { + for i := uint16(0); i < count; i++ { + var pos uint16 + if err := binary.Read(r, binary.BigEndian, &pos); err != nil { panic(err) } - var name = make([]byte, lenName) - if err := binary.Read(r, binary.BigEndian, &name); err != nil { + var num uint32 + if err := binary.Read(r, binary.BigEndian, &num); err != nil { panic(err) } - field.Name = string(name) - var lenValue uint32 - if err := binary.Read(r, binary.BigEndian, &lenValue); err != nil { - panic(err) + var data = &mt.NodeMeta{} + data.Fields = make([]mt.NodeMetaField, 0) + for j := uint32(0); j < num; j++ { + var field mt.NodeMetaField + + var lenName uint16 + if err := binary.Read(r, binary.BigEndian, &lenName); err != nil { + panic(err) + } + + var name = make([]byte, lenName) + if err := binary.Read(r, binary.BigEndian, &name); err != nil { + panic(err) + } + field.Name = string(name) + + var lenValue uint32 + if err := binary.Read(r, binary.BigEndian, &lenValue); err != nil { + panic(err) + } + + var value = make([]byte, lenValue) + if err := binary.Read(r, binary.BigEndian, &value); err != nil { + panic(err) + } + field.Value = string(value) + + if err := binary.Read(r, binary.BigEndian, &field.Private); err != nil { + panic(err) + } + + data.Fields = append(data.Fields, field) } - var value = make([]byte, lenValue) - if err := binary.Read(r, binary.BigEndian, &value); err != nil { + if err := data.Inv.Deserialize(r); err != nil { panic(err) } - field.Value = string(value) - if err := binary.Read(r, binary.BigEndian, &field.Private); err != nil { - panic(err) - } - - data.Fields = append(data.Fields, field) + blk.NodeMetas[pos] = data } - - if err := data.Inv.Deserialize(r); err != nil { - panic(err) - } - - blk.NodeMetas[pos] = data } if _, err := io.Copy(io.Discard, r); err != nil { @@ -245,19 +247,27 @@ func Deserialize(r io.Reader, idNameMap map[string]mt.Content) *MapBlk { for i := 0; i < 4096; i++ { id := blk.Param0[i] - if isSpecial(id) { - continue - } name, ok := nameIdMap[id] if !ok { panic(ErrInvalidNodeId{id}) } - blk.Param0[i], ok = idNameMap[name] - if !ok { - panic(ErrInvalidNodeName{name}) + switch name { + case "unknown": + id = mt.Unknown + case "air": + id = mt.Air + case "ignore": + id = mt.Ignore + default: + id, ok = idNameMap[name] + if !ok { + panic(ErrInvalidNodeName{name}) + } } + + blk.Param0[i] = id } return blk