From 2ca2f75da5faa89c1247454051d94eb8ef322a16 Mon Sep 17 00:00:00 2001 From: Izuna Date: Sat, 15 Feb 2025 20:58:14 +0100 Subject: [PATCH] refactor: direction vector from Vec3d.fromPolar(...) Fixes the inaccuracy of the old implementation. --- .../mixins/minecraft/entity/MixinLivingEntity.java | 2 +- .../injection/mixins/minecraft/item/MixinItem.java | 2 +- .../mixins/minecraft/render/MixinGameRenderer.java | 2 +- .../combat/killaura/features/KillAuraFightBot.kt | 8 ++++---- .../combat/killaura/features/KillAuraNotifyWhenFail.kt | 2 +- .../features/module/modules/render/ModuleFreeCam.kt | 2 +- .../features/module/modules/render/ModuleRotations.kt | 2 +- .../module/modules/world/autofarm/ModuleAutoFarm.kt | 4 +--- .../scaffold/techniques/ScaffoldGodBridgeTechnique.kt | 2 +- .../ccbluex/liquidbounce/utils/aiming/PointTracker.kt | 4 ++-- .../liquidbounce/utils/aiming/RaytracingExtensions.kt | 8 ++++---- .../ccbluex/liquidbounce/utils/aiming/RotationData.kt | 10 ++-------- .../liquidbounce/utils/aiming/RotationPreference.kt | 4 ++-- .../block/targetfinding/FaceTargetPositionFactory.kt | 4 ++-- 14 files changed, 24 insertions(+), 32 deletions(-) diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/entity/MixinLivingEntity.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/entity/MixinLivingEntity.java index 83e0f3ab25e..5fca9c5afdc 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/entity/MixinLivingEntity.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/entity/MixinLivingEntity.java @@ -272,7 +272,7 @@ private Vec3d hookModifyFallFlyingRotationVector(Vec3d original) { return original; } - return rotation.getRotationVec(); + return rotation.getDirectionVector(); } } diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/item/MixinItem.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/item/MixinItem.java index 2fded680811..19f583db5cf 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/item/MixinItem.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/item/MixinItem.java @@ -85,7 +85,7 @@ private static Vec3d hookFixRotation(Vec3d original, World world, PlayerEntity p var rotation = RotationManager.INSTANCE.getCurrentRotation(); if (player == MinecraftClient.getInstance().player && rotation != null) { - return rotation.getRotationVec(); + return rotation.getDirectionVector(); } return original; diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java index 7430693fd8a..9cf2d9c0dea 100644 --- a/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java +++ b/src/main/java/net/ccbluex/liquidbounce/injection/mixins/minecraft/render/MixinGameRenderer.java @@ -122,7 +122,7 @@ private Vec3d hookRotationVector(Vec3d original, Entity camera, double blockInte } var rotation = RotationManager.INSTANCE.getCurrentRotation(); - return rotation != null ? rotation.getRotationVec() : original; + return rotation != null ? rotation.getDirectionVector() : original; } /** diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFightBot.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFightBot.kt index be84633d88e..0d346cc122e 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFightBot.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraFightBot.kt @@ -157,7 +157,7 @@ object KillAuraFightBot : NavigationBaseConfigurable(ModuleKillAu return (-180..180 step 45) .mapNotNull { yaw -> val rotation = Rotation(yaw = yaw.toFloat(), pitch = 0.0F) - val position = leaderPosition.add(rotation.rotationVec * LeaderFollower.radius.toDouble()) + val position = leaderPosition.add(rotation.directionVector * LeaderFollower.radius.toDouble()) ModuleDebug.debugGeometry( this, "Possible Position $yaw", @@ -170,20 +170,20 @@ object KillAuraFightBot : NavigationBaseConfigurable(ModuleKillAu private fun calculateRunawayPosition(context: CombatContext, combatTarget: CombatTarget): Vec3d { return context.playerPosition.add( - combatTarget.requiredTargetRotation.rotationVec * combatTarget.range.toDouble() + combatTarget.requiredTargetRotation.directionVector * combatTarget.range.toDouble() ) } private fun calculateAttackPosition(context: CombatContext, combatTarget: CombatTarget): Vec3d { val target = combatTarget.entity val targetLookPosition = target.pos.add( - combatTarget.targetRotation.rotationVec * combatTarget.range.toDouble() + combatTarget.targetRotation.directionVector * combatTarget.range.toDouble() ) return (-180..180 step 10) .mapNotNull { yaw -> val rotation = Rotation(yaw = yaw.toFloat(), pitch = 0.0F) - val position = target.pos.add(rotation.rotationVec * combatTarget.range.toDouble()) + val position = target.pos.add(rotation.directionVector * combatTarget.range.toDouble()) val isInAngle = rotation.angleTo(combatTarget.targetRotation) <= dangerousYawDiff ModuleDebug.debugGeometry( diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraNotifyWhenFail.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraNotifyWhenFail.kt index d91bb91d46e..d70d071ffbc 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraNotifyWhenFail.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/combat/killaura/features/KillAuraNotifyWhenFail.kt @@ -73,7 +73,7 @@ internal object KillAuraNotifyWhenFail { when (mode.activeChoice) { Box -> { val centerDistance = entity.box.center.subtract(player.eyePos).length() - val boxSpot = player.eyePos.add(rotation.rotationVec.multiply(centerDistance)) + val boxSpot = player.eyePos.add(rotation.directionVector.multiply(centerDistance)) failedHits.add(ObjectLongMutablePair(boxSpot, 0L)) } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleFreeCam.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleFreeCam.kt index c18214ca406..4a712c57722 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleFreeCam.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleFreeCam.kt @@ -94,7 +94,7 @@ object ModuleFreeCam : ClientModule("FreeCam", Category.RENDER, disableOnQuit = val target = raycast( range = 100.0, start = cameraPosition, - direction = mc.cameraEntity?.rotation?.rotationVec ?: return null + direction = mc.cameraEntity?.rotation?.directionVector ?: return null ) return target.pos diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleRotations.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleRotations.kt index ffcf03c79e4..475c97b3bc4 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleRotations.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/ModuleRotations.kt @@ -125,7 +125,7 @@ object ModuleRotations : ClientModule("Rotations", Category.RENDER) { val previousRotation = RotationManager.previousRotation ?: currentRotation val camera = mc.gameRenderer.camera - val interpolatedRotationVec = previousRotation.rotationVec.lerp(currentRotation.rotationVec, + val interpolatedRotationVec = previousRotation.directionVector.lerp(currentRotation.directionVector, partialTicks.toDouble() ) diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/autofarm/ModuleAutoFarm.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/autofarm/ModuleAutoFarm.kt index f91aae83a25..913902b7b31 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/autofarm/ModuleAutoFarm.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/autofarm/ModuleAutoFarm.kt @@ -39,8 +39,6 @@ import net.ccbluex.liquidbounce.utils.kotlin.Priority import net.minecraft.block.* import net.minecraft.client.gui.screen.ingame.HandledScreen import net.minecraft.enchantment.Enchantments -import net.minecraft.item.Item -import net.minecraft.item.ItemStack import net.minecraft.item.Items import net.minecraft.util.Hand import net.minecraft.util.hit.HitResult @@ -127,7 +125,7 @@ object ModuleAutoFarm : ClientModule("AutoFarm", Category.WORLD) { val rayTraceResult = world.raycast( RaycastContext( player.eyePos, - player.eyePos.add(currentRotation.rotationVec.multiply(range.toDouble())), + player.eyePos.add(currentRotation.directionVector.multiply(range.toDouble())), RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, player diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/techniques/ScaffoldGodBridgeTechnique.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/techniques/ScaffoldGodBridgeTechnique.kt index 515300deab3..091f2d9fcc2 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/techniques/ScaffoldGodBridgeTechnique.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/world/scaffold/techniques/ScaffoldGodBridgeTechnique.kt @@ -82,7 +82,7 @@ object ScaffoldGodBridgeTechnique : ScaffoldTechnique("GodBridge"), ScaffoldLedg return if (snapshotOne.clipLedged) { val cameraPosition = snapshotOne.pos.add(0.0, player.standingEyeHeight.toDouble(), 0.0) - val currentCrosshairTarget = raycast(start = cameraPosition, direction = rotation.rotationVec) + val currentCrosshairTarget = raycast(start = cameraPosition, direction = rotation.directionVector) if (target == null) { return LedgeAction.NO_LEDGE diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt index 5618420a961..75b6c7aabfb 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/PointTracker.kt @@ -223,7 +223,7 @@ class PointTracker( ) }), ASSIST("Assist", { box, eyes -> - val vec3 = eyes + player.rotation.rotationVec + val vec3 = eyes + player.rotation.directionVector Vec3d( vec3.x.coerceAtMost(box.maxX).coerceAtLeast(box.minX), @@ -267,7 +267,7 @@ class PointTracker( val positionDifference = playerPosition.y - entity.pos.y if (intersectsBox && player.box.intersects(entity.box)) { - return Point(playerEyes, playerEyes + currentRotation.rotationVec, entity.box, entity.box) + return Point(playerEyes, playerEyes + currentRotation.directionVector, entity.box, entity.box) } // Predicted target position of the enemy diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RaytracingExtensions.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RaytracingExtensions.kt index bad3f40aec4..ae9da5fbaf7 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RaytracingExtensions.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RaytracingExtensions.kt @@ -62,7 +62,7 @@ fun raytraceEntity( val entity = mc.cameraEntity ?: return null val cameraVec = entity.eyePos - val rotationVec = rotation.rotationVec + val rotationVec = rotation.directionVector val vec3d3 = cameraVec.add(rotationVec.x * range, rotationVec.y * range, rotationVec.z * range) val box = entity.boundingBox.stretch(rotationVec.multiply(range)).expand(1.0, 1.0, 1.0) @@ -89,7 +89,7 @@ fun raytraceBlock( val entity: Entity = mc.cameraEntity ?: return null val start = entity.eyePos - val rotationVec = rotation.rotationVec + val rotationVec = rotation.directionVector val end = start.add(rotationVec.x * range, rotationVec.y * range, rotationVec.z * range) @@ -112,7 +112,7 @@ fun raycast( range = range, includeFluids = includeFluids, start = player.getCameraPosVec(tickDelta), - direction = rotation.rotationVec + direction = rotation.directionVector ) } @@ -167,7 +167,7 @@ fun facingEnemy( wallsRange: Double, ): Boolean { val cameraVec = fromEntity.eyePos - val rotationVec = rotation.rotationVec + val rotationVec = rotation.directionVector val rangeSquared = range.sq() val wallsRangeSquared = wallsRange.sq() diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationData.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationData.kt index 7f23fc886b1..8e5220b0db3 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationData.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationData.kt @@ -53,14 +53,8 @@ data class Rotation( } } - val rotationVec: Vec3d - get() { - val yawCos = MathHelper.cos(-yaw * 0.017453292f) - val yawSin = MathHelper.sin(-yaw * 0.017453292f) - val pitchCos = MathHelper.cos(pitch * 0.017453292f) - val pitchSin = MathHelper.sin(pitch * 0.017453292f) - return Vec3d((yawSin * pitchCos).toDouble(), (-pitchSin).toDouble(), (yawCos * pitchCos).toDouble()) - } + val directionVector: Vec3d + get() = Vec3d.fromPolar(pitch, yaw) /** * Fixes GCD and Modulo 360° at yaw diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationPreference.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationPreference.kt index a23e2e1ccd0..28d4f0528f0 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationPreference.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/aiming/RotationPreference.kt @@ -19,7 +19,7 @@ package net.ccbluex.liquidbounce.utils.aiming import net.ccbluex.liquidbounce.utils.client.player -import net.ccbluex.liquidbounce.utils.entity.* +import net.ccbluex.liquidbounce.utils.entity.rotation import net.ccbluex.liquidbounce.utils.math.plus import net.ccbluex.liquidbounce.utils.math.times import net.minecraft.util.math.Vec3d @@ -41,7 +41,7 @@ class LeastDifferencePreference( return this.basePoint } - return eyesPos + this.baseRotation.rotationVec * range + return eyesPos + this.baseRotation.directionVector * range } override fun compare(o1: Rotation, o2: Rotation): Int { diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/block/targetfinding/FaceTargetPositionFactory.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/block/targetfinding/FaceTargetPositionFactory.kt index df08c9847ee..0c439d7b85b 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/block/targetfinding/FaceTargetPositionFactory.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/block/targetfinding/FaceTargetPositionFactory.kt @@ -114,7 +114,7 @@ class NearestRotationTargetPositionFactory(val config: PositionFactoryConfigurat val currentRotation = RotationManager.serverRotation - val rotationLine = Line(config.eyePos.subtract(Vec3d.of(targetPos)), currentRotation.rotationVec) + val rotationLine = Line(config.eyePos.subtract(Vec3d.of(targetPos)), currentRotation.directionVector) val pointOnFace = face.nearestPointTo(rotationLine) @@ -140,7 +140,7 @@ class NearestRotationTargetPositionFactory(val config: PositionFactoryConfigurat "daLine", ModuleDebug.DebuggedLine(Line( config.eyePos, - currentRotation.rotationVec + currentRotation.directionVector ), Color4b(0, 0, 255, 255)) )