From b867221a6606752395eb714cefa694ded4ede390 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Sat, 29 Apr 2023 17:12:13 +0200 Subject: [PATCH] add progress --- handlers/packet_logger.go | 17 +--- subcommands/resourcepack-d/resourcepack-d.go | Bin 6136 -> 6841 bytes ui/gui/pages/packs/packs.go | 92 ++++++++++++++++--- ui/messages/messages.go | 10 ++ utils/proxy.go | 42 +++++++-- 5 files changed, 126 insertions(+), 35 deletions(-) diff --git a/handlers/packet_logger.go b/handlers/packet_logger.go index 62121a3..b537d12 100644 --- a/handlers/packet_logger.go +++ b/handlers/packet_logger.go @@ -2,7 +2,6 @@ package handlers import ( "bufio" - "bytes" "io" "net" "os" @@ -12,7 +11,6 @@ import ( "github.com/bedrock-tool/bedrocktool/utils" "github.com/bedrock-tool/bedrocktool/utils/crypt" "github.com/fatih/color" - "github.com/sandertv/gophertunnel/minecraft/protocol" "github.com/sandertv/gophertunnel/minecraft/protocol/packet" "github.com/sirupsen/logrus" "golang.org/x/exp/slices" @@ -79,20 +77,11 @@ func NewDebugLogger(extraVerbose bool) *utils.ProxyHandler { proxy = pc }, PacketFunc: func(header packet.Header, payload []byte, src, dst net.Addr) { - var pk packet.Packet - if pkFunc, ok := pool[header.PacketID]; ok { - pk = pkFunc() - } else { - pk = &packet.Unknown{PacketID: header.PacketID, Payload: payload} + pk := utils.DecodePacket(header, payload) + if pk == nil { + return } - defer func() { - if recoveredErr := recover(); recoveredErr != nil { - logrus.Errorf("%T: %s", pk, recoveredErr.(error)) - } - }() - pk.Marshal(protocol.NewReader(bytes.NewBuffer(payload), 0)) - if packetsLogF != nil { dmpLock.Lock() packetsLogF.Write([]byte(utils.DumpStruct(0, pk, true, false) + "\n\n\n")) diff --git a/subcommands/resourcepack-d/resourcepack-d.go b/subcommands/resourcepack-d/resourcepack-d.go index d72550a6ddaccd1c15e9e3e83821a0a95d01853a..fed4ea4fa44f96c1db87cde32b089f94e932282b 100644 GIT binary patch literal 6841 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 literal 6136 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