Update /bot for 1.18
This commit is contained in:
@ -18,9 +18,9 @@ type Player struct {
|
||||
func NewPlayer(c *bot.Client, settings Settings) *Player {
|
||||
b := &Player{c: c, Settings: settings}
|
||||
c.Events.AddListener(
|
||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundLogin, F: b.handleJoinGamePacket},
|
||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundLogin, F: b.handleLoginPacket},
|
||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundKeepAlive, F: b.handleKeepAlivePacket},
|
||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundPlayerPosition, F: b.handlePlayerPositionAndLook},
|
||||
bot.PacketHandler{Priority: 0, ID: packetid.ClientboundPlayerPosition, F: b.handlePlayerPosition},
|
||||
)
|
||||
return b
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ type ServInfo struct {
|
||||
Brand string
|
||||
}
|
||||
|
||||
func (p *Player) handleJoinGamePacket(packet pk.Packet) error {
|
||||
func (p *Player) handleLoginPacket(packet pk.Packet) error {
|
||||
var WorldCount pk.VarInt
|
||||
var WorldNames = make([]pk.Identifier, 0)
|
||||
err := packet.Scan(
|
||||
@ -89,7 +89,8 @@ func (p *Player) handleJoinGamePacket(packet pk.Packet) error {
|
||||
pk.Boolean(p.Settings.ChatColors),
|
||||
pk.UnsignedByte(p.Settings.DisplayedSkinParts),
|
||||
pk.VarInt(p.Settings.MainHand),
|
||||
pk.Boolean(p.Settings.DisableTextFiltering),
|
||||
pk.Boolean(p.Settings.EnableTextFiltering),
|
||||
pk.Boolean(p.Settings.AllowListing),
|
||||
))
|
||||
if err != nil {
|
||||
return Error{err}
|
||||
|
@ -21,7 +21,7 @@ func (p Player) handleKeepAlivePacket(packet pk.Packet) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Player) handlePlayerPositionAndLook(packet pk.Packet) error {
|
||||
func (p *Player) handlePlayerPosition(packet pk.Packet) error {
|
||||
var (
|
||||
X, Y, Z pk.Double
|
||||
Yaw, Pitch pk.Float
|
||||
@ -48,7 +48,6 @@ func (p *Player) handlePlayerPositionAndLook(packet pk.Packet) error {
|
||||
packetid.ServerboundMoveVehicle,
|
||||
X, Y-1.62, Z,
|
||||
Yaw, Pitch,
|
||||
pk.Boolean(true),
|
||||
))
|
||||
if err != nil {
|
||||
return Error{err}
|
||||
|
@ -9,17 +9,17 @@ type Settings struct {
|
||||
DisplayedSkinParts uint8 //皮肤显示
|
||||
MainHand int //主手
|
||||
|
||||
// Disables filtering of text on signs and written book titles.
|
||||
// Currently always true in vanilla client (i.e. the filtering is disabled)
|
||||
DisableTextFiltering bool
|
||||
// Enables filtering of text on signs and written book titles.
|
||||
// Currently, always false (i.e. the filtering is disabled)
|
||||
EnableTextFiltering bool
|
||||
AllowListing bool
|
||||
|
||||
Brand string // The brand string presented to the server.
|
||||
// The brand string presented to the server.
|
||||
Brand string
|
||||
}
|
||||
|
||||
/*
|
||||
Used by Settings.DisplayedSkinParts.
|
||||
For each bits set if shows match part.
|
||||
*/
|
||||
// Used by Settings.DisplayedSkinParts.
|
||||
// For each bit set if shows match part.
|
||||
const (
|
||||
_ = 1 << iota
|
||||
Jacket
|
||||
|
@ -28,7 +28,7 @@ func PingAndList(addr string) ([]byte, time.Duration, error) {
|
||||
return pingAndList(addr, conn)
|
||||
}
|
||||
|
||||
// PingAndListTimeout PingAndLIstTimeout is the version of PingAndList with max request time.
|
||||
// PingAndListTimeout is the version of PingAndList with max request time.
|
||||
func PingAndListTimeout(addr string, timeout time.Duration) ([]byte, time.Duration, error) {
|
||||
deadLine := time.Now().Add(timeout)
|
||||
|
||||
|
@ -12,14 +12,19 @@ import (
|
||||
)
|
||||
|
||||
type Manager struct {
|
||||
c *bot.Client
|
||||
|
||||
Screens map[int]Container
|
||||
Inventory Inventory
|
||||
Cursor Slot
|
||||
events EventsListener
|
||||
// The last received State ID from server
|
||||
stateID int32
|
||||
}
|
||||
|
||||
func NewManager(c *bot.Client, e EventsListener) *Manager {
|
||||
m := &Manager{
|
||||
c: c,
|
||||
Screens: make(map[int]Container),
|
||||
events: e,
|
||||
}
|
||||
@ -33,6 +38,18 @@ func NewManager(c *bot.Client, e EventsListener) *Manager {
|
||||
return m
|
||||
}
|
||||
|
||||
//func (m *Manager) ContainerClick(id int, slot int16, button byte, mode int32) error {
|
||||
// return m.c.Conn.WritePacket(pk.Marshal(
|
||||
// packetid.ServerboundContainerClick,
|
||||
// pk.UnsignedByte(id),
|
||||
// pk.VarInt(m.stateID),
|
||||
// pk.Short(slot),
|
||||
// pk.Byte(button),
|
||||
// pk.VarInt(mode),
|
||||
// pk.VarInt()
|
||||
// ))
|
||||
//}
|
||||
|
||||
func (m *Manager) onOpenScreen(p pk.Packet) error {
|
||||
var (
|
||||
ContainerID pk.VarInt
|
||||
@ -72,6 +89,7 @@ func (m *Manager) onSetContentPacket(p pk.Packet) error {
|
||||
); err != nil {
|
||||
return Error{err}
|
||||
}
|
||||
m.stateID = int32(StateID)
|
||||
// copy the slot data to container
|
||||
container, ok := m.Screens[int(ContainerID)]
|
||||
if !ok {
|
||||
@ -113,19 +131,21 @@ func (m *Manager) onCloseScreen(p pk.Packet) error {
|
||||
func (m *Manager) onSetSlot(p pk.Packet) (err error) {
|
||||
var (
|
||||
ContainerID pk.Byte
|
||||
StateID pk.VarInt
|
||||
SlotID pk.Short
|
||||
ItemStack Slot
|
||||
SlotData Slot
|
||||
)
|
||||
if err := p.Scan(&ContainerID, &SlotID, &ItemStack); err != nil {
|
||||
if err := p.Scan(&ContainerID, &StateID, &SlotID, &SlotData); err != nil {
|
||||
return Error{err}
|
||||
}
|
||||
|
||||
m.stateID = int32(StateID)
|
||||
if ContainerID == -1 && SlotID == -1 {
|
||||
m.Cursor = ItemStack
|
||||
m.Cursor = SlotData
|
||||
} else if ContainerID == -2 {
|
||||
err = m.Inventory.onSetSlot(int(SlotID), ItemStack)
|
||||
err = m.Inventory.onSetSlot(int(SlotID), SlotData)
|
||||
} else if c, ok := m.Screens[int(ContainerID)]; ok {
|
||||
err = c.onSetSlot(int(SlotID), ItemStack)
|
||||
err = c.onSetSlot(int(SlotID), SlotData)
|
||||
}
|
||||
|
||||
if m.events.SetSlot != nil {
|
||||
|
Reference in New Issue
Block a user