From 0b5a310f1835f841e2b445b5f778eca06b265598 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 26 Jun 2023 15:35:40 -0500 Subject: [PATCH] Move firework boost calculation into `solvePitch` --- .../baritone/behavior/ElytraBehavior.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 22359a3da..e1a134725 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -69,6 +69,11 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private int remainingFireworkTicks; + /** + * Remaining cool-down ticks after the player's position and rotation are reset by the server + */ + private int remainingSetBackTicks; + /** * The most recent minimum number of firework boost ticks, equivalent to {@code 10 * (1 + Flight)} *

@@ -76,7 +81,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H */ private int minimumBoostTicks; - private int remainingSetBackTicks; private BlockStateInterface bsi; private Future solver; @@ -836,7 +840,9 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H final Rotation rotation = aimProcessor.nextRotation( RotationUtils.calcRotationFromVec3d(Vec3d.ZERO, delta, ctx.playerRotations()).withPitch(pitch) ); - motion = step(motion, rotation, firework && i > 0); + final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); + + motion = step(motion, lookDirection, rotation.getPitch()); delta = delta.subtract(motion); // Collision box while the player is in motion, with additional padding for safety @@ -855,6 +861,15 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H hitbox = hitbox.offset(motion.x, motion.y, motion.z); totalMotion = totalMotion.add(motion); line.add(totalMotion); + + if (firework) { + // See EntityFireworkRocket + motion = motion.add( + lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motion.x) * 0.5, + lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motion.y) * 0.5, + lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motion.z) * 0.5 + ); + } } double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) @@ -871,20 +886,12 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H return bestPitch; } - private static Vec3d step(final Vec3d motion, final Rotation rotation, final boolean applyFireworkBoost) { + private static Vec3d step(final Vec3d motion, final Vec3d lookDirection, final float pitch) { double motionX = motion.x; double motionY = motion.y; double motionZ = motion.z; - final Vec3d lookDirection = RotationUtils.calcLookDirectionFromRotation(rotation); - if (applyFireworkBoost) { - // See EntityFireworkRocket - motionX += lookDirection.x * 0.1 + (lookDirection.x * 1.5 - motionX) * 0.5; - motionY += lookDirection.y * 0.1 + (lookDirection.y * 1.5 - motionY) * 0.5; - motionZ += lookDirection.z * 0.1 + (lookDirection.z * 1.5 - motionZ) * 0.5; - } - - float pitchRadians = rotation.getPitch() * RotationUtils.DEG_TO_RAD_F; + float pitchRadians = pitch * RotationUtils.DEG_TO_RAD_F; double pitchBase2 = Math.sqrt(lookDirection.x * lookDirection.x + lookDirection.z * lookDirection.z); double flatMotion = Math.sqrt(motionX * motionX + motionZ * motionZ); double thisIsAlwaysOne = lookDirection.length(); @@ -962,4 +969,3 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } } } -