2020-05-06 15:44:47 +08:00
|
|
|
From cd9083a28d860b7f0fa2d5b3cc59d88f45d474fc Mon Sep 17 00:00:00 2001
|
2020-05-04 02:28:45 +08:00
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
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 02bda8bee4..a188d9f3b6 100644
|
|
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
|
|
@@ -500,6 +500,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();
|
|
|
|
}
|
|
|
|
@@ -1271,6 +1272,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));
|
|
|
|
}
|
|
|
|
|
|
|
|
--
|
2020-05-06 15:44:47 +08:00
|
|
|
2.26.0
|
2020-05-04 02:28:45 +08:00
|
|
|
|