From c667d86153c63248a5a0a689221fecd9c7759a99 Mon Sep 17 00:00:00 2001 From: Tnze Date: Fri, 9 Aug 2019 18:17:50 +0800 Subject: [PATCH] #4 --- bot/event.go | 4 ++++ bot/ingame.go | 42 ++++++++++++------------------------------ 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/bot/event.go b/bot/event.go index 3d57cd7..83da7f1 100644 --- a/bot/event.go +++ b/bot/event.go @@ -1,6 +1,7 @@ package bot import ( + "github.com/Tnze/go-mc/bot/world/entity" "github.com/Tnze/go-mc/chat" ) @@ -13,4 +14,7 @@ type eventBroker struct { SoundPlay func(name string, category int, x, y, z float64, volume, pitch float32) error PluginMessage func(channel string, data []byte) error HeldItemChange func(slot int) error + + WindowsItem func(id byte, slots []entity.Slot) error + WindowsItemChange func(id byte, slotID int, slot entity.Slot)error } diff --git a/bot/ingame.go b/bot/ingame.go index 23bf64b..ebffe03 100644 --- a/bot/ingame.go +++ b/bot/ingame.go @@ -2,7 +2,6 @@ package bot import ( "bytes" - "errors" "fmt" "io/ioutil" @@ -101,7 +100,7 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) { case data.SpawnPlayer: // err = handleSpawnPlayerPacket(g, reader) case data.WindowItems: - //err = handleWindowItemsPacket(c, p) + err = handleWindowItemsPacket(c, p) case data.UpdateHealth: err = handleUpdateHealthPacket(c, p) case data.ChatMessageClientbound: @@ -114,7 +113,7 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) { err = handleDisconnectPacket(c, p) disconnect = true case data.SetSlot: - //err = handleSetSlotPacket(c, p) + err = handleSetSlotPacket(c, p) case data.SoundEffect: err = handleSoundEffect(c, p) case data.NamedSoundEffect: @@ -184,6 +183,9 @@ func handleDisconnectPacket(c *Client, p pk.Packet) error { } func handleSetSlotPacket(c *Client, p pk.Packet) error { + if c.Events.WindowsItemChange == nil { + return nil + } var ( windowID pk.Byte slotI pk.Short @@ -193,22 +195,7 @@ func handleSetSlotPacket(c *Client, p pk.Packet) error { return err } - switch int8(windowID) { - case -1: - // set cursor slot - - case 0: - if slotI >= 36 && slotI < 45 { - // Update Cooldown - } - fallthrough - case -2: - // set inventory - c.Inventory[slotI] = slot - default: - //other window - } - return nil + return c.Events.WindowsItemChange(byte(windowID), int(slotI), slot) } // func handleMultiBlockChangePacket(c *Client, p pk.Packet) error { @@ -366,7 +353,7 @@ func (p *pluginMessageData) Decode(r pk.DecodeReader) error { if err != nil { return err } - *p = pluginMessageData(data) + *p = data return nil } @@ -553,6 +540,10 @@ func handleKeepAlivePacket(c *Client, p pk.Packet) error { } func handleWindowItemsPacket(c *Client, p pk.Packet) (err error) { + if c.Events.WindowsItem == nil { + return nil + } + r := bytes.NewReader(p.Data) var ( windowID pk.Byte @@ -573,16 +564,7 @@ func handleWindowItemsPacket(c *Client, p pk.Packet) (err error) { slots = append(slots, slot) } - switch windowID { - case 0: //is player's inventory - if len(slots) != len(c.Inventory) { - return errors.New("inventory len not match") - } - for i, v := range slots { //copy this Inventory to player's Inventory - c.Inventory[i] = v - } - } - return nil + return c.Events.WindowsItem(byte(windowID), slots) } func sendPlayerPositionAndLookPacket(c *Client) {