From fbad5cbf7076af6b94b2d78247bd0c49bb069e82 Mon Sep 17 00:00:00 2001 From: StewStrong Date: Sun, 24 Dec 2023 14:12:24 -0700 Subject: [PATCH] Make it possible to disable Contraption positionRider changes --- .../MixinAbstractContraptionEntity.java | 30 +++++++++++-------- ...xinAbstractContraptionEntityDuckFlags.java | 5 ++++ 2 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/create/MixinAbstractContraptionEntityDuckFlags.java diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/entity/MixinAbstractContraptionEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/entity/MixinAbstractContraptionEntity.java index f8511fd70..0bc6f8637 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/entity/MixinAbstractContraptionEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/mod_compat/create/entity/MixinAbstractContraptionEntity.java @@ -2,6 +2,7 @@ import static org.valkyrienskies.mod.common.util.VectorConversionsMCKt.toJOML; import static org.valkyrienskies.mod.common.util.VectorConversionsMCKt.toMinecraft; +import static org.valkyrienskies.mod.mixinducks.mod_compat.create.MixinAbstractContraptionEntityDuckFlags.ENABLE_DEFAULT_VS_CONTRAPTION_FIX; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; @@ -106,21 +107,24 @@ private void redirectTeleportTo(Entity instance, double x, double y, double z) { //Region end //Region start - fix entity rider position on ship contraptions - @Override - public void positionRider(@NotNull Entity passenger) { - if (!hasPassenger(passenger)) - return; - Vec3 riderPos = getPassengerPosition(passenger, 1); - if (riderPos == null) - return; - if (!(passenger instanceof OrientedContraptionEntity)) { - Ship ship = VSGameUtilsKt.getShipManagingPos(passenger.level, riderPos.x, riderPos.y, riderPos.z); - riderPos.add(0, SeatEntity.getCustomEntitySeatOffset(passenger) - 1 / 8f, 0); - if (ship != null) { - riderPos = toMinecraft(ship.getShipToWorld().transformPosition(toJOML(riderPos))); + @Inject(method = "positionRider", at = @At("HEAD"), cancellable = true) + public void prePositionRider(final Entity passenger, final MoveFunction callback, final CallbackInfo ci) { + if (ENABLE_DEFAULT_VS_CONTRAPTION_FIX) { + ci.cancel(); + if (!hasPassenger(passenger)) + return; + Vec3 riderPos = getPassengerPosition(passenger, 1); + if (riderPos == null) + return; + if (!(passenger instanceof OrientedContraptionEntity)) { + final Ship ship = VSGameUtilsKt.getShipManagingPos(passenger.level, riderPos.x, riderPos.y, riderPos.z); + riderPos.add(0, SeatEntity.getCustomEntitySeatOffset(passenger) - 1 / 8f, 0); + if (ship != null) { + riderPos = toMinecraft(ship.getShipToWorld().transformPosition(toJOML(riderPos))); + } } + passenger.setPos(riderPos); } - passenger.setPos(riderPos); } @Inject(method = "toGlobalVector(Lnet/minecraft/world/phys/Vec3;FZ)Lnet/minecraft/world/phys/Vec3;", diff --git a/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/create/MixinAbstractContraptionEntityDuckFlags.java b/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/create/MixinAbstractContraptionEntityDuckFlags.java new file mode 100644 index 000000000..42d2c05be --- /dev/null +++ b/common/src/main/java/org/valkyrienskies/mod/mixinducks/mod_compat/create/MixinAbstractContraptionEntityDuckFlags.java @@ -0,0 +1,5 @@ +package org.valkyrienskies.mod.mixinducks.mod_compat.create; + +public class MixinAbstractContraptionEntityDuckFlags { + public static boolean ENABLE_DEFAULT_VS_CONTRAPTION_FIX = true; +}