geforkt von Mirrors/Paper
bffb08c2f9
The Paper method was chosen for deprecation because it was more restrictive in that it has an isGliding check.
51 Zeilen
2.4 KiB
Diff
51 Zeilen
2.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: BillyGalbreath <blake.galbreath@gmail.com>
|
|
Date: Tue, 8 Dec 2020 20:24:52 -0600
|
|
Subject: [PATCH] MC-4: Fix item position desync
|
|
|
|
This fixes item position desync (MC-4) by running the item coordinates
|
|
through the encode/decode methods of the packet that causes the precision
|
|
loss, which forces the server to lose the same precision as the client
|
|
keeping them in sync.
|
|
|
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java b/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java
|
|
index 05ac41e136da43284fb24a6b698ebd36318278fb..33d9131e9c75ef23cd637f5d6c39a2704a0c92a5 100644
|
|
--- a/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java
|
|
+++ b/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java
|
|
@@ -9,12 +9,12 @@ public class VecDeltaCodec {
|
|
|
|
@VisibleForTesting
|
|
static long encode(double value) {
|
|
- return Math.round(value * 4096.0D);
|
|
+ return Math.round(value * 4096.0D); // Paper - diff on change
|
|
}
|
|
|
|
@VisibleForTesting
|
|
static double decode(long value) {
|
|
- return (double)value / 4096.0D;
|
|
+ return (double)value / 4096.0D; // Paper - diff on change
|
|
}
|
|
|
|
public Vec3 decode(long x, long y, long z) {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
index 9068a9646a7e436a5a0d9ea9deb52b78a316ba4a..9d169d6504ee486127b22cd4e6429c4eb5b7ec0a 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
@@ -4248,6 +4248,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
|
|
return;
|
|
}
|
|
// Paper end - rewrite chunk system
|
|
+ // Paper start - fix MC-4
|
|
+ if (this instanceof ItemEntity) {
|
|
+ if (io.papermc.paper.configuration.GlobalConfiguration.get().misc.fixEntityPositionDesync) {
|
|
+ // encode/decode from ClientboundMoveEntityPacket
|
|
+ x = Mth.lfloor(x * 4096.0D) * (1 / 4096.0D);
|
|
+ y = Mth.lfloor(y * 4096.0D) * (1 / 4096.0D);
|
|
+ z = Mth.lfloor(z * 4096.0D) * (1 / 4096.0D);
|
|
+ }
|
|
+ }
|
|
+ // Paper end - fix MC-4
|
|
if (this.position.x != x || this.position.y != y || this.position.z != z) {
|
|
this.position = new Vec3(x, y, z);
|
|
int i = Mth.floor(x);
|