From 64f9225c94f3cd1b7793cb5234fa78423f222f23 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Fri, 31 Dec 2021 08:17:08 +0100 Subject: [PATCH] Fix riding distance statistics (#7021/SPIGOT-6475) (#7033) --- build-data/paper.at | 3 ++ .../0843-Fix-riding-distance-statistics.patch | 46 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 patches/server/0843-Fix-riding-distance-statistics.patch diff --git a/build-data/paper.at b/build-data/paper.at index da8de1a382..3e2f39ada6 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -295,3 +295,6 @@ public net.minecraft.world.entity.monster.Skeleton inPowderSnowTime # Add health methods for item entities public net.minecraft.world.entity.item.ItemEntity health + +# Fix riding distance statistics +public net.minecraft.world.entity.player.Player checkRidingStatistics(DDD)V diff --git a/patches/server/0843-Fix-riding-distance-statistics.patch b/patches/server/0843-Fix-riding-distance-statistics.patch new file mode 100644 index 0000000000..d4fab4f4b5 --- /dev/null +++ b/patches/server/0843-Fix-riding-distance-statistics.patch @@ -0,0 +1,46 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Marvin Rieple +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 b9e0dc98243bee3de7eb291dd3fb25049c0a8f2b..3c7e3d5b06409bf2e98a35d678564f0e477481a9 100644 +--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -608,7 +608,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) { +@@ -620,10 +627,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();