From a1a3d93dc1e3a04db2c1c4c707353c2090e22bdc Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 24 Jun 2023 22:27:38 -0700 Subject: [PATCH] Add `renderElytraSimulation` setting --- src/api/java/baritone/api/Settings.java | 1 + src/main/java/baritone/behavior/ElytraBehavior.java | 10 ++++++++++ src/main/java/baritone/utils/PathRenderer.java | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 48d1c85d2..960759fa2 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -56,6 +56,7 @@ public final class Settings { public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting renderHitboxRaytraces = new Setting<>(false); + public final Setting renderElytraSimulation = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); // Experimental Elytra Settings diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index af353896f..cb0355832 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -56,6 +56,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // Used exclusively for PathRenderer public List> clearLines; public List> blockedLines; + public List simulationLine; public BlockPos aimPos; public List visiblePath; @@ -407,6 +408,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // Reset rendered elements this.clearLines.clear(); this.blockedLines.clear(); + this.simulationLine = null; this.aimPos = null; final List path = this.pathManager.getPath(); @@ -763,6 +765,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H Float bestPitch = null; double bestDot = Double.NEGATIVE_INFINITY; + List bestLine = null; final Vec3d initialMotion = ctx.playerMotion(); final AxisAlignedBB initialBB = ctx.player().getEntityBoundingBox(); @@ -776,6 +779,8 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H Vec3d motion = initialMotion; AxisAlignedBB hitbox = initialBB; Vec3d totalMotion = Vec3d.ZERO; + List line = new ArrayList<>(); + line.add(totalMotion); for (int i = 0; i < steps; i++) { if (MC_1_12_Collision_Fix.bonk(ctx, hitbox)) { @@ -802,6 +807,7 @@ 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); } double directionalGoodness = goalDirection.dotProduct(totalMotion.normalize()); // tried to incorporate a "speedGoodness" but it kept making it do stupid stuff (aka always losing altitude) @@ -809,8 +815,12 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H if (goodness > bestDot) { bestDot = goodness; bestPitch = pitch; + bestLine = line; } } + if (bestLine != null) { + this.simulationLine = bestLine; + } return bestPitch; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 0b08a1f32..da2f69e7b 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -122,6 +122,17 @@ public final class PathRenderer implements IRenderer { } IRenderer.endLines(settings.renderPathIgnoreDepth.value); } + if (elytra.simulationLine != null && Baritone.settings().renderElytraSimulation.value) { + IRenderer.startLines(new Color(0x36CCDC), settings.pathRenderLineWidthPixels.value, settings.renderPathIgnoreDepth.value); + for (int i = 0; i < elytra.simulationLine.size() - 1; i++) { + Vec3d src = elytra.simulationLine.get(i); + Vec3d dst = elytra.simulationLine.get(i + 1); + // Center line on viewer pos + buffer.pos(src.x, src.y, src.z).color(color[0], color[1], color[2], color[3]).endVertex(); + buffer.pos(dst.x, dst.y, dst.z).color(color[0], color[1], color[2], color[3]).endVertex(); + } + IRenderer.endLines(settings.renderPathIgnoreDepth.value); + } // If there is a path calculation currently running, render the path calculation process