diff --git a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java index 9abd36a7..fa1f3788 100644 --- a/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java +++ b/common/src/main/java/org/valkyrienskies/mod/mixin/feature/entity_movement_packets/MixinServerEntity.java @@ -48,7 +48,7 @@ public class MixinServerEntity { ) private void wrapBroadcastAccept(Consumer instance, Object t, Operation original) { if (t instanceof ClientboundSetEntityMotionPacket || t instanceof ClientboundTeleportEntityPacket || t instanceof ClientboundMoveEntityPacket || t instanceof ClientboundRotateHeadPacket) { - if (entity instanceof IEntityDraggingInformationProvider draggedEntity) { + if (entity instanceof IEntityDraggingInformationProvider draggedEntity && draggedEntity.vs$shouldDrag()) { EntityDraggingInformation dragInfo = draggedEntity.getDraggingInformation(); if (dragInfo != null && dragInfo.isEntityBeingDraggedByAShip() && dragInfo.getLastShipStoodOn() != null) { diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt index 974e1e5e..e487c5a9 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityDraggingInformation.kt @@ -14,7 +14,7 @@ class EntityDraggingInformation { var lastShipStoodOn: ShipId? = null set(value) { ticksSinceStoodOnShip = 0 - changedShipLastTick = field != value && field != null + changedShipLastTick = field != value && field != null && value != null field = value } var ticksSinceStoodOnShip: Int = 0 diff --git a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt index 50574d97..05dd9346 100644 --- a/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt +++ b/common/src/main/kotlin/org/valkyrienskies/mod/common/util/EntityLerper.kt @@ -23,8 +23,17 @@ object EntityLerper { val ship = refship as ClientShip if (dragInfo.lerpSteps > 0) { if (dragInfo.changedShipLastTick) { - dragInfo.lerpSteps = 1 + dragInfo.lerpSteps = 0 dragInfo.changedShipLastTick = false + val transformed = if (dragInfo.lerpPositionOnShip != null) { + ship.transform.shipToWorld.transformPosition(dragInfo.lerpPositionOnShip, Vector3d()) + } else entity.position().toJOML() + val transformedYaw = if (dragInfo.lerpYawOnShip != null) { + yawToWorld(ship, dragInfo.lerpYawOnShip!!) + } else entity.yRot.toDouble() + entity.setPos(transformed.x, transformed.y, transformed.z) + entity.yRot = transformedYaw.toFloat() + return } val currentX: Double = dragInfo.relativePositionOnShip?.x() ?: return val currentY: Double = dragInfo.relativePositionOnShip!!.y()