From a69aa8ebdbc3415108deabe1fc152d9e0c0259a4 Mon Sep 17 00:00:00 2001 From: RednedEpic Date: Fri, 13 Sep 2019 19:37:06 -0500 Subject: [PATCH] Implement player movement --- .../network/UpstreamPacketHandler.java | 3 ++- .../network/translators/TranslatorsInit.java | 3 +++ .../bedrock/BedrockMovePlayerTranslator.java | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java diff --git a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java index 20c8cc53e..cd06e78eb 100644 --- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java @@ -121,7 +121,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { return true; } - return false; + + return translateAndDefault(packet); } @Override diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java b/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java index a2fb6ff2f..e4daede71 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/TranslatorsInit.java @@ -65,6 +65,7 @@ import com.nukkitx.nbt.tag.CompoundTag; import com.nukkitx.protocol.bedrock.packet.AnimatePacket; import com.nukkitx.protocol.bedrock.packet.CommandRequestPacket; import com.nukkitx.protocol.bedrock.packet.MobEquipmentPacket; +import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket; import com.nukkitx.protocol.bedrock.packet.PlayerActionPacket; import com.nukkitx.protocol.bedrock.packet.TextPacket; import lombok.Getter; @@ -72,6 +73,7 @@ import org.geysermc.connector.network.translators.bedrock.BedrockActionTranslato import org.geysermc.connector.network.translators.bedrock.BedrockAnimateTranslator; import org.geysermc.connector.network.translators.bedrock.BedrockCommandRequestTranslator; import org.geysermc.connector.network.translators.bedrock.BedrockMobEquipmentTranslator; +import org.geysermc.connector.network.translators.bedrock.BedrockMovePlayerTranslator; import org.geysermc.connector.network.translators.bedrock.BedrockTextTranslator; import org.geysermc.connector.network.translators.inventory.GenericInventoryTranslator; import org.geysermc.connector.network.translators.inventory.InventoryTranslator; @@ -182,6 +184,7 @@ public class TranslatorsInit { Registry.registerBedrock(TextPacket.class, new BedrockTextTranslator()); Registry.registerBedrock(MobEquipmentPacket.class, new BedrockMobEquipmentTranslator()); Registry.registerBedrock(PlayerActionPacket.class, new BedrockActionTranslator()); + Registry.registerBedrock(MovePlayerPacket.class, new BedrockMovePlayerTranslator()); itemTranslator = new ItemTranslator(); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java new file mode 100644 index 000000000..56323fef1 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockMovePlayerTranslator.java @@ -0,0 +1,26 @@ +package org.geysermc.connector.network.translators.bedrock; + +import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket; +import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket; +import org.geysermc.connector.entity.Entity; +import org.geysermc.connector.entity.type.EntityType; +import org.geysermc.connector.network.session.GeyserSession; +import org.geysermc.connector.network.translators.PacketTranslator; + +public class BedrockMovePlayerTranslator extends PacketTranslator { + + @Override + public void translate(MovePlayerPacket packet, GeyserSession session) { + Entity entity = session.getPlayerEntity(); + if (entity == null) + return; + + // TODO: Implement collision support + ClientPlayerPositionRotationPacket playerPositionRotationPacket = new ClientPlayerPositionRotationPacket( + packet.isOnGround(), packet.getPosition().getX(), Math.ceil((packet.getPosition().getY() - EntityType.PLAYER.getOffset()) * 2) / 2, + packet.getPosition().getZ(), packet.getRotation().getY(), packet.getRotation().getX()); + + entity.moveAbsolute(packet.getPosition(), packet.getRotation()); + session.getDownstream().getSession().send(playerPositionRotationPacket); + } +}