handle bundle

This commit is contained in:
Tnze
2023-06-23 10:50:36 +08:00
parent a2cae2b77b
commit f8aaf85c2a

View File

@ -1,6 +1,7 @@
package bot
import (
"errors"
"fmt"
"github.com/Tnze/go-mc/data/packetid"
@ -17,6 +18,12 @@ func (c *Client) HandleGame() error {
return err
}
if p.ID == int32(packetid.BundleDelimiter) {
err := c.handleBundlePackets()
if err != nil {
return err
}
} else {
// handle packets
err := c.handlePacket(p)
if err != nil {
@ -26,6 +33,7 @@ func (c *Client) HandleGame() error {
// return the packet buffer
c.Conn.pool.Put(p.Data)
}
}
}
type PacketHandlerError struct {
@ -41,6 +49,33 @@ func (d PacketHandlerError) Unwrap() error {
return d.Err
}
func (c *Client) handleBundlePackets() (err error) {
var packets []pk.Packet
for i := 0; i < 4096; i++ {
var p pk.Packet
// Read packets
if err := c.Conn.ReadPacket(&p); err != nil {
return err
}
if p.ID == int32(packetid.BundleDelimiter) {
// bundle finished
goto handlePackets
}
packets = append(packets, p)
}
return errors.New("packet number of a bundle out of limit")
handlePackets:
for i := range packets {
if err := c.handlePacket(packets[i]); err != nil {
return err
}
}
return nil
}
func (c *Client) handlePacket(p pk.Packet) (err error) {
packetID := packetid.ClientboundPacketID(p.ID)
for _, handler := range c.Events.generic {