From ce1535991c94e1d39804e55cf9c7c6bad5a7158d Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sun, 2 Mar 2025 18:53:33 +0100 Subject: [PATCH] fix https://github.com/GeyserMC/Geyser/issues/5387 --- .../main/java/org/geysermc/geyser/session/GeyserSession.java | 3 ++- .../bedrock/entity/player/BedrockInteractTranslator.java | 4 ++++ .../player/input/BedrockPlayerAuthInputTranslator.java | 5 +++-- .../protocol/java/entity/JavaSetPassengersTranslator.java | 4 ++++ 4 files changed, 13 insertions(+), 3 deletions(-) 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 f303ae3ce04..005e72097d8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -126,6 +126,7 @@ import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.GeyserEntityData; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; +import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; import org.geysermc.geyser.entity.type.Tickable; @@ -1370,7 +1371,7 @@ public void activateArmAnimationTicking() { * You can't break blocks, attack entities, or use items while driving in a boat */ public boolean isHandsBusy() { - return steeringRight || steeringLeft; + return playerEntity.getVehicle() instanceof BoatEntity && (steeringRight || steeringLeft); } /** diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java index 62487b20d9f..794375fdecf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java @@ -78,6 +78,10 @@ public void translate(GeyserSession session, InteractPacket packet) { ServerboundPlayerCommandPacket sneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SNEAKING); session.sendDownstreamGamePacket(sneakPacket); + // Reset steering to avoid these accidentally triggering session#isHandsBusy + session.setSteeringLeft(false); + session.setSteeringRight(false); + Entity currentVehicle = session.getPlayerEntity().getVehicle(); if (currentVehicle != null) { session.setMountVehicleScheduledFuture(session.scheduleInEventLoop(() -> { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 62e574a3a17..8e09c6c98b3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -39,7 +39,6 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; @@ -168,7 +167,9 @@ public void translate(GeyserSession session, PlayerAuthInputPacket packet) { } } } - if (entity.getVehicle() instanceof BoatEntity) { + + // Only set steering values when the vehicle is a boat and when the client is actually in it + if (entity.getVehicle() instanceof BoatEntity && inputData.contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) { boolean up = inputData.contains(PlayerAuthInputData.UP); // Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase. // Hi random stranger. I am six days into updating for 1.21.3. How's it going? diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java index fe4a1374818..7c8d7f89616 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java @@ -106,6 +106,10 @@ public void translate(GeyserSession session, ClientboundSetPassengersPacket pack session.getMountVehicleScheduledFuture().cancel(false); } + // Reset steering to avoid session#isHandsBusy from triggering + session.setSteeringLeft(false); + session.setSteeringRight(false); + if (entity instanceof ClientVehicle clientVehicle) { clientVehicle.getVehicleComponent().onDismount(); }