aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2021-09-01 19:16:07 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2021-09-01 19:16:07 +0200
commit2361256878f8ced752868e343bd600ea18e0dbb0 (patch)
tree6bb28155f637f58796158588a7493763e5b668ce
parent1d19ab0ea426e43298cf009f5662f22a6b733437 (diff)
Fix ToolCaps JSON (de)serialization
-rw-r--r--client_conn.go7
-rw-r--r--content.go2
-rw-r--r--toolcaps.go28
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 }
diff --git a/content.go b/content.go
index 97e25f6..cd8455f 100644
--- a/content.go
+++ b/content.go
@@ -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 {