2020-05-06 09:48:49 +00:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
2020-05-03 18:28:45 +00: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
|
2020-05-14 23:05:00 +00:00
|
|
|
index 625479b97adf19df67f04dcbe445d78bccb0fc2c..f692276617d9c24ded5e887090e00642b0d63eba 100644
|
2020-05-03 18:28:45 +00:00
|
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
2020-05-06 23:30:47 +00:00
|
|
|
@@ -498,6 +498,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
2020-05-03 18:28:45 +00:00
|
|
|
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();
|
|
|
|
}
|
2020-05-14 23:05:00 +00:00
|
|
|
@@ -1277,6 +1278,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
2020-05-03 18:28:45 +00:00
|
|
|
|
|
|
|
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));
|
|
|
|
}
|
|
|
|
|