From 7b0913ca869d57711a1fe0a4f69b3b231b8c396a Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Fri, 19 Sep 2025 03:30:36 +0200 Subject: [PATCH] Close the current inventory before sending form, kick players sending invalid block break actions --- .../org/geysermc/geyser/session/GeyserSession.java | 14 ++++++++++++++ .../geyser/session/cache/BlockBreakHandler.java | 5 ++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index b05a62894..f200cb034 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1681,6 +1681,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public boolean sendForm(@NonNull Form form) { // First close any dialogs that are open. This won't execute the dialog's closing action. dialogManager.close(); + // Also close current inventories, otherwise the form will not show + if (getOpenInventory() != null) { + InventoryUtils.closeInventory(this, getOpenInventory().getJavaId(), true); + } return doSendForm(form); } @@ -2278,11 +2282,17 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public @NonNull String version() { + if (clientData == null) { + return "unknown"; + } return clientData.getGameVersion(); } @Override public @NonNull BedrockPlatform platform() { + if (clientData == null) { + return BedrockPlatform.UNKNOWN; + } return BedrockPlatform.values()[clientData.getDeviceOs().ordinal()]; //todo } @@ -2429,4 +2439,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { packet.setSoftEnum(new CommandEnumData(name, Collections.singletonMap(enums, Collections.emptySet()), true)); sendUpstreamPacket(packet); } + + public String getDebugInfo() { + return "Username: %s, DeviceOs: %s, Version: %s".formatted(bedrockUsername(), platform(), version()); + } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java index 34c424cb6..3eca7d7fe 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BlockBreakHandler.java @@ -256,7 +256,10 @@ public class BlockBreakHandler { handleAbortBreaking(position); } default -> { - throw new IllegalStateException("Unknown block break action: " + actionData.getAction()); + GeyserImpl.getInstance().getLogger().warning("Unknown block break action (%s) received! (origin: %s)!" + .formatted(actionData.getAction(), session.getDebugInfo())); + GeyserImpl.getInstance().getLogger().debug("Odd packet: " + packet); + session.disconnect("Invalid block breaking action received!"); } } }