From 5f474b36617563397772a8f979c8abba81f69897 Mon Sep 17 00:00:00 2001 From: crazymoose77756 <52980616+crazymoose77756@users.noreply.github.com> Date: Mon, 1 Jul 2024 02:57:21 -0400 Subject: [PATCH] improve AutoPot.java (#353) --- .../anticope/rejects/modules/AutoPot.java | 349 ++++-------------- 1 file changed, 80 insertions(+), 269 deletions(-) diff --git a/src/main/java/anticope/rejects/modules/AutoPot.java b/src/main/java/anticope/rejects/modules/AutoPot.java index 771a46c..f44ba70 100644 --- a/src/main/java/anticope/rejects/modules/AutoPot.java +++ b/src/main/java/anticope/rejects/modules/AutoPot.java @@ -6,10 +6,7 @@ import baritone.api.BaritoneAPI; import meteordevelopment.meteorclient.events.entity.player.ItemUseCrosshairTargetEvent; import meteordevelopment.meteorclient.events.world.TickEvent; -import meteordevelopment.meteorclient.settings.BoolSetting; -import meteordevelopment.meteorclient.settings.IntSetting; -import meteordevelopment.meteorclient.settings.Setting; -import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.combat.AnchorAura; @@ -20,51 +17,49 @@ import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.orbit.EventHandler; import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.PotionContentsComponent; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.registry.Registries; import net.minecraft.registry.entry.RegistryEntry; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -import java.util.Map; public class AutoPot extends Module { - private static final Class[] AURAS = new Class[] { KillAura.class, CrystalAura.class, AnchorAura.class, BedAura.class }; - + private static final Class[] AURAS = new Class[]{KillAura.class, CrystalAura.class, AnchorAura.class, BedAura.class}; private final SettingGroup sgGeneral = settings.getDefaultGroup(); - private final Setting Healing = sgGeneral.add(new BoolSetting.Builder() - .name("Healing") - .description("Enables healing potions.") - .defaultValue(true) - .build() - ); - private final Setting Strength = sgGeneral.add(new BoolSetting.Builder() - .name("Strength") - .description("Enables strength potions.") - .defaultValue(true) + private final Setting> usablePotions = sgGeneral.add(new StatusEffectListSetting.Builder() + .name("potions-to-use") + .description("The potions to use.") + .defaultValue( + StatusEffects.INSTANT_HEALTH.value(), + StatusEffects.STRENGTH.value() + ) .build() ); + private final Setting useSplashPots = sgGeneral.add(new BoolSetting.Builder() - .name("Splash-Pots") - .description("Allow the use of splash pots") + .name("splash-potions") + .description("Allow the use of splash potions") .defaultValue(true) .build() ); + private final Setting health = sgGeneral.add(new IntSetting.Builder() .name("health") - .description("If health goes below this point, Healing Pot will trigger.") + .description("If health goes below this point, Healing potions will trigger.") .defaultValue(15) .min(0) .sliderMax(20) .build() ); + private final Setting pauseAuras = sgGeneral.add(new BoolSetting.Builder() .name("pause-auras") .description("Pauses all auras when eating.") @@ -78,12 +73,14 @@ public class AutoPot extends Module { .defaultValue(true) .build() ); + private final Setting lookDown = sgGeneral.add(new BoolSetting.Builder() .name("rotate") - .description("Forces you to rotate downwards when throwing bottles.") + .description("Forces you to rotate downwards when throwing splash potions.") .defaultValue(true) .build() ); + private int slot, prevSlot; private boolean drinking, splashing; private final List> wasAura = new ArrayList<>(); @@ -92,168 +89,43 @@ public class AutoPot extends Module { public AutoPot() { super(MeteorRejectsAddon.CATEGORY, "auto-pot", "Automatically Drinks Potions"); } - //Gilded's first module, lets see how much i'll die making this - //TODO:Rework everything to accept all pots - //TODO: Does strength work better if you throw it up? will check. + + // TODO : Add option to scan whole inv - then either swap item to hotbar if full or just place in first empty slot + // Note, Sometimes two or multiple splash pots are thrown - since the effect is not instant, the second pot is thrown before the effect of first is applied @Override public void onDeactivate() { - if (drinking) stopDrinking(); - if (splashing) stopSplashing(); + stopPotionUsage(); } + @EventHandler private void onTick(TickEvent.Pre event) { - if (Healing.get()) { - if (ShouldDrinkHealth()) { - //Heal Pot Slot - int slot = HealingpotionSlot(); - //Slot Not Invalid + if (mc.player.isUsingItem()) return; + for (StatusEffect statusEffect : usablePotions.get()) { + RegistryEntry registryEntry = Registries.STATUS_EFFECT.getEntry(statusEffect); + if (!mc.player.hasStatusEffect(registryEntry)) { + slot = potionSlot(statusEffect); if (slot != -1) { - startDrinking(); - } else if (HealingpotionSlot() == -1 && useSplashPots.get()) { - slot = HealingSplashpotionSlot(); - if (slot != -1) { - startSplashing(); - } - } - } - if (drinking) { - if (ShouldDrinkHealth()) { - if (isNotPotion(mc.player.getInventory().getStack(slot))) { - slot = HealingpotionSlot(); - if (slot == -1) { - info("Ran out of Pots while drinking"); - stopDrinking(); - return; - } - } else changeSlot(slot); - } - drink(); - if (ShouldNotDrinkHealth()) { - info("Health Full"); - stopDrinking(); - return; - } - } - if (splashing) { - if (ShouldDrinkHealth()) { - if (isNotSplashPotion(mc.player.getInventory().getStack(slot))) { - slot = HealingSplashpotionSlot(); - if (slot == -1) { - info("Ran out of Pots while splashing"); - stopSplashing(); - return; - } else changeSlot(slot); - } - splash(); - if (ShouldNotDrinkHealth()) { - info("Health Full"); - stopSplashing(); + if (registryEntry == StatusEffects.INSTANT_HEALTH && ShouldDrinkHealth()) { + startPotionUse(); + return; + } else if (registryEntry == StatusEffects.INSTANT_HEALTH) { return; } - } - } - } - if (Strength.get()) { - if (ShouldDrinkStrength()) { - //Strength Pot Slot - int slot = StrengthpotionSlot(); - //Slot Not Invalid - if (slot != -1) { - startDrinking(); - } - else if (StrengthpotionSlot() == -1 && useSplashPots.get()) { - slot = StrengthSplashpotionSlot(); - if (slot != -1) { - startSplashing(); - } - } - } - if (drinking) { - if (ShouldDrinkStrength()) { - if (isNotPotion(mc.player.getInventory().getStack(slot))) { - slot = StrengthpotionSlot(); - if (slot == -1) { - stopDrinking(); - info("Out of Pots"); - return; - } else changeSlot(slot); - } - drink(); - } else { - stopDrinking(); - } - } - if (splashing) { - if (ShouldDrinkStrength()) { - if (isNotSplashPotion(mc.player.getInventory().getStack(slot))) { - slot = StrengthSplashpotionSlot(); - if (slot == -1) { - info("Ran out of Pots while splashing"); - stopSplashing(); - return; - } else changeSlot(slot); - } - splash(); - } else { - stopSplashing(); + startPotionUse(); } } } } + @EventHandler private void onItemUseCrosshairTarget(ItemUseCrosshairTargetEvent event) { if (drinking) event.target = null; } + private void setPressed(boolean pressed) { mc.options.useKey.setPressed(pressed); } - private void startDrinking() { - prevSlot = mc.player.getInventory().selectedSlot; - drink(); - // Pause auras - wasAura.clear(); - if (pauseAuras.get()) { - for (Class klass : AURAS) { - Module module = Modules.get().get(klass); - - if (module.isActive()) { - wasAura.add(klass); - module.toggle(); - } - } - } - // Pause baritone - wasBaritone = false; - if (pauseBaritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing()) { - wasBaritone = true; - BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("pause"); - } - } - private void startSplashing() { - prevSlot = mc.player.getInventory().selectedSlot; - if (lookDown.get()){ - Rotations.rotate(mc.player.getYaw(), 90); splash(); - } - splash(); - // Pause auras - wasAura.clear(); - if (pauseAuras.get()) { - for (Class klass : AURAS) { - Module module = Modules.get().get(klass); - if (module.isActive()) { - wasAura.add(klass); - module.toggle(); - } - } - } - // Pause baritone - wasBaritone = false; - if (pauseBaritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing()) { - wasBaritone = true; - BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("pause"); - } - } private void drink() { changeSlot(slot); setPressed(true); @@ -261,38 +133,19 @@ private void drink() { drinking = true; } + private void splash() { changeSlot(slot); setPressed(true); splashing = true; } - private void stopDrinking() { - changeSlot(prevSlot); - setPressed(false); - drinking = false; - - // Resume auras - if (pauseAuras.get()) { - for (Class klass : AURAS) { - Module module = Modules.get().get(klass); - if (wasAura.contains(klass) && !module.isActive()) { - module.toggle(); - } - } - } - // Resume baritone - if (pauseBaritone.get() && wasBaritone) { - BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("resume"); - } - } - private void stopSplashing() { + private void stopPotionUsage() { changeSlot(prevSlot); setPressed(false); - + drinking = false; splashing = false; - // Resume auras if (pauseAuras.get()) { for (Class klass : AURAS) { Module module = Modules.get().get(klass); @@ -302,114 +155,72 @@ private void stopSplashing() { } } } - // Resume baritone if (pauseBaritone.get() && wasBaritone) { - BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("resume"); + BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("resume"); } } - private double truehealth() { + + private double trueHealth() { assert mc.player != null; return mc.player.getHealth(); } + private void changeSlot(int slot) { mc.player.getInventory().selectedSlot = slot; this.slot = slot; } + //Sunk 7 hours into these checks, if i die blame checks - //Heal pot checks - private int HealingpotionSlot() { + private int potionSlot(StatusEffect statusEffect) { int slot = -1; for (int i = 0; i < 9; i++) { - // Skip if item stack is empty ItemStack stack = mc.player.getInventory().getStack(i); if (stack.isEmpty()) continue; - if (stack.getItem() != Items.POTION) continue; - Iterator effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator(); - if (effects.hasNext()) { - StatusEffectInstance effect = effects.next(); - if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) { - slot = i; - break; + if (stack.getItem() == Items.POTION || (stack.getItem() == Items.SPLASH_POTION && useSplashPots.get())) { + PotionContentsComponent effects = stack.getComponents().getOrDefault(DataComponentTypes.POTION_CONTENTS, PotionContentsComponent.DEFAULT); + for (StatusEffectInstance effectInstance : effects.getEffects()) { + if (effectInstance.getTranslationKey().equals(statusEffect.getTranslationKey())) { + slot = i; + break; + } } } } return slot; } - private int HealingSplashpotionSlot() { - int slot = -1; - for (int i = 0; i < 9; i++) { - // Skip if item stack is empty - ItemStack stack = mc.player.getInventory().getStack(i); - if (stack.isEmpty()) continue; - if (stack.getItem() != Items.SPLASH_POTION) continue; - Iterator effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator(); - if (effects.hasNext()) { - StatusEffectInstance effect = effects.next(); - if (effect.getTranslationKey().equals("effect.minecraft.instant_health")) { - slot = i; - break; - } + + private void startPotionUse() { + prevSlot = mc.player.getInventory().selectedSlot; + + if (useSplashPots.get()) { + if (lookDown.get()) { + Rotations.rotate(mc.player.getYaw(), 90); + splash(); + } else { + splash(); } + } else { + drink(); } - return slot; - } - //Strength Pot Checks - private int StrengthSplashpotionSlot () { - int slot = -1; - for (int i = 0; i < 9; i++) { - // Skip if item stack is empty - ItemStack stack = mc.player.getInventory().getStack(i); - if (stack.isEmpty()) continue; - if (stack.getItem() != Items.SPLASH_POTION) continue; - Iterator effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator(); - if (effects.hasNext()) { - StatusEffectInstance effect = effects.next(); - if (effect.getTranslationKey().equals("effect.minecraft.strength")) { - slot = i; - break; - } - } + wasAura.clear(); + if (pauseAuras.get()) { + for (Class klass : AURAS) { + Module module = Modules.get().get(klass); - } - return slot; - } - private int StrengthpotionSlot () { - int slot = -1; - for (int i = 0; i < 9; i++) { - // Skip if item stack is empty - ItemStack stack = mc.player.getInventory().getStack(i); - if (stack.isEmpty()) continue; - if (stack.getItem() != Items.POTION) continue; - Iterator effects = stack.getItem().getComponents().get(DataComponentTypes.POTION_CONTENTS).getEffects().iterator(); - if (effects.hasNext()) { - StatusEffectInstance effect = effects.next(); - if (effect.getTranslationKey().equals("effect.minecraft.strength")) { - slot = i; - break; + if (module.isActive()) { + wasAura.add(klass); + module.toggle(); } } - } - return slot; - } - private boolean isNotPotion(ItemStack stack) { - Item item = stack.getItem(); - return item != Items.POTION; - } - private boolean isNotSplashPotion(ItemStack stack) { - Item item = stack.getItem(); - return item != Items.SPLASH_POTION; - } - private boolean ShouldDrinkHealth(){ - if (truehealth() < health.get()) return true; - return false; - } - private boolean ShouldNotDrinkHealth(){ - if (truehealth() >= health.get()) return true; - return false; + wasBaritone = false; + if (pauseBaritone.get() && BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().isPathing()) { + wasBaritone = true; + BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("pause"); + } } - private boolean ShouldDrinkStrength(){ - Map, StatusEffectInstance> effects = mc.player.getActiveStatusEffects(); - return !effects.containsKey(StatusEffects.STRENGTH); + + private boolean ShouldDrinkHealth() { + return trueHealth() < health.get(); } }