From e12b2f368ddff225defe2ee4647cdcd4ee572550 Mon Sep 17 00:00:00 2001 From: Tnze Date: Sun, 1 Jan 2023 22:12:03 +0800 Subject: [PATCH] move SystemChat event from `bot/basic` to `bot/msg` --- bot/basic/basic.go | 1 - bot/basic/events.go | 18 ------------------ bot/msg/chat.go | 15 +++++++++++++++ bot/msg/events.go | 1 + examples/autofish/autofish.go | 25 ++++++++++++++++++++----- examples/daze/daze.go | 12 ++++++------ 6 files changed, 42 insertions(+), 30 deletions(-) diff --git a/bot/basic/basic.go b/bot/basic/basic.go index 03ee4b0..2378732 100644 --- a/bot/basic/basic.go +++ b/bot/basic/basic.go @@ -15,7 +15,6 @@ // Handles some basic event you probably need. // - GameStart // - ChatMsg -// - SystemMsg // - Disconnect // - HealthChange // - Death diff --git a/bot/basic/events.go b/bot/basic/events.go index c88e6dd..37b7b74 100644 --- a/bot/basic/events.go +++ b/bot/basic/events.go @@ -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, diff --git a/bot/msg/chat.go b/bot/msg/chat.go index eeb826b..d67d90f 100644 --- a/bot/msg/chat.go +++ b/bot/msg/chat.go @@ -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 diff --git a/bot/msg/events.go b/bot/msg/events.go index 412daf5..aa95131 100644 --- a/bot/msg/events.go +++ b/bot/msg/events.go @@ -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 } diff --git a/examples/autofish/autofish.go b/examples/autofish/autofish.go index 4325019..43f243e 100644 --- a/examples/autofish/autofish.go +++ b/examples/autofish/autofish.go @@ -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 } diff --git a/examples/daze/daze.go b/examples/daze/daze.go index b814eb4..581c1de 100644 --- a/examples/daze/daze.go +++ b/examples/daze/daze.go @@ -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