diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 3f46c24d9..23f138eeb 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -50,14 +50,6 @@ public final class Settings { public final Setting elytraSimulationTicks = new Setting<>(20); public final Setting elytraPitchRange = new Setting<>(25); - /** - * Allow users to control firework usage instead of Baritone. e.g. with their own client modules. - */ - public final Setting elytraUseFireworks = new Setting<>(true); - /** - * Allow Baritone to manage fireworks in the inventory and hotbar - */ - public final Setting elytraInventory = new Setting<>(true); public final Setting elytraFireworkSpeed = new Setting<>(0.6); public final Setting conserveFireworks = new Setting<>(true); public final Setting renderRaytraces = new Setting<>(false); diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 28628e68f..3ff824474 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -431,21 +431,16 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H if (forceUseFirework || (!firework && sinceFirework > 10 - && Baritone.settings().elytraUseFireworks.value && 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 < Baritone.settings().elytraFireworkSpeed.value) ) { - if (Baritone.settings().elytraInventory.value) { - final int firstFireworksInHotbar = firstFireworksInHotbar(); - if (firstFireworksInHotbar == -1) { - if (!swapToFireworksInInventory()) { - logDirect("no fireworks"); - return; - } - } else { - ctx.player().inventory.currentItem = firstFireworksInHotbar; - } + // Prioritize boosting fireworks over regular ones + // TODO: Take the minimum boost time into account? + if (!baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isBoostingFireworks) && + !baritone.getInventoryBehavior().throwaway(true, ElytraBehavior::isFireworks)) { + logDirect("no fireworks"); + return; } logDirect("attempting to use firework" + (forceUseFirework ? " takeoff" : "")); ctx.playerController().processRightClick(ctx.player(), ctx.world(), EnumHand.MAIN_HAND); @@ -453,42 +448,18 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } } - private boolean swapToFireworksInInventory() { - final int i = firstFireworksInInventory(); - if (i != -1) { - baritone.getInventoryBehavior().attemptToPutOnHotbar(i, (slot) -> slot != 7); - ctx.player().inventory.currentItem = 7; - return true; + private static boolean isFireworks(final ItemStack itemStack) { + if (itemStack.getItem() != Items.FIREWORKS) { + return false; } - return false; - } - - private int firstFireworksInInventory() { - final NonNullList invy = ctx.player().inventory.mainInventory; - for (int i = 0; i < invy.size(); i++) { - if (isBoostingFireworks(invy.get(i))) { - return i; - } - } - return -1; - } - - private int firstFireworksInHotbar() { - final NonNullList invy = ctx.player().inventory.mainInventory; - for (int i = 0; i < 9; i++) { - if (isBoostingFireworks(invy.get(i))) { - return i; - } - } - return -1; - } - - private boolean isBoostingFireworks(final ItemStack itemStack) { + // If it has NBT data, make sure it won't cause us to explode. final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); - return itemStack.getItem() == Items.FIREWORKS - && subCompound != null - && subCompound.hasKey("Flight") - && !subCompound.hasKey("Explosions"); + return subCompound == null || !subCompound.hasKey("Explosions"); + } + + private static boolean isBoostingFireworks(final ItemStack itemStack) { + final NBTTagCompound subCompound = itemStack.getSubCompound("Fireworks"); + return isFireworks(itemStack) && subCompound != null && subCompound.hasKey("Flight"); } private boolean isFireworkActive() {