From a4e9ed91439b3a8f079cf364c11c38fd1db73022 Mon Sep 17 00:00:00 2001 From: MscBaiMeow Date: Mon, 14 Jun 2021 21:06:21 +0800 Subject: [PATCH] handle login plugins requeset --- bot/client.go | 4 ++-- bot/mcbot.go | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/bot/client.go b/bot/client.go index 71bbd7e..58a4d50 100644 --- a/bot/client.go +++ b/bot/client.go @@ -13,8 +13,8 @@ type Client struct { Name string UUID uuid.UUID - Events Events - //TODO: LoginEvents Events + Events Events + LoginPlugin map[string]func(data []byte) ([]byte, error) } func (c *Client) Close() error { diff --git a/bot/mcbot.go b/bot/mcbot.go index 1e3551f..4ce8a4c 100644 --- a/bot/mcbot.go +++ b/bot/mcbot.go @@ -142,7 +142,28 @@ func (c *Client) join(d *net.Dialer, addr string) error { c.Conn.SetThreshold(int(threshold)) case packetid.LoginPluginRequest: //Login Plugin Request - // TODO: Handle login plugin request + var ( + msgid pk.VarInt + channel pk.Identifier + data pk.ByteArray + ) + if err := p.Scan(&msgid, &channel, &data); err != nil { + return LoginErr{"Login Plugin", err} + } + if handler, ok := c.LoginPlugin[string(channel)]; ok { + respdata, err := handler([]byte(data)) + if err != nil { + return LoginErr{"Login Plugin", err} + } + if err := c.Conn.WritePacket(pk.Marshal(packetid.LoginPluginResponse, msgid, pk.Boolean(true), pk.ByteArray(respdata))); err != nil { + return LoginErr{"login Plugin", err} + } + } else { + if err := c.Conn.WritePacket(pk.Marshal(packetid.LoginPluginResponse, msgid, pk.Boolean(false))); err != nil { + return LoginErr{"login Plugin", err} + } + } + return nil } } }