1.21.8 data
Some checks failed
CodeQL / Analyze (go) (push) Has been cancelled
Go / Test (1.22) (push) Has been cancelled
Go / Test (^1.22) (push) Has been cancelled

This commit is contained in:
2025-08-22 06:17:33 +08:00
parent 133e3fab4a
commit 0958972953
173 changed files with 13782 additions and 406 deletions

51
bot/event.go Normal file
View File

@ -0,0 +1,51 @@
package bot
import (
"sort"
"strconv"
"github.com/Tnze/go-mc/data/packetid"
pk "github.com/Tnze/go-mc/net/packet"
)
type Events struct {
generic []PacketHandler // for every packet
handlers [][]PacketHandler // for specific packet id only
}
func (e *Events) AddListener(listeners ...PacketHandler) {
for _, l := range listeners {
// panic if l.ID is invalid
if l.ID < 0 || int(l.ID) >= len(e.handlers) {
panic("Invalid packet ID (" + strconv.Itoa(int(l.ID)) + ")")
}
if s := e.handlers[l.ID]; s == nil {
e.handlers[l.ID] = []PacketHandler{l}
} else {
e.handlers[l.ID] = append(s, l)
sortPacketHandlers(e.handlers[l.ID])
}
}
}
// AddGeneric adds listeners like AddListener, but the packet ID is ignored.
// Generic listener is always called before specific packet listener.
func (e *Events) AddGeneric(listeners ...PacketHandler) {
e.generic = append(e.generic, listeners...)
sortPacketHandlers(e.generic)
}
type (
PacketHandlerFunc func(p pk.Packet) error
PacketHandler struct {
ID packetid.ClientboundPacketID
Priority int
F func(p pk.Packet) error
}
)
func sortPacketHandlers(slice []PacketHandler) {
sort.SliceStable(slice, func(i, j int) bool {
return slice[i].Priority > slice[j].Priority
})
}