Fix riding distance statistics (#7021/SPIGOT-6475) (#7033)

This commit is contained in:
Noah van der Aa 2021-12-31 08:17:08 +01:00
parent 7426c0370e
commit 0ca006fedf
2 changed files with 49 additions and 0 deletions

View file

@ -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

View file

@ -0,0 +1,46 @@
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -0,0 +0,0 @@ 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) {
@@ -0,0 +0,0 @@ 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();