Start implementing boilerplate for manipulating inventory
This commit is contained in:
@ -9,7 +9,9 @@ import (
|
|||||||
"github.com/Tnze/go-mc/bot/world"
|
"github.com/Tnze/go-mc/bot/world"
|
||||||
"github.com/Tnze/go-mc/bot/world/entity"
|
"github.com/Tnze/go-mc/bot/world/entity"
|
||||||
"github.com/Tnze/go-mc/bot/world/entity/player"
|
"github.com/Tnze/go-mc/bot/world/entity/player"
|
||||||
|
"github.com/Tnze/go-mc/data"
|
||||||
"github.com/Tnze/go-mc/net"
|
"github.com/Tnze/go-mc/net"
|
||||||
|
"github.com/Tnze/go-mc/net/packet"
|
||||||
pk "github.com/Tnze/go-mc/net/packet"
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -47,6 +49,10 @@ func (c *Client) Close() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) SendCloseWindow(windowID byte) error {
|
||||||
|
return c.conn.WritePacket(packet.Marshal(data.CloseWindowServerbound, pk.UnsignedByte(windowID)))
|
||||||
|
}
|
||||||
|
|
||||||
// NewClient init and return a new Client.
|
// NewClient init and return a new Client.
|
||||||
//
|
//
|
||||||
// A new Client has default name "Steve" and zero UUID.
|
// A new Client has default name "Steve" and zero UUID.
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
||||||
pk "github.com/Tnze/go-mc/net/packet"
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
|
"github.com/Tnze/go-mc/net/ptypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
type seenPacketFlags uint8
|
type seenPacketFlags uint8
|
||||||
@ -41,6 +42,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
|
||||||
|
OpenWindow func(pkt ptypes.OpenWindow) error
|
||||||
|
|
||||||
// ExperienceChange will be called every time player's experience level updates.
|
// ExperienceChange will be called every time player's experience level updates.
|
||||||
// Parameters:
|
// Parameters:
|
||||||
|
@ -149,6 +149,8 @@ func (c *Client) handlePacket(p pk.Packet) (disconnect bool, err error) {
|
|||||||
err = handleHeldItemPacket(c, p)
|
err = handleHeldItemPacket(c, p)
|
||||||
case data.WindowItems:
|
case data.WindowItems:
|
||||||
err = handleWindowItemsPacket(c, p)
|
err = handleWindowItemsPacket(c, p)
|
||||||
|
case data.OpenWindow:
|
||||||
|
err = handleOpenWindowPacket(c, p)
|
||||||
|
|
||||||
case data.DeclareRecipes:
|
case data.DeclareRecipes:
|
||||||
// handleDeclareRecipesPacket(g, reader)
|
// handleDeclareRecipesPacket(g, reader)
|
||||||
@ -276,7 +278,7 @@ func handleEntityAnimationPacket(c *Client, p pk.Packet) error {
|
|||||||
if err := se.Decode(p); err != nil {
|
if err := se.Decode(p); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf("EntityAnimationClientbound: %+v\n", se)
|
// fmt.Printf("EntityAnimationClientbound: %+v\n", se)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,7 +290,7 @@ func handleEntityStatusPacket(c *Client, p pk.Packet) error {
|
|||||||
if err := p.Scan(&id, &status); err != nil {
|
if err := p.Scan(&id, &status); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf("EntityStatus: %v, %v\n", id, status)
|
// fmt.Printf("EntityStatus: %v, %v\n", id, status)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -722,6 +724,18 @@ func handleWindowItemsPacket(c *Client, p pk.Packet) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleOpenWindowPacket(c *Client, p pk.Packet) error {
|
||||||
|
var pkt ptypes.OpenWindow
|
||||||
|
if err := pkt.Decode(p); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Events.OpenWindow != nil {
|
||||||
|
return c.Events.OpenWindow(pkt)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func handleSetExperience(c *Client, p pk.Packet) (err error) {
|
func handleSetExperience(c *Client, p pk.Packet) (err error) {
|
||||||
var (
|
var (
|
||||||
bar pk.Float
|
bar pk.Float
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/Tnze/go-mc/bot/world/entity"
|
"github.com/Tnze/go-mc/bot/world/entity"
|
||||||
|
"github.com/Tnze/go-mc/chat"
|
||||||
"github.com/Tnze/go-mc/nbt"
|
"github.com/Tnze/go-mc/nbt"
|
||||||
pk "github.com/Tnze/go-mc/net/packet"
|
pk "github.com/Tnze/go-mc/net/packet"
|
||||||
)
|
)
|
||||||
@ -52,3 +53,17 @@ func (p *WindowItems) Decode(pkt pk.Packet) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OpenWindow is a clientbound packet which opens an inventory.
|
||||||
|
type OpenWindow struct {
|
||||||
|
WindowID pk.VarInt
|
||||||
|
WindowType pk.VarInt
|
||||||
|
Title chat.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *OpenWindow) Decode(pkt pk.Packet) error {
|
||||||
|
if err := pkt.Scan(&p.WindowID, &p.WindowType, &p.Title); err != nil && !errors.Is(err, nbt.ErrEND) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user