Support disguised chat
This commit is contained in:
@ -34,16 +34,22 @@ func New(c *bot.Client, p *basic.Player, pl *playerlist.PlayerList, events Event
|
|||||||
events: events,
|
events: events,
|
||||||
SignatureCache: sign.NewSignatureCache(),
|
SignatureCache: sign.NewSignatureCache(),
|
||||||
}
|
}
|
||||||
c.Events.AddListener(
|
if events.PlayerChatMessage != nil {
|
||||||
bot.PacketHandler{
|
c.Events.AddListener(bot.PacketHandler{
|
||||||
Priority: 64, ID: packetid.ClientboundPlayerChat,
|
Priority: 64, ID: packetid.ClientboundPlayerChat,
|
||||||
F: m.handlePacket,
|
F: m.handlePlayerChat,
|
||||||
},
|
})
|
||||||
)
|
}
|
||||||
|
if events.DisguisedChat != nil {
|
||||||
|
c.Events.AddListener(bot.PacketHandler{
|
||||||
|
Priority: 64, ID: packetid.ClientboundDisguisedChat,
|
||||||
|
F: m.handleDisguisedChat,
|
||||||
|
})
|
||||||
|
}
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) handlePacket(packet pk.Packet) error {
|
func (m *Manager) handlePlayerChat(packet pk.Packet) error {
|
||||||
var (
|
var (
|
||||||
sender pk.UUID
|
sender pk.UUID
|
||||||
index pk.VarInt
|
index pk.VarInt
|
||||||
@ -105,14 +111,28 @@ func (m *Manager) handlePacket(packet pk.Packet) error {
|
|||||||
} else {
|
} else {
|
||||||
content = chat.Text(body.PlainMsg)
|
content = chat.Text(body.PlainMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.events.PlayerChatMessage == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
msg := chatType.Decorate(content, &ct.Chat)
|
msg := chatType.Decorate(content, &ct.Chat)
|
||||||
return m.events.PlayerChatMessage(msg, validated)
|
return m.events.PlayerChatMessage(msg, validated)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Manager) handleDisguisedChat(packet pk.Packet) error {
|
||||||
|
var (
|
||||||
|
message chat.Message
|
||||||
|
chatType chat.Type
|
||||||
|
)
|
||||||
|
if err := packet.Scan(&message, &chatType); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ct := m.p.WorldInfo.RegistryCodec.ChatType.FindByID(chatType.ID)
|
||||||
|
if ct == nil {
|
||||||
|
return InvalidChatPacket
|
||||||
|
}
|
||||||
|
msg := chatType.Decorate(message, &ct.Chat)
|
||||||
|
|
||||||
|
return m.events.DisguisedChat(msg)
|
||||||
|
}
|
||||||
|
|
||||||
// SendMessage send chat message to server.
|
// SendMessage send chat message to server.
|
||||||
// Currently only support offline-mode or "Not Secure" chat
|
// Currently only support offline-mode or "Not Secure" chat
|
||||||
func (m *Manager) SendMessage(msg string) error {
|
func (m *Manager) SendMessage(msg string) error {
|
||||||
|
@ -4,4 +4,5 @@ import "github.com/Tnze/go-mc/chat"
|
|||||||
|
|
||||||
type EventsHandler struct {
|
type EventsHandler struct {
|
||||||
PlayerChatMessage func(msg chat.Message, validated bool) error
|
PlayerChatMessage func(msg chat.Message, validated bool) error
|
||||||
|
DisguisedChat func(msg chat.Message) error
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ func main() {
|
|||||||
playerList = playerlist.New(client)
|
playerList = playerlist.New(client)
|
||||||
chatHandler = msg.New(client, player, playerList, msg.EventsHandler{
|
chatHandler = msg.New(client, player, playerList, msg.EventsHandler{
|
||||||
PlayerChatMessage: onPlayerMsg,
|
PlayerChatMessage: onPlayerMsg,
|
||||||
|
DisguisedChat: onDisguisedMsg,
|
||||||
})
|
})
|
||||||
worldManager = world.NewWorld(client, player, world.EventsListener{
|
worldManager = world.NewWorld(client, player, world.EventsListener{
|
||||||
LoadChunk: onChunkLoad,
|
LoadChunk: onChunkLoad,
|
||||||
@ -125,6 +126,11 @@ func onPlayerMsg(msg chat.Message, validated bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func onDisguisedMsg(msg chat.Message) error {
|
||||||
|
log.Printf("Disguised: %v", msg)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func onSystemMsg(c chat.Message, overlay bool) error {
|
func onSystemMsg(c chat.Message, overlay bool) error {
|
||||||
log.Printf("System: %v, Overlay: %v", c, overlay)
|
log.Printf("System: %v, Overlay: %v", c, overlay)
|
||||||
return nil
|
return nil
|
||||||
|
Reference in New Issue
Block a user