diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-01 19:16:07 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-01 19:16:07 +0200 |
commit | 2361256878f8ced752868e343bd600ea18e0dbb0 (patch) | |
tree | 6bb28155f637f58796158588a7493763e5b668ce | |
parent | 1d19ab0ea426e43298cf009f5662f22a6b733437 (diff) |
Fix ToolCaps JSON (de)serialization
-rw-r--r-- | client_conn.go | 7 | ||||
-rw-r--r-- | content.go | 2 | ||||
-rw-r--r-- | toolcaps.go | 28 |
3 files changed, 30 insertions, 7 deletions
diff --git a/client_conn.go b/client_conn.go index 8eb5dcd..0014cf4 100644 --- a/client_conn.go +++ b/client_conn.go @@ -437,7 +437,12 @@ func handleClt(cc *clientConn) { }) cc.SendCmd(&mt.ToCltNodeDefs{Defs: cc.nodeDefs}) - cc.itemDefs = []mt.ItemDef{} + for i, def := range cc.itemDefs { + cc.itemDefs[i] = mt.ItemDef{ + Name: def.Name, + ToolCaps: def.ToolCaps, + } + } cc.nodeDefs = []mt.NodeDef{} var files []struct{ Name, Base64SHA1 string } @@ -274,8 +274,8 @@ func muxItemDefs(conns []*contentConn) ([]mt.ItemDef, []struct{ Alias, Orig stri if def.Name == "" { def.Name = "hand" } - prepend(cc.name, &def.Name) + prepend(cc.name, &def.Name) prependTexture(cc.name, &def.InvImg) prependTexture(cc.name, &def.WieldImg) prepend(cc.name, &def.PlacePredict) diff --git a/toolcaps.go b/toolcaps.go index 5dd25a8..11818a2 100644 --- a/toolcaps.go +++ b/toolcaps.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "io" + "strings" "github.com/anon55555/mt" ) @@ -11,13 +12,13 @@ type ToolGroupCaps struct { Uses int16 `json:"uses"` MaxLvl int16 `json:"maxlevel"` - Times map[int16]float32 `json:"times"` + Times []float32 `json:"times"` } type ToolCaps struct { NonNil bool `json:"-"` - AttackCooldown float32 `json:"full_punch_interval` + AttackCooldown float32 `json:"full_punch_interval"` MaxDropLvl int16 `json:"max_drop_level"` GroupCaps map[string]ToolGroupCaps `json:"groupcaps"` @@ -44,7 +45,7 @@ func (t ToolCaps) toMT() mt.ToolCaps { for k2, v2 := range v.Times { gc.Times = append(gc.Times, mt.DigTime{ - Rating: k2, + Rating: int16(k2), Time: v2, }) } @@ -76,6 +77,18 @@ func (t *ToolCaps) fromMT(tc mt.ToolCaps) { MaxLvl: gc.MaxLvl, } + var max int16 + for _, dt := range gc.Times { + if dt.Rating > max { + max = dt.Rating + } + } + + g.Times = make([]float32, max+1) + for i := range g.Times { + g.Times[i] = -1 + } + for _, dt := range gc.Times { g.Times[dt.Rating] = dt.Time } @@ -89,8 +102,13 @@ func (t *ToolCaps) fromMT(tc mt.ToolCaps) { } func (t ToolCaps) SerializeJSON(w io.Writer) error { - encoder := json.NewEncoder(w) - return encoder.Encode(t) + b := &strings.Builder{} + encoder := json.NewEncoder(b) + err := encoder.Encode(t) + + s := strings.ReplaceAll(b.String(), "-1", "null") + io.WriteString(w, s) + return err } func (t *ToolCaps) DeserializeJSON(r io.Reader) error { |