fixup codes

This commit is contained in:
2025-08-26 12:06:00 +08:00
committed by 蒟蒻
parent 093fdaaecf
commit 9ae126c648
252 changed files with 627 additions and 369 deletions

View File

@ -7,6 +7,12 @@ import (
"net"
"strconv"
"golang.org/x/sync/errgroup"
"git.konjactw.dev/falloutBot/go-mc/data/packetid"
mcnet "git.konjactw.dev/falloutBot/go-mc/net"
pk "git.konjactw.dev/falloutBot/go-mc/net/packet"
"git.konjactw.dev/patyhank/minego/pkg/auth"
"git.konjactw.dev/patyhank/minego/pkg/bot"
"git.konjactw.dev/patyhank/minego/pkg/game/inventory"
@ -14,15 +20,11 @@ import (
"git.konjactw.dev/patyhank/minego/pkg/game/world"
"git.konjactw.dev/patyhank/minego/pkg/protocol/packet/game/client"
"git.konjactw.dev/patyhank/minego/pkg/protocol/packet/game/server"
"github.com/Tnze/go-mc/data/packetid"
mcnet "github.com/Tnze/go-mc/net"
pk "github.com/Tnze/go-mc/net/packet"
"golang.org/x/sync/errgroup"
)
type botClient struct {
conn *mcnet.Conn
packetHandler bot.PacketHandler
packetHandler *packetHandler
eventHandler bot.EventHandler
connected bool
authProvider auth.Provider
@ -91,7 +93,13 @@ func (b *botClient) Connect(ctx context.Context, addr string, options *bot.Conne
}
}
dialer := &mcnet.DefaultDialer
var dialer mcnet.MCDialer = &mcnet.DefaultDialer
if options != nil && options.Proxy != nil {
dialer, err = socks5(options.Proxy)
if err != nil {
return err
}
}
b.conn, err = dialer.DialMCContext(ctx, addr)
if err != nil {
return err
@ -156,6 +164,15 @@ func (b *botClient) handlePackets(ctx context.Context) error {
}
continue
}
hs, ok := b.packetHandler.rawMap[pktID]
for _, h := range hs {
group.Go(func() error {
h(ctx, p)
return nil
})
}
creator, ok := client.ClientboundPackets[pktID]
if !ok {
continue
@ -163,12 +180,10 @@ func (b *botClient) handlePackets(ctx context.Context) error {
pkt := creator()
_, err := pkt.ReadFrom(bytes.NewReader(p.Data))
if err != nil {
// fmt.Printf("Decoding: 0x%x %s %s\n", p.ID, pktID.String(), err.Error())
continue
}
group.Go(func() error {
b.packetHandler.HandlePacket(ctx, pkt)
return nil
})
b.packetHandler.HandlePacket(ctx, pkt)
}
}
}

View File

@ -5,10 +5,11 @@ import (
"errors"
"time"
"git.konjactw.dev/falloutBot/go-mc/chat"
"git.konjactw.dev/falloutBot/go-mc/data/packetid"
pk "git.konjactw.dev/falloutBot/go-mc/net/packet"
"git.konjactw.dev/patyhank/minego/pkg/auth"
"github.com/Tnze/go-mc/chat"
"github.com/Tnze/go-mc/data/packetid"
pk "github.com/Tnze/go-mc/net/packet"
)
func (b *botClient) login() error {

View File

@ -3,20 +3,23 @@ package client
import (
"context"
"git.konjactw.dev/patyhank/minego/pkg/bot"
"git.konjactw.dev/falloutBot/go-mc/data/packetid"
pk "git.konjactw.dev/falloutBot/go-mc/net/packet"
"git.konjactw.dev/patyhank/minego/pkg/protocol/packet/game/client"
"github.com/Tnze/go-mc/data/packetid"
)
func newPacketHandler() bot.PacketHandler {
func newPacketHandler() *packetHandler {
return &packetHandler{
handlerMap: make(map[packetid.ClientboundPacketID][]func(ctx context.Context, p client.ClientboundPacket)),
rawMap: make(map[packetid.ClientboundPacketID][]func(ctx context.Context, p pk.Packet)),
}
}
type packetHandler struct {
handlerMap map[packetid.ClientboundPacketID][]func(ctx context.Context, p client.ClientboundPacket)
genericMap []func(ctx context.Context, p client.ClientboundPacket)
rawMap map[packetid.ClientboundPacketID][]func(ctx context.Context, p pk.Packet)
}
func (ph *packetHandler) AddPacketHandler(id packetid.ClientboundPacketID, handler func(ctx context.Context, p client.ClientboundPacket)) {
@ -29,13 +32,16 @@ func (ph *packetHandler) AddGenericPacketHandler(handler func(ctx context.Contex
ph.genericMap = append(ph.genericMap, handler)
}
func (ph *packetHandler) AddRawPacketHandler(id packetid.ClientboundPacketID, handler func(ctx context.Context, p pk.Packet)) {
ph.rawMap[id] = append(ph.rawMap[id], handler)
}
func (ph *packetHandler) HandlePacket(ctx context.Context, p client.ClientboundPacket) {
f := ph.handlerMap[p.PacketID()]
if f != nil {
for _, handler := range f {
handler(ctx, p)
}
for _, handler := range f {
handler(ctx, p)
}
for _, handler := range ph.genericMap {
handler(ctx, p)
}

48
pkg/client/proxy.go Normal file
View File

@ -0,0 +1,48 @@
package client
import (
"context"
"fmt"
"golang.org/x/net/proxy"
mcnet "git.konjactw.dev/falloutBot/go-mc/net"
"git.konjactw.dev/patyhank/minego/pkg/bot"
)
// createSOCKS5Dialer 建立 SOCKS5 dialer
func socks5(proxyConfig *bot.ProxyConfig) (mcnet.MCDialer, error) {
var auth *proxy.Auth
if proxyConfig.Username != "" || proxyConfig.Password != "" {
auth = &proxy.Auth{
User: proxyConfig.Username,
Password: proxyConfig.Password,
}
}
dialer, err := proxy.SOCKS5("tcp", proxyConfig.Host, auth, proxy.Direct)
if err != nil {
return nil, fmt.Errorf("failed to create SOCKS5 proxy dialer: %w", err)
}
return &socks5MCDialer{
dialer: dialer,
}, nil
}
// socks5MCDialer 實作 mcnet.MCDialer 介面,使用 SOCKS5 proxy
type socks5MCDialer struct {
dialer proxy.Dialer
}
func (d *socks5MCDialer) DialMCContext(ctx context.Context, address string) (*mcnet.Conn, error) {
// 使用 SOCKS5 proxy 建立連線
conn, err := d.dialer.Dial("tcp", address)
if err != nil {
return nil, fmt.Errorf("failed to dial through SOCKS5 proxy: %w", err)
}
// 將 net.Conn 包裝成 mcnet.Conn
return mcnet.WrapConn(conn), nil
}