From a0d90424c8242684df2b1754d0b3708a5ef20115 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 6 Jul 2019 21:12:58 -0500 Subject: [PATCH] Fix item position desync (MC-4) --- src/main/java/net/minecraft/server/EntityTrackerEntry.java | 6 ++++++ src/main/java/net/minecraft/server/PacketPlayOutEntity.java | 2 ++ src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++ 3 files changed, 10 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java index 1dc29d7cd..bb0b7b98e 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java @@ -130,6 +130,12 @@ public class EntityTrackerEntry { double vec3d_dy = this.tracker.locY() - 2.44140625E-4D*(this.yLoc); double vec3d_dz = this.tracker.locZ() - 2.44140625E-4D*(this.zLoc); boolean flag1 = (vec3d_dx * vec3d_dx + vec3d_dy * vec3d_dy + vec3d_dz * vec3d_dz) >= 7.62939453125E-6D; + // Purpur start - fixes MC-4 + if (net.pl3x.purpur.PurpurConfig.fixItemPositionDesync && this.tracker instanceof EntityItem) { + Vec3D loc = PacketPlayOutEntity.decrypt(PacketPlayOutEntity.encrypt(tracker.locX()), PacketPlayOutEntity.encrypt(tracker.locY()), PacketPlayOutEntity.encrypt(tracker.locZ())); + tracker.setPosition(loc.getX(), loc.getY(), loc.getZ()); + } + // Purpur end Packet packet1 = null; boolean flag2 = flag1 || this.tickCounter % 60 == 0; boolean flag3 = Math.abs(i - this.yRot) >= 1 || Math.abs(j - this.xRot) >= 1; diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java index 5b1d95935..0010448e3 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java @@ -14,10 +14,12 @@ public class PacketPlayOutEntity implements Packet { protected boolean h; protected boolean i; + public static long encrypt(double d) { return a(d); } // Purpur - OBFHELPER public static long a(double d0) { return MathHelper.d(d0 * 4096.0D); } + public static Vec3D decrypt(long x, long y, long z) { return a(x, y, z); } // Purpur - OBFHELPER public static Vec3D a(long i, long j, long k) { return (new Vec3D((double) i, (double) j, (double) k)).a(2.44140625E-4D); } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java index e21931216..3670b4d48 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -143,8 +143,10 @@ public class PurpurConfig { } public static boolean dontSendUselessEntityPackets = false; + public static boolean fixItemPositionDesync = false; private static void dontSendUselessEntityPackets() { dontSendUselessEntityPackets = getBoolean("settings.dont-send-useless-entity-packets", dontSendUselessEntityPackets); + fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync); } private static void timingsSettings() { -- 2.24.0