This commit is contained in:
Tnze
2019-08-09 18:17:50 +08:00
parent 3aa48ab1be
commit c667d86153
2 changed files with 16 additions and 30 deletions

View File

@ -1,6 +1,7 @@
package bot package bot
import ( import (
"github.com/Tnze/go-mc/bot/world/entity"
"github.com/Tnze/go-mc/chat" "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 SoundPlay func(name string, category int, x, y, z float64, volume, pitch float32) error
PluginMessage func(channel string, data []byte) error PluginMessage func(channel string, data []byte) error
HeldItemChange func(slot int) error HeldItemChange func(slot int) error
WindowsItem func(id byte, slots []entity.Slot) error
WindowsItemChange func(id byte, slotID int, slot entity.Slot)error
} }

View File

@ -2,7 +2,6 @@ package bot
import ( import (
"bytes" "bytes"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
@ -101,7 +100,7 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) {
case data.SpawnPlayer: case data.SpawnPlayer:
// err = handleSpawnPlayerPacket(g, reader) // err = handleSpawnPlayerPacket(g, reader)
case data.WindowItems: case data.WindowItems:
//err = handleWindowItemsPacket(c, p) err = handleWindowItemsPacket(c, p)
case data.UpdateHealth: case data.UpdateHealth:
err = handleUpdateHealthPacket(c, p) err = handleUpdateHealthPacket(c, p)
case data.ChatMessageClientbound: case data.ChatMessageClientbound:
@ -114,7 +113,7 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) {
err = handleDisconnectPacket(c, p) err = handleDisconnectPacket(c, p)
disconnect = true disconnect = true
case data.SetSlot: case data.SetSlot:
//err = handleSetSlotPacket(c, p) err = handleSetSlotPacket(c, p)
case data.SoundEffect: case data.SoundEffect:
err = handleSoundEffect(c, p) err = handleSoundEffect(c, p)
case data.NamedSoundEffect: case data.NamedSoundEffect:
@ -184,6 +183,9 @@ func handleDisconnectPacket(c *Client, p pk.Packet) error {
} }
func handleSetSlotPacket(c *Client, p pk.Packet) error { func handleSetSlotPacket(c *Client, p pk.Packet) error {
if c.Events.WindowsItemChange == nil {
return nil
}
var ( var (
windowID pk.Byte windowID pk.Byte
slotI pk.Short slotI pk.Short
@ -193,22 +195,7 @@ func handleSetSlotPacket(c *Client, p pk.Packet) error {
return err return err
} }
switch int8(windowID) { return c.Events.WindowsItemChange(byte(windowID), int(slotI), slot)
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
} }
// func handleMultiBlockChangePacket(c *Client, p pk.Packet) error { // func handleMultiBlockChangePacket(c *Client, p pk.Packet) error {
@ -366,7 +353,7 @@ func (p *pluginMessageData) Decode(r pk.DecodeReader) error {
if err != nil { if err != nil {
return err return err
} }
*p = pluginMessageData(data) *p = data
return nil return nil
} }
@ -553,6 +540,10 @@ func handleKeepAlivePacket(c *Client, p pk.Packet) error {
} }
func handleWindowItemsPacket(c *Client, p pk.Packet) (err error) { func handleWindowItemsPacket(c *Client, p pk.Packet) (err error) {
if c.Events.WindowsItem == nil {
return nil
}
r := bytes.NewReader(p.Data) r := bytes.NewReader(p.Data)
var ( var (
windowID pk.Byte windowID pk.Byte
@ -573,16 +564,7 @@ func handleWindowItemsPacket(c *Client, p pk.Packet) (err error) {
slots = append(slots, slot) slots = append(slots, slot)
} }
switch windowID { return c.Events.WindowsItem(byte(windowID), slots)
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
} }
func sendPlayerPositionAndLookPacket(c *Client) { func sendPlayerPositionAndLookPacket(c *Client) {