From 77153e6d4a1e56c8d427004575daa3ec3c38a46b Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 31 Dec 2020 20:05:00 -0500 Subject: [PATCH] Work around there being a void floor in Bedrock (#1405) * Work around there being a void floor in Bedrock If the player's Y coordinate is -38 or below, we teleport the player below the void floor and they can safely die. :) * Don't teleport if below Y -40 * sigh * Have floorY be its own variable * Add more comment * More comments * Finish my thought --- .../player/BedrockMovePlayerTranslator.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java index 37875665..f5a492d8 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -100,11 +100,31 @@ public class BedrockMovePlayerTranslator extends PacketTranslator= packet.getPosition().getY(); + entity.setPosition(packet.getPosition(), false); entity.setOnGround(packet.isOnGround()); // Send final movement changes session.sendDownstreamPacket(movePacket); + + if (notMovingUp) { + int floorY = position.getFloorY(); + if (floorY <= -38 && floorY >= -40) { + // Work around there being a floor at Y -40 and teleport the player below it + // Moving from below Y -40 to above the void floor works fine + //TODO: This will need to be changed for 1.17 + entity.setPosition(entity.getPosition().sub(0, 4f, 0)); + MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); + movePlayerPacket.setRuntimeEntityId(entity.getGeyserId()); + movePlayerPacket.setPosition(entity.getPosition()); + movePlayerPacket.setRotation(entity.getBedrockRotation()); + movePlayerPacket.setMode(MovePlayerPacket.Mode.TELEPORT); + movePlayerPacket.setTeleportationCause(MovePlayerPacket.TeleportationCause.BEHAVIOR); + session.sendUpstreamPacket(movePlayerPacket); + } + } } else { // Not a valid move session.getConnector().getLogger().debug("Recalculating position...");