diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index aa2a4a957..be959ef12 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -51,7 +51,7 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); public final Setting elytraFireworkSpeed = new Setting<>(0.6); - public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15L); + public final Setting elytraFireworkSetbackUseDelay = new Setting<>(15); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); public final Setting elytraFreeLook = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 6d8b2cb3b..1973e1bd4 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -63,11 +63,10 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H // :sunglasses: private final NetherPathfinderContext context; private final PathManager pathManager; - private int sinceFirework; + private int remainingFireworkTicks; + private int remainingSetBackTicks; private BlockStateInterface bsi; - private long lastSetBack = Long.MIN_VALUE; - public ElytraBehavior(Baritone baritone) { super(baritone); this.context = new NetherPathfinderContext(NETHER_SEED); @@ -84,7 +83,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private boolean completePath; private boolean recalculating; private int playerNear; - private int maxPlayerNear; public PathManager() { // lol imagine initializing fields normally @@ -93,7 +91,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public void tick() { // Recalculate closest path node - final int prevMax = this.maxPlayerNear; this.playerNear = this.calculateNear(this.playerNear); // Obstacles are more important than an incomplete path, handle those first. @@ -312,7 +309,9 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H @Override public void onReceivePacket(PacketEvent event) { if (event.getPacket() instanceof SPacketPlayerPosLook) { - this.lastSetBack = System.nanoTime(); + ctx.minecraft().addScheduledTask(() -> { + this.remainingSetBackTicks = Baritone.settings().elytraFireworkSetbackUseDelay.value; + }); } } @@ -326,8 +325,8 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H this.visiblePath = Collections.emptyList(); this.pathManager.clear(); this.aimPos = null; - this.sinceFirework = 0; - this.lastSetBack = Long.MIN_VALUE; + this.remainingFireworkTicks = 0; + this.remainingSetBackTicks = 0; } @Override @@ -341,6 +340,14 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H return; } + // Certified mojang employee incident + if (this.remainingFireworkTicks > 0) { + this.remainingFireworkTicks--; + } + if (this.remainingSetBackTicks > 0) { + this.remainingSetBackTicks--; + } + this.clearLines.clear(); this.blockedLines.clear(); @@ -375,7 +382,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H final boolean firework = isFireworkActive(); BetterBlockPos goingTo = null; boolean forceUseFirework = false; - this.sinceFirework++; + final boolean isInLava = ctx.player().isInLava(); outermost: @@ -447,11 +454,8 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } private void tickUseFireworks(final Vec3d start, final boolean firework, final BetterBlockPos goingTo, final boolean forceUseFirework) { - final long now = System.nanoTime(); - final long waitUntil = this.lastSetBack + Baritone.settings().elytraFireworkSetbackUseDelay.value * TICK_IN_NANOS; - final long remaining = waitUntil - now; - if (remaining < 0) { - logDebug("waiting for elytraFireworkSetbackUseDelay: " + (remaining / TICK_IN_NANOS)); + if (this.remainingSetBackTicks > 0) { + logDebug("waiting for elytraFireworkSetbackUseDelay: " + this.remainingSetBackTicks); return; } final boolean useOnDescend = !Baritone.settings().conserveFireworks.value || ctx.player().posY < goingTo.y + 5; @@ -463,7 +467,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H ).lengthSquared(); final double elytraFireworkSpeed = Baritone.settings().elytraFireworkSpeed.value; - if (sinceFirework > 10 && (forceUseFirework || (!firework + if (this.remainingFireworkTicks <= 0 && (forceUseFirework || (!firework && useOnDescend && (ctx.player().posY < goingTo.y - 5 || start.distanceTo(new Vec3d(goingTo.x + 0.5, ctx.player().posY, goingTo.z + 0.5)) > 5) // UGH!!!!!!! && currentSpeed < elytraFireworkSpeed * elytraFireworkSpeed)) @@ -477,7 +481,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); - sinceFirework = 0; + this.remainingFireworkTicks = 10; } }