diff --git a/inventory.go b/inventory.go index 320c6dc..526bfbe 100644 --- a/inventory.go +++ b/inventory.go @@ -30,8 +30,8 @@ func processInventory(p *Peer, data []byte) { p.invlists = lists } -func updateHandList(p *Peer, t *ToolCapabs) error { - item := " 1 0 " + t.String() +func updateHandList(p *Peer, srv string) error { + item := "multiserver:hand_" + srv list := "Width 1\n" list += "Item " + item + "\n" @@ -46,7 +46,10 @@ func updateHandList(p *Peer, t *ToolCapabs) error { p.invlists = make(map[string]bool) - _, err := p.Send(rudp.Pkt{Data: []byte(inv)}) + data := []byte{0, ToClientInventory} + data = append(data, []byte(inv)...) + + _, err := p.Send(rudp.Pkt{Data: data}) if err != nil { return err } diff --git a/itemdef.go b/itemdef.go index 9905f89..48bfc3b 100644 --- a/itemdef.go +++ b/itemdef.go @@ -6,7 +6,6 @@ import ( "encoding/binary" "io" "math" - "strconv" ) const ( @@ -110,55 +109,6 @@ func (t *ToolCapabs) SetPunchAttackUses(uses uint16) { t.punchAttackUses = uses } -// String returns a minetest meta string with the tool capabilities -func (t *ToolCapabs) String() string { - r := MetaBegin - - r += "tool_capabilities" - r += MetaKVDelim - r += "{\n" - r += "\t" - - r += "\"damage_groups\" : \n" - r += "\t{\n" - for group, value := range t.DamageGroups() { - r += "\t\t\"" + group + "\" : " - r += strconv.Itoa(int(value)) + ",\n" - } - r += "\t},\n" - - r += "\t\"full_punch_interval\" : " - r += strconv.FormatFloat(float64(t.PunchInt()), byte('e'), -1, 32) - r += ",\n" - - r += "\t\"groupcaps\" : \n" - r += "\t{\n" - for name, cap := range t.GroupCaps() { - r += "\t\t\"" + name + "\" : \n" - r += "\t\t{\n" - r += "\t\t\t\"name\" : " + cap.Name() + ",\n" - r += "\t\t\t\"uses\" : " + strconv.Itoa(int(cap.Uses())) + ",\n" - r += "\t\t\t\"max_level\" : " + strconv.Itoa(int(cap.MaxLevel())) + ",\n" - r += "\t\t\t\"times\" : \n" - r += "\t\t\t{\n" - for k, v := range cap.Times() { - r += "\t\t\t\t\"" + strconv.Itoa(int(k)) + "\" : " - r += strconv.FormatFloat(float64(v), byte('e'), -1, 32) - r += ",\n" - } - r += "\t\t\t},\n" - r += "\t\t},\n" - } - r += "\t},\n" - - r += "\t\"max_drop_level\" : " + strconv.Itoa(int(t.MaxDropLevel())) + ",\n" - - r += "\t\"punch_attack_uses\" : " + strconv.Itoa(int(t.PunchAttackUses())) + "\n" - r += MetaPairDelim - - return r -} - func rmToolCapabs(def []byte) []byte { itemNameLen := binary.BigEndian.Uint16(def[2:4]) desclen := binary.BigEndian.Uint16(def[4+itemNameLen : 6+itemNameLen]) @@ -185,7 +135,6 @@ func mergeItemdefs(mgrs map[string][]byte) error { var itemDefs []*ItemDef aliases := make(map[string]string) - handcapabs = make(map[string]*ToolCapabs) var handDef []byte // Extract definitions from CItemDefManager @@ -270,7 +219,13 @@ func mergeItemdefs(mgrs map[string][]byte) error { if len(handDef) == 0 { handDef = def } - handcapabs[srv] = tcaps + + newname := "multiserver:hand_" + srv + newdef := make([]byte, len(def)) + copy(newdef, def) + binary.BigEndian.PutUint16(newdef[2:4], uint16(len(newname))) + newdef = append(newdef[:4], append([]byte(newname), newdef[4+itemNameLen:]...)...) + itemDefs = append(itemDefs, &ItemDef{name: newname, data: newdef}) si += 2 + uint32(deflen) continue ItemLoop @@ -308,11 +263,6 @@ func mergeItemdefs(mgrs map[string][]byte) error { handdata := rmToolCapabs(handDef) - var compHanddata bytes.Buffer - handZw := zlib.NewWriter(&compHanddata) - handZw.Write(handdata) - handZw.Close() - hand := &ItemDef{ name: "", data: handdata, diff --git a/multiserver.go b/multiserver.go index 74f7b08..059893d 100644 --- a/multiserver.go +++ b/multiserver.go @@ -85,6 +85,8 @@ func main() { clt.SetServer(srv) + updateHandList(clt, clt.ServerName()) + go Proxy(clt, srv) go Proxy(srv, clt) }() diff --git a/redirect.go b/redirect.go index fb49c90..a7be3fa 100644 --- a/redirect.go +++ b/redirect.go @@ -146,7 +146,7 @@ func (p *Peer) Redirect(newsrv string) error { p.sounds = make(map[int32]bool) // Update hand capabs - err = updateHandList(p, handcapabs[newsrv]) + err = updateHandList(p, newsrv) if err != nil { return err }