From f53bbd7cf24b8ec3b69d6c48199b03e26ab2d431 Mon Sep 17 00:00:00 2001 From: RootBeer Date: Sat, 14 Nov 2026 21:19:50 -0500 Subject: [PATCH] Allow closing windows after the viewer quit Paper closes the inventory of a player that quit a second time when the player entity is removed, which happens after PlayerQuitEvent. By then, the packet handler was already removed, so closing the window threw "No packet handler is registered for this player". --- .../invui/internal/network/PacketListener.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/invui/src/main/java/xyz/xenondevs/invui/internal/network/PacketListener.java b/invui/src/main/java/xyz/xenondevs/invui/internal/network/PacketListener.java index 575e11c4..20b412ac 100644 --- a/invui/src/main/java/xyz/xenondevs/invui/internal/network/PacketListener.java +++ b/invui/src/main/java/xyz/xenondevs/invui/internal/network/PacketListener.java @@ -47,7 +47,9 @@ public void discard(Player player, Class> clazz) { - getPacketHandler(player.getUniqueId()).discardRules.remove(clazz); + var packetHandler = packetHandlers.get(player.getUniqueId()); + if (packetHandler != null) + packetHandler.discardRules.remove(clazz); } public void injectOutgoing(Player player, List> packets) { @@ -66,7 +68,8 @@ public > void redirectIncomin } public boolean removeRedirect(Player player, Class> clazz) { - return getPacketHandler(player.getUniqueId()).redirections.remove(clazz) != null; + var packetHandler = packetHandlers.get(player.getUniqueId()); + return packetHandler != null && packetHandler.redirections.remove(clazz) != null; } @SuppressWarnings("unchecked") @@ -75,7 +78,8 @@ public > void listenIncoming( } public boolean stopListening(Player player, Class> clazz) { - return getPacketHandler(player.getUniqueId()).listeners.remove(clazz) != null; + var packetHandler = packetHandlers.get(player.getUniqueId()); + return packetHandler != null && packetHandler.listeners.remove(clazz) != null; } private PacketHandler getPacketHandler(UUID uuid) {