From 9631f1cf5fc24da63e75d9d50a8c963bec9f9baa Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Fri, 16 Mar 2018 16:53:11 +0100 Subject: [PATCH] [1.7.10] Fix recording player y position --- .../handler/RecordingEventHandler.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java index 1a9c0ef0..2a44af9e 100755 --- a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java +++ b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java @@ -94,6 +94,7 @@ public class RecordingEventHandler { //#else //$$ packetListener.save(new S0CPacketSpawnPlayer(player(mc))); //#endif + lastX = lastY = lastZ = null; } catch(Exception e) { e.printStackTrace(); } @@ -124,17 +125,12 @@ public class RecordingEventHandler { public void onPlayerTick(PlayerTickEvent e) { try { if(e.player != player(mc)) return; - //#if MC>=10800 - double playerY = e.player.posY; - //#else - //$$ double playerY = e.player.boundingBox.minY; // TODO do we need this? if so, also in teleport below? - //#endif boolean force = false; if(lastX == null || lastY == null || lastZ == null) { force = true; lastX = e.player.posX; - lastY = playerY; + lastY = e.player.posY; lastZ = e.player.posZ; } @@ -145,11 +141,11 @@ public class RecordingEventHandler { } double dx = e.player.posX - lastX; - double dy = playerY - lastY; + double dy = e.player.posY - lastY; double dz = e.player.posZ - lastZ; lastX = e.player.posX; - lastY = playerY; + lastY = e.player.posY; lastZ = e.player.posZ; Packet packet; @@ -157,7 +153,18 @@ public class RecordingEventHandler { //#if MC>=10904 packet = new SPacketEntityTeleport(e.player); //#else + //#if MC>=10800 //$$ packet = new S18PacketEntityTeleport(e.player); + //#else + //$$ // In 1.7.10 the client player entity has its posY at eye height + //$$ // but for all other entities it's at their feet (as it should be). + //$$ // So, to correctly position the player, we teleport them to their feet (i.a. directly after spawn). + //$$ // Note: this leaves the lastY value offset by the eye height but because it's only used for relative + //$$ // movement, that doesn't matter. + //$$ S18PacketEntityTeleport teleportPacket = new S18PacketEntityTeleport(e.player); + //$$ teleportPacket.field_149457_c = floor(e.player.boundingBox.minY * 32); + //$$ packet = teleportPacket; + //#endif //#endif } else { byte newYaw = (byte) ((int) (e.player.rotationYaw * 256.0F / 360.0F));