From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 3 May 2020 14:25:55 -0400 Subject: [PATCH] Sync position on teleportation We've seen many a cases where the "last good" x/y/z is desynced from the x/y/z that is checked for moving too fast. Theory is that when you have multiple movement packets queued up, and the player is teleported after the first then the 2nd and 3rd come in, it is triggering a massive movement velocity. This will ensure that the servers position is synchronized anytime player is teleported. diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 294e9a47e21be0babad2ea3d2a9b3fc79083e350..45944cad9436dd309a6323f80a0c4c2f2bb6367b 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -498,6 +498,7 @@ public class PlayerConnection implements PacketListenerPlayIn { this.o = this.teleportPos.x; this.p = this.teleportPos.y; this.q = this.teleportPos.z; + this.syncPosition(); // Paper if (this.player.H()) { this.player.I(); } @@ -1277,6 +1278,7 @@ public class PlayerConnection implements PacketListenerPlayIn { this.A = this.e; this.player.setLocation(d0, d1, d2, f, f1); + this.syncPosition(); // Paper this.player.playerConnection.sendPacket(new PacketPlayOutPosition(d0 - d3, d1 - d4, d2 - d5, f - f2, f1 - f3, set, this.teleportAwait)); }