move SystemChat event from bot/basic to bot/msg

This commit is contained in:
Tnze
2023-01-01 22:12:03 +08:00
parent 88356fd576
commit e12b2f368d
6 changed files with 42 additions and 30 deletions

View File

@ -15,7 +15,6 @@
// Handles some basic event you probably need.
// - GameStart
// - ChatMsg
// - SystemMsg
// - Disconnect
// - HealthChange
// - Death

View File

@ -9,7 +9,6 @@ import (
type EventsListener struct {
GameStart func() error
SystemMsg func(c chat.Message, overlay bool) error
Disconnect func(reason chat.Message) error
HealthChange func(health float32) error
Death func() error
@ -21,9 +20,6 @@ func (e EventsListener) attach(p *Player) {
if e.GameStart != nil {
attachJoinGameHandler(p.c, e.GameStart)
}
if e.SystemMsg != nil {
attachSystemMsg(p.c, e.SystemMsg)
}
if e.Disconnect != nil {
attachDisconnect(p.c, e.Disconnect)
}
@ -41,20 +37,6 @@ func attachJoinGameHandler(c *bot.Client, handler func() error) {
})
}
func attachSystemMsg(c *bot.Client, handler func(c chat.Message, overlay bool) error) {
c.Events.AddListener(bot.PacketHandler{
Priority: 64, ID: packetid.ClientboundSystemChat,
F: func(p pk.Packet) error {
var msg chat.Message
var pos pk.Boolean
if err := p.Scan(&msg, &pos); err != nil {
return Error{err}
}
return handler(msg, bool(pos))
},
})
}
func attachDisconnect(c *bot.Client, handler func(reason chat.Message) error) {
c.Events.AddListener(bot.PacketHandler{
Priority: 64, ID: packetid.ClientboundDisconnect,

View File

@ -34,6 +34,12 @@ func New(c *bot.Client, p *basic.Player, pl *playerlist.PlayerList, events Event
events: events,
SignatureCache: sign.NewSignatureCache(),
}
if events.SystemChat != nil {
c.Events.AddListener(bot.PacketHandler{
Priority: 64, ID: packetid.ClientboundSystemChat,
F: m.handleSystemMessage,
})
}
if events.PlayerChatMessage != nil {
c.Events.AddListener(bot.PacketHandler{
Priority: 64, ID: packetid.ClientboundPlayerChat,
@ -49,6 +55,15 @@ func New(c *bot.Client, p *basic.Player, pl *playerlist.PlayerList, events Event
return m
}
func (m *Manager) handleSystemMessage(p pk.Packet) error {
var msg chat.Message
var overlay pk.Boolean
if err := p.Scan(&msg, &overlay); err != nil {
return err
}
return m.events.SystemChat(msg, bool(overlay))
}
func (m *Manager) handlePlayerChat(packet pk.Packet) error {
var (
sender pk.UUID

View File

@ -3,6 +3,7 @@ package msg
import "github.com/Tnze/go-mc/chat"
type EventsHandler struct {
SystemChat func(msg chat.Message, overlay bool) error
PlayerChatMessage func(msg chat.Message, validated bool) error
DisguisedChat func(msg chat.Message) error
}

View File

@ -8,6 +8,8 @@ import (
"github.com/Tnze/go-mc/bot"
"github.com/Tnze/go-mc/bot/basic"
"github.com/Tnze/go-mc/bot/msg"
"github.com/Tnze/go-mc/bot/playerlist"
"github.com/Tnze/go-mc/chat"
_ "github.com/Tnze/go-mc/data/lang/en-us"
"github.com/Tnze/go-mc/data/packetid"
@ -20,6 +22,9 @@ var (
c *bot.Client
p *basic.Player
playerList *playerlist.PlayerList
chatHandler *msg.Manager
watch chan time.Time
)
@ -28,10 +33,15 @@ func main() {
c = bot.NewClient()
p = basic.NewPlayer(c, basic.DefaultSettings, basic.EventsListener{
GameStart: onGameStart,
SystemMsg: onSystemMsg,
Disconnect: onDisconnect,
Death: onDeath,
})
playerList = playerlist.New(c)
chatHandler = msg.New(c, p, playerList, msg.EventsHandler{
SystemChat: onSystemChat,
PlayerChatMessage: onPlayerChat,
DisguisedChat: onDisguisedChat,
})
// Register event handlers
@ -106,13 +116,18 @@ func onSound(id int, category int, x, y, z float64, volume, pitch float32) error
return nil
}
func onChatMsg(c chat.Message) error {
log.Println("Chat:", c)
func onSystemChat(c chat.Message, overlay bool) error {
log.Printf("System Chat: %v, Overlay: %v", c, overlay)
return nil
}
func onSystemMsg(c chat.Message, overlay bool) error {
log.Printf("System: %v, Overlay: %v", c, overlay)
func onPlayerChat(c chat.Message, _ bool) error {
log.Println("Player Chat:", c)
return nil
}
func onDisguisedChat(c chat.Message) error {
log.Println("Disguised Chat:", c)
return nil
}

View File

@ -49,13 +49,13 @@ func main() {
}
player = basic.NewPlayer(client, basic.DefaultSettings, basic.EventsListener{
GameStart: onGameStart,
SystemMsg: onSystemMsg,
Disconnect: onDisconnect,
HealthChange: onHealthChange,
Death: onDeath,
})
playerList = playerlist.New(client)
chatHandler = msg.New(client, player, playerList, msg.EventsHandler{
SystemChat: onSystemMsg,
PlayerChatMessage: onPlayerMsg,
DisguisedChat: onDisguisedMsg,
})
@ -117,6 +117,11 @@ func onGameStart() error {
return nil // if err isn't nil, HandleGame() will return it.
}
func onSystemMsg(c chat.Message, overlay bool) error {
log.Printf("System: %v, Overlay: %v", c, overlay)
return nil
}
func onPlayerMsg(msg chat.Message, validated bool) error {
var prefix string
if !validated {
@ -131,11 +136,6 @@ func onDisguisedMsg(msg chat.Message) error {
return nil
}
func onSystemMsg(c chat.Message, overlay bool) error {
log.Printf("System: %v, Overlay: %v", c, overlay)
return nil
}
func onChunkLoad(pos level.ChunkPos) error {
log.Println("Load chunk:", pos)
return nil