This commit is contained in:
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
Reference in New Issue
Block a user