From 329ac5130937c803d2d8ef9b0378ee784b6bc4d5 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Mon, 13 Nov 2023 13:51:47 +0100 Subject: [PATCH] Fix rubber-banding on rotation of entity in vehicle (fixes #846) --- .../mixin/entity_tracking/Mixin_FixPartialUpdates.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/replaymod/replay/mixin/entity_tracking/Mixin_FixPartialUpdates.java b/src/main/java/com/replaymod/replay/mixin/entity_tracking/Mixin_FixPartialUpdates.java index 2ffd980a..c86350e5 100644 --- a/src/main/java/com/replaymod/replay/mixin/entity_tracking/Mixin_FixPartialUpdates.java +++ b/src/main/java/com/replaymod/replay/mixin/entity_tracking/Mixin_FixPartialUpdates.java @@ -59,20 +59,24 @@ public class Mixin_FixPartialUpdates { // // Use correct position for rotation-only updates // + // Except for the special case of the entity riding another entity because of a second vanilla bug where it won't + // send tracked position updates to the client while the entity is riding... + // Nothing we can do in that case, fixing that would require modifying the server. + // @Redirect(method = "onEntityUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getX()D")) private double getTrackedX(Entity instance) { - return instance.getTrackedPosition().getX(); + return instance.hasVehicle() ? instance.getX() : instance.getTrackedPosition().getX(); } @Redirect(method = "onEntityUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getY()D")) private double getTrackedY(Entity instance) { - return instance.getTrackedPosition().getY(); + return instance.hasVehicle() ? instance.getY() : instance.getTrackedPosition().getY(); } @Redirect(method = "onEntityUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getZ()D")) private double getTrackedZ(Entity instance) { - return instance.getTrackedPosition().getZ(); + return instance.hasVehicle() ? instance.getZ() : instance.getTrackedPosition().getZ(); } //#endif