papermc/patches/server/0840-Fix-riding-distance-statistics.patch

46 lines
2.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Marvin Rieple <derrieple@gmail.com>
Date: Sun, 5 Dec 2021 16:42:07 +0100
Subject: [PATCH] Fix riding distance statistics
Fixes entity ride distance stats not being awarded correctly.
Based upon https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/900
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index d85f5817f1aaebff3d93ee472d4580af72f7eae2..926d0a80cbb55184955ac6720948d2e86683cc57 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -609,7 +609,14 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
Location curPos = this.getCraftPlayer().getLocation(); // Spigot
entity.absMoveTo(d3, d4, d5, f, f1);
- this.player.absMoveTo(d3, d4, d5, this.player.getYRot(), this.player.getXRot()); // CraftBukkit
+ // Paper start - SPIGOT-4396: Synchronize player and vehicle
+ // Based upon https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/900
+ Vec3 oldPlayerPosition = this.player.position();
+ entity.positionRider(this.player);
+ this.player.xo = oldPlayerPosition.x;
+ this.player.yo = oldPlayerPosition.y;
+ this.player.zo = oldPlayerPosition.z;
+ // Paper end
// Paper start - optimise out extra getCubes
boolean teleportBack = flag1; // violating this is always a fail
if (!teleportBack) {
@@ -621,10 +628,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
}
if (teleportBack) { // Paper end - optimise out extra getCubes
entity.absMoveTo(d0, d1, d2, f, f1);
- this.player.absMoveTo(d0, d1, d2, this.player.getYRot(), this.player.getXRot()); // CraftBukkit
+ // Paper start - SPIGOT-6475
+ entity.positionRider(this.player);
+ this.player.xo = oldPlayerPosition.x;
+ this.player.yo = oldPlayerPosition.y;
+ this.player.zo = oldPlayerPosition.z;
+ // Paper end
this.connection.send(new ClientboundMoveVehiclePacket(entity));
return;
}
+ player.checkRidingStatistics(player.getX() - oldPlayerPosition.x, player.getY() - oldPlayerPosition.y, player.getZ() - oldPlayerPosition.z); // Paper - SPIGOT-6475: Update riding statistic
// CraftBukkit start - fire PlayerMoveEvent
Player player = this.getCraftPlayer();