aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0872-Fix-Entity-Position-Desync.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0872-Fix-Entity-Position-Desync.patch')
-rw-r--r--patches/server/0872-Fix-Entity-Position-Desync.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/patches/server/0872-Fix-Entity-Position-Desync.patch b/patches/server/0872-Fix-Entity-Position-Desync.patch
new file mode 100644
index 0000000000..32aeaec69d
--- /dev/null
+++ b/patches/server/0872-Fix-Entity-Position-Desync.patch
@@ -0,0 +1,31 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Owen1212055 <[email protected]>
+Date: Thu, 23 Dec 2021 23:59:12 -0500
+Subject: [PATCH] Fix Entity Position Desync
+
+If entities were teleported in the first tick it would not be send to the client.
+
+This also fixes desync caused be relatively teleporting paintings.
+This is caused by the fact that setPacketCoordinates isn't called on paintings when they are spawned (unlike every other entity, like XP orbs)
+on the client for some reason. This causes it to be relatively teleported to the world origin (0,0,0).
+
+diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java
+index fe29bf349b987d633b185b9d44d221053fa2cc83..1092ba200a945d8d70e48f956535f56e2743302d 100644
+--- a/src/main/java/net/minecraft/server/level/ServerEntity.java
++++ b/src/main/java/net/minecraft/server/level/ServerEntity.java
+@@ -164,13 +164,14 @@ public class ServerEntity {
+ }
+ // CraftBukkit end
+
+- if (this.tickCount > 0 || this.entity instanceof AbstractArrow) {
++ if (true || this.tickCount > 0 || this.entity instanceof AbstractArrow) { // Paper - Always update position
+ // Paper start - remove allocation of Vec3D here
+ long k = ClientboundMoveEntityPacket.entityToPacket(vec3d_dx);
+ long l = ClientboundMoveEntityPacket.entityToPacket(vec3d_dy);
+ long i1 = ClientboundMoveEntityPacket.entityToPacket(vec3d_dz);
+ // Paper end - remove allocation of Vec3D here
+ boolean flag4 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L;
++ if (this.entity instanceof net.minecraft.world.entity.decoration.Painting) {flag4 = true;} // Paper - Always send exact position for paintings
+
+ if (!flag4 && this.teleportDelay <= 400 && !this.wasRiding && this.wasOnGround == this.entity.isOnGround() && !(com.destroystokyo.paper.PaperConfig.sendFullPosForHardCollidingEntities && this.entity.hardCollides())) { // Paper - send full pos for hard colliding entities to prevent collision problems due to desync
+ if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) {