Skip to content

Commit ce15359

Browse files
committed
fix #5387
1 parent 758700c commit ce15359

File tree

4 files changed

+13
-3
lines changed

4 files changed

+13
-3
lines changed

Diff for: core/src/main/java/org/geysermc/geyser/session/GeyserSession.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
import org.geysermc.geyser.entity.EntityDefinitions;
127127
import org.geysermc.geyser.entity.GeyserEntityData;
128128
import org.geysermc.geyser.entity.attribute.GeyserAttributeType;
129+
import org.geysermc.geyser.entity.type.BoatEntity;
129130
import org.geysermc.geyser.entity.type.Entity;
130131
import org.geysermc.geyser.entity.type.ItemFrameEntity;
131132
import org.geysermc.geyser.entity.type.Tickable;
@@ -1370,7 +1371,7 @@ public void activateArmAnimationTicking() {
13701371
* You can't break blocks, attack entities, or use items while driving in a boat
13711372
*/
13721373
public boolean isHandsBusy() {
1373-
return steeringRight || steeringLeft;
1374+
return playerEntity.getVehicle() instanceof BoatEntity && (steeringRight || steeringLeft);
13741375
}
13751376

13761377
/**

Diff for: core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java

+4
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ public void translate(GeyserSession session, InteractPacket packet) {
7878
ServerboundPlayerCommandPacket sneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SNEAKING);
7979
session.sendDownstreamGamePacket(sneakPacket);
8080

81+
// Reset steering to avoid these accidentally triggering session#isHandsBusy
82+
session.setSteeringLeft(false);
83+
session.setSteeringRight(false);
84+
8185
Entity currentVehicle = session.getPlayerEntity().getVehicle();
8286
if (currentVehicle != null) {
8387
session.setMountVehicleScheduledFuture(session.scheduleInEventLoop(() -> {

Diff for: core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket;
4040
import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket;
4141
import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket;
42-
import org.geysermc.geyser.GeyserImpl;
4342
import org.geysermc.geyser.entity.EntityDefinitions;
4443
import org.geysermc.geyser.entity.type.BoatEntity;
4544
import org.geysermc.geyser.entity.type.Entity;
@@ -168,7 +167,9 @@ public void translate(GeyserSession session, PlayerAuthInputPacket packet) {
168167
}
169168
}
170169
}
171-
if (entity.getVehicle() instanceof BoatEntity) {
170+
171+
// Only set steering values when the vehicle is a boat and when the client is actually in it
172+
if (entity.getVehicle() instanceof BoatEntity && inputData.contains(PlayerAuthInputData.IN_CLIENT_PREDICTED_IN_VEHICLE)) {
172173
boolean up = inputData.contains(PlayerAuthInputData.UP);
173174
// Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase.
174175
// Hi random stranger. I am six days into updating for 1.21.3. How's it going?

Diff for: core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java

+4
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ public void translate(GeyserSession session, ClientboundSetPassengersPacket pack
106106
session.getMountVehicleScheduledFuture().cancel(false);
107107
}
108108

109+
// Reset steering to avoid session#isHandsBusy from triggering
110+
session.setSteeringLeft(false);
111+
session.setSteeringRight(false);
112+
109113
if (entity instanceof ClientVehicle clientVehicle) {
110114
clientVehicle.getVehicleComponent().onDismount();
111115
}

0 commit comments

Comments
 (0)