From 61c96f69adaad348171936d1c6b4a6360dbdaf3e Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Sat, 14 Dec 2024 19:45:56 +0100 Subject: [PATCH] add client-cache option --- subcommands/capture.go | 6 ++-- subcommands/chat_log.go | 8 ++++-- subcommands/debug.go | 8 ++++-- subcommands/resourcepack-d.go | 14 ++++++---- subcommands/resourcepack-d/resourcepack-d.go | Bin 10168 -> 10206 bytes subcommands/skins/skins.go | 12 ++++---- subcommands/world/world.go | 28 ++++++++++--------- utils/proxy/context.go | 12 ++++---- utils/proxy/session.go | 4 ++- 9 files changed, 54 insertions(+), 38 deletions(-) diff --git a/subcommands/capture.go b/subcommands/capture.go index 59745ec..385c8fb 100644 --- a/subcommands/capture.go +++ b/subcommands/capture.go @@ -11,17 +11,19 @@ import ( ) type CaptureCMD struct { - ServerAddress string + ServerAddress string + EnableClientCache bool } func (*CaptureCMD) Name() string { return "capture" } func (*CaptureCMD) Synopsis() string { return locale.Loc("capture_synopsis", nil) } func (c *CaptureCMD) SetFlags(f *flag.FlagSet) { f.StringVar(&c.ServerAddress, "address", "", "remote server address") + f.BoolVar(&c.EnableClientCache, "client-cache", true, "Enable Client Cache") } func (c *CaptureCMD) Execute(ctx context.Context) error { - p, err := proxy.New(true) + p, err := proxy.New(true, c.EnableClientCache) if err != nil { return err } diff --git a/subcommands/chat_log.go b/subcommands/chat_log.go index 6a9f7bc..4f23f87 100644 --- a/subcommands/chat_log.go +++ b/subcommands/chat_log.go @@ -12,8 +12,9 @@ import ( ) type ChatLogCMD struct { - ServerAddress string - Verbose bool + ServerAddress string + Verbose bool + EnableClientCache bool } func (*ChatLogCMD) Name() string { return "chat-log" } @@ -21,10 +22,11 @@ func (*ChatLogCMD) Synopsis() string { return locale.Loc("chat_log_synopsis", ni func (c *ChatLogCMD) SetFlags(f *flag.FlagSet) { f.StringVar(&c.ServerAddress, "address", "", "remote server address") f.BoolVar(&c.Verbose, "v", false, "verbose") + f.BoolVar(&c.EnableClientCache, "client-cache", true, "Enable Client Cache") } func (c *ChatLogCMD) Execute(ctx context.Context) error { - proxyContext, err := proxy.New(true) + proxyContext, err := proxy.New(true, c.EnableClientCache) if err != nil { return err } diff --git a/subcommands/debug.go b/subcommands/debug.go index a5a030b..026e6cc 100644 --- a/subcommands/debug.go +++ b/subcommands/debug.go @@ -11,8 +11,9 @@ import ( ) type DebugProxyCMD struct { - ServerAddress string - ListenAddress string + ServerAddress string + ListenAddress string + EnableClientCache bool } func (*DebugProxyCMD) Name() string { return "debug-proxy" } @@ -20,10 +21,11 @@ func (*DebugProxyCMD) Synopsis() string { return locale.Loc("debug_proxy_synopsi func (c *DebugProxyCMD) SetFlags(f *flag.FlagSet) { f.StringVar(&c.ServerAddress, "address", "", locale.Loc("remote_address", nil)) f.StringVar(&c.ListenAddress, "listen", "0.0.0.0:19132", "example :19132 or 127.0.0.1:19132") + f.BoolVar(&c.EnableClientCache, "client-cache", true, "Enable Client Cache") } func (c *DebugProxyCMD) Execute(ctx context.Context) error { - proxyContext, err := proxy.New(true) + proxyContext, err := proxy.New(true, c.EnableClientCache) if err != nil { return err } diff --git a/subcommands/resourcepack-d.go b/subcommands/resourcepack-d.go index d48f682..bbdbba8 100644 --- a/subcommands/resourcepack-d.go +++ b/subcommands/resourcepack-d.go @@ -12,11 +12,12 @@ import ( ) type ResourcePackCMD struct { - ServerAddress string - SaveEncrypted bool - OnlyKeys bool - writeFolders bool - f *flag.FlagSet + ServerAddress string + SaveEncrypted bool + OnlyKeys bool + writeFolders bool + EnableClientCache bool + f *flag.FlagSet } func (*ResourcePackCMD) Name() string { return "packs" } @@ -27,11 +28,12 @@ func (c *ResourcePackCMD) SetFlags(f *flag.FlagSet) { f.BoolVar(&c.SaveEncrypted, "save-encrypted", false, locale.Loc("save_encrypted", nil)) f.BoolVar(&c.OnlyKeys, "only-keys", false, locale.Loc("only_keys", nil)) f.BoolVar(&c.writeFolders, "folders", false, "folders instead of zips") + f.BoolVar(&c.EnableClientCache, "client-cache", true, "Enable Client Cache") c.f = f } func (c *ResourcePackCMD) Execute(ctx context.Context) error { - return resourcepackd.Execute_cmd(ctx, c.ServerAddress, c.OnlyKeys, c.SaveEncrypted, c.writeFolders, c.f) + return resourcepackd.Execute_cmd(ctx, c.ServerAddress, c.OnlyKeys, c.SaveEncrypted, c.writeFolders, c.EnableClientCache, c.f) } func init() { diff --git a/subcommands/resourcepack-d/resourcepack-d.go b/subcommands/resourcepack-d/resourcepack-d.go index cc2c5a70308170f1539c2e6643631063c8cc2f48..eafbfb428b9705c35e93f958e0b7c342fc084b5d 100644 GIT binary patch literal 10206 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