From ca74a3c3d4c65cee6bee947408e46197c143c4ca Mon Sep 17 00:00:00 2001 From: adman Date: Sat, 4 Apr 2026 19:32:46 +0200 Subject: [PATCH] more explicit asyncPackets switch --- event/event_bus.go | 2 +- proto/connection.go | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/event/event_bus.go b/event/event_bus.go index 989c849..d228697 100644 --- a/event/event_bus.go +++ b/event/event_bus.go @@ -125,7 +125,7 @@ func (l *Loop) RegisterCustomType(eventType reflect.Type, hv reflect.Value) { v := hv.Call([]reflect.Value{reflect.ValueOf(packet)})[0] if !v.IsNil() { err := v.Interface().(error) - if errors.Is(err, HandlerDoneErr{}) || errors.Is(err, DontForwardErr) { + if errors.As(err, &HandlerDoneErr{}) || errors.Is(err, DontForwardErr) { return err } slog.Error("handler failed", "err", err) diff --git a/proto/connection.go b/proto/connection.go index b8edda7..9f67784 100644 --- a/proto/connection.go +++ b/proto/connection.go @@ -65,6 +65,9 @@ type Conn struct { Version string ProtocolVersion int32 DebugPrintPackets []string + + asyncPackets bool + asyncPacketsMutex sync.RWMutex } func (c *Conn) StartConn() (err error) { @@ -96,6 +99,18 @@ func (c *Conn) State() proto_base.State { return c.state } +func (c *Conn) SetAsyncPackets(asyncPackets bool) { + c.asyncPacketsMutex.Lock() + defer c.asyncPacketsMutex.Unlock() + c.asyncPackets = asyncPackets +} + +func (c *Conn) GetAsyncPackets() bool { + c.asyncPacketsMutex.RLock() + defer c.asyncPacketsMutex.RUnlock() + return c.asyncPackets +} + func (c *Conn) SetVersion(version string) (err error) { versionData, err := data.LookUpVersionByName(version) if err != nil { @@ -120,7 +135,6 @@ func (c *Conn) SetProtocolVersion(version int32) (err error) { // It ensures that the receive-routine is only started once and creates a buffered channel for packet handling. func (c *Conn) ActivateReceiveRoutine() (chSending <-chan any) { // This expects you to start a new routine when switching into play state - spamLoginTick := c.State() != proto_base.Play ch := make(chan any, BufferNPackets) go func() { ctx := c.Ctx // this prevents c.Ctx being reassigned @@ -129,7 +143,7 @@ func (c *Conn) ActivateReceiveRoutine() (chSending <-chan any) { case <-ctx.Done(): return default: - if spamLoginTick { + if !c.GetAsyncPackets() { ch <- LoginTick{} } else { packet, err := c.Receive()