From 0d5ab63c96cf72aeb12caf263c5985935a46b956 Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 8 Apr 2021 18:25:34 -0400 Subject: [PATCH 1/2] Fix player rotation lock while riding boats for 1.16.210+ --- .../java/entity/JavaEntitySetPassengersTranslator.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java index da9ce64ffac..01a1cb46a42 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java @@ -31,6 +31,7 @@ import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.data.entity.EntityLinkData; import com.nukkitx.protocol.bedrock.packet.SetEntityLinkPacket; +import com.nukkitx.protocol.bedrock.v428.Bedrock_v428; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import org.geysermc.connector.entity.Entity; import org.geysermc.connector.entity.living.ArmorStandEntity; @@ -87,7 +88,13 @@ public void translate(ServerEntitySetPassengersPacket packet, GeyserSession sess if (entity.getEntityType() == EntityType.BOAT) { passenger.getMetadata().put(EntityData.RIDER_ROTATION_LOCKED, (byte) 1); passenger.getMetadata().put(EntityData.RIDER_MAX_ROTATION, 90f); - passenger.getMetadata().put(EntityData.RIDER_MIN_ROTATION, !passengers.isEmpty() ? -90f : 0f); + // Can be removed once 1.16.200 to 1.16.201 support is dropped + if (session.getUpstream().getSession().getPacketCodec().getProtocolVersion() >= Bedrock_v428.V428_CODEC.getProtocolVersion()) { + passenger.getMetadata().put(EntityData.RIDER_MIN_ROTATION, 1f); + passenger.getMetadata().put(EntityData.RIDER_ROTATION_OFFSET, -90f); + } else { + passenger.getMetadata().put(EntityData.RIDER_MIN_ROTATION, -90f); + } } else { passenger.getMetadata().put(EntityData.RIDER_ROTATION_LOCKED, (byte) 0); passenger.getMetadata().put(EntityData.RIDER_MAX_ROTATION, 0f); From caf28f703990bf15a0cf978c0674c2bfa314f3a3 Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 8 Apr 2021 20:05:02 -0400 Subject: [PATCH 2/2] Clear RIDER_ROTATION_OFFSET on dismount --- .../java/entity/JavaEntitySetPassengersTranslator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java index 01a1cb46a42..5d6706fefb2 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/entity/JavaEntitySetPassengersTranslator.java @@ -123,6 +123,9 @@ public void translate(ServerEntitySetPassengersPacket packet, GeyserSession sess passenger.getMetadata().put(EntityData.RIDER_ROTATION_LOCKED, (byte) 0); passenger.getMetadata().put(EntityData.RIDER_MAX_ROTATION, 0f); passenger.getMetadata().put(EntityData.RIDER_MIN_ROTATION, 0f); + if (session.getUpstream().getSession().getPacketCodec().getProtocolVersion() >= Bedrock_v428.V428_CODEC.getProtocolVersion()) { + passenger.getMetadata().put(EntityData.RIDER_ROTATION_OFFSET, 0f); + } this.updateOffset(passenger, entity, session, false, false, (packet.getPassengerIds().length > 1)); } else {