From 9bf4816a3225fc4fa768e14f616a68242112a062 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 13 Mar 2024 02:50:14 -0700 Subject: [PATCH] Temporary bad fix for command crashing Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/org/geysermc/geyser/session/GeyserSession.java | 7 +++++++ .../translator/protocol/java/JavaCommandsTranslator.java | 8 ++++++++ 2 files changed, 15 insertions(+) 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 7a4a8ff6f0c..b95b5af8d23 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -602,6 +602,13 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private @Nullable ItemData currentBook = null; + /** + * Stores if we've sent AvailibleCommandsPacket to the client due to it crashing if sent twice on 1.20.70/71 + * Hopefully bedrock will have a hotfix so we can remove this + */ + @Setter + private boolean sentAvailibleCommands = false; + private final GeyserCameraData cameraData; private final GeyserEntityData entityData; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java index 0d7f45c7dd9..7ded656dd33 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java @@ -46,6 +46,7 @@ import org.geysermc.geyser.api.event.java.ServerDefineCommandsEvent; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.inventory.item.Enchantment; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; @@ -115,6 +116,12 @@ public void translate(GeyserSession session, ClientboundCommandsPacket packet) { return; } + // Don't send command suggestions if they are already sent and the client is 1.20.70 or higher due to crash bug + // TODO: Remove this check when the crash bug is fixed + if (session.isSentAvailibleCommands() && !GameProtocol.isPre1_20_70(session)) { + return; + } + GeyserCommandManager manager = session.getGeyser().commandManager(); CommandNode[] nodes = packet.getNodes(); List commandData = new ArrayList<>(); @@ -191,6 +198,7 @@ public void translate(GeyserSession session, ClientboundCommandsPacket packet) { // Finally, send the commands to the client session.sendUpstreamPacket(availableCommandsPacket); + session.setSentAvailibleCommands(true); } /**