From e2f2bdffa2c7f374264ca5019acd97ad1c2bfaaa Mon Sep 17 00:00:00 2001 From: CarsonLenze Date: Tue, 21 Oct 2025 22:52:06 -0400 Subject: [PATCH 1/2] Add ability to change Discovery by Processor --- session/processor.go | 6 ++++++ session/session.go | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/session/processor.go b/session/processor.go index 69391f7..eba24bb 100644 --- a/session/processor.go +++ b/session/processor.go @@ -39,6 +39,10 @@ type Processor interface { ProcessClientEncoded(ctx *Context, pk *[]byte) // ProcessFlush is called before flushing the player's minecraft.Conn buffer in response to a downstream server request. ProcessFlush(ctx *Context) + // ProcessDiscover is called to determine the primary server to send the player to. + ProcessDiscover(ctx *Context, target *string) + // ProcessDiscoverFallback is called to determine the fallback server to send the player to. + ProcessDiscoverFallback(ctx *Context, target *string) // ProcessPreTransfer is called before transferring the player to a different server. ProcessPreTransfer(ctx *Context, origin *string, target *string) // ProcessTransferFailure is called when the player transfer to a different server fails. @@ -63,6 +67,8 @@ func (NopProcessor) ProcessServerEncoded(_ *Context, _ *[]byte) {} func (NopProcessor) ProcessClient(_ *Context, _ *packet.Packet) {} func (NopProcessor) ProcessClientEncoded(_ *Context, _ *[]byte) {} func (NopProcessor) ProcessFlush(_ *Context) {} +func (NopProcessor) ProcessDiscover(_ *Context) {} +func (NopProcessor) ProcessDiscoverFallback(_ *Context) {} func (NopProcessor) ProcessPreTransfer(_ *Context, _ *string, _ *string) {} func (NopProcessor) ProcessTransferFailure(_ *Context, _ *string, _ *string) {} func (NopProcessor) ProcessPostTransfer(_ *Context, _ *string, _ *string) {} diff --git a/session/session.go b/session/session.go index 2284f40..0786934 100644 --- a/session/session.go +++ b/session/session.go @@ -96,6 +96,8 @@ func (s *Session) LoginContext(ctx context.Context) (err error) { return err } + s.Processor().ProcessDiscover(NewContext(), &serverAddr) + conn, err := s.dial(ctx, serverAddr) if err != nil { s.logger.Debug("dialer failed", "err", err) @@ -325,6 +327,8 @@ func (s *Session) fallback() error { return fmt.Errorf("discovery failed: %w", err) } + s.Processor().ProcessDiscoverFallback(NewContext(), &addr) + s.logger.Debug("transferring session to a fallback server", "addr", addr) if err := s.Transfer(addr); err != nil { return fmt.Errorf("transfer failed: %w", err) From 4ac8f48f070c07a357b98f18fdb11051336db21f Mon Sep 17 00:00:00 2001 From: CarsonLenze Date: Tue, 21 Oct 2025 22:59:48 -0400 Subject: [PATCH 2/2] Ignore my idiocy --- session/processor.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/session/processor.go b/session/processor.go index eba24bb..01ba5f6 100644 --- a/session/processor.go +++ b/session/processor.go @@ -67,8 +67,8 @@ func (NopProcessor) ProcessServerEncoded(_ *Context, _ *[]byte) {} func (NopProcessor) ProcessClient(_ *Context, _ *packet.Packet) {} func (NopProcessor) ProcessClientEncoded(_ *Context, _ *[]byte) {} func (NopProcessor) ProcessFlush(_ *Context) {} -func (NopProcessor) ProcessDiscover(_ *Context) {} -func (NopProcessor) ProcessDiscoverFallback(_ *Context) {} +func (NopProcessor) ProcessDiscover(_ *Context, target *string) {} +func (NopProcessor) ProcessDiscoverFallback(_ *Context, target *string) {} func (NopProcessor) ProcessPreTransfer(_ *Context, _ *string, _ *string) {} func (NopProcessor) ProcessTransferFailure(_ *Context, _ *string, _ *string) {} func (NopProcessor) ProcessPostTransfer(_ *Context, _ *string, _ *string) {}