From b7d494e40a344a8d3a65e8d94dc23482838ff8df Mon Sep 17 00:00:00 2001 From: noil Date: Mon, 11 Oct 2021 23:01:11 -0400 Subject: [PATCH] AutoGap, AutoTotem, BattleInfo updates, also moved to 3.1.8 --- build.gradle | 2 +- .../api/task/hand/HandSwapContext.java | 14 ++- .../hud/component/BattleInfoComponent.java | 2 +- .../impl/module/combat/AutoTotemModule.java | 21 ++++ .../impl/module/player/AutoGappleModule.java | 90 ++++++++++++++++-- .../assets/seppukumod/textures/john.jpg | Bin 0 -> 8514 bytes 6 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/assets/seppukumod/textures/john.jpg diff --git a/build.gradle b/build.gradle index 41d3ea6..0d5b062 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: "com.github.johnrengelman.shadow" -version = "3.1.7" +version = "3.1.8" group = "me.rigamortis" archivesBaseName = "seppuku" def buildmode = "IDE" diff --git a/src/main/java/me/rigamortis/seppuku/api/task/hand/HandSwapContext.java b/src/main/java/me/rigamortis/seppuku/api/task/hand/HandSwapContext.java index 991e2f7..0a93fc1 100644 --- a/src/main/java/me/rigamortis/seppuku/api/task/hand/HandSwapContext.java +++ b/src/main/java/me/rigamortis/seppuku/api/task/hand/HandSwapContext.java @@ -6,10 +6,10 @@ import net.minecraft.client.Minecraft; * @author Daniel E */ public final class HandSwapContext { - private final int oldSlot; - private final int newSlot; + private int oldSlot; + private int newSlot; - public HandSwapContext(final int oldSlot, final int newSlot) { + public HandSwapContext(int oldSlot, int newSlot) { this.oldSlot = oldSlot; this.newSlot = newSlot; } @@ -22,6 +22,14 @@ public final class HandSwapContext { return newSlot; } + public void setOldSlot(int oldSlot) { + this.oldSlot = oldSlot; + } + + public void setNewSlot(int newSlot) { + this.newSlot = newSlot; + } + public void handleHandSwap(final boolean restore, final Minecraft minecraft) { minecraft.player.inventory.currentItem = diff --git a/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/BattleInfoComponent.java b/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/BattleInfoComponent.java index be2c29b..efd82fc 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/BattleInfoComponent.java +++ b/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/BattleInfoComponent.java @@ -31,7 +31,7 @@ public final class BattleInfoComponent extends DraggableHudComponent { this.setW(117); this.setH(48); - this.donorsTexture = new Texture("seppuku_sky.jpg"); + this.donorsTexture = new Texture("john.jpg"); } @Override diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/combat/AutoTotemModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/combat/AutoTotemModule.java index 1c320eb..edbe72f 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/combat/AutoTotemModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/combat/AutoTotemModule.java @@ -1,9 +1,12 @@ package me.rigamortis.seppuku.impl.module.combat; +import me.rigamortis.seppuku.Seppuku; import me.rigamortis.seppuku.api.event.EventStageable; import me.rigamortis.seppuku.api.event.player.EventPlayerUpdate; +import me.rigamortis.seppuku.api.event.world.EventLoadWorld; import me.rigamortis.seppuku.api.module.Module; import me.rigamortis.seppuku.api.value.Value; +import me.rigamortis.seppuku.impl.module.player.AutoGappleModule; import net.minecraft.client.Minecraft; import net.minecraft.init.Items; import net.minecraft.inventory.ClickType; @@ -19,12 +22,22 @@ public final class AutoTotemModule extends Module { public final Value health = new Value<>("Health", new String[]{"Hp", "h"}, "The amount of health needed to acquire a totem.", 7.0f, 0.0f, 20.0f, 0.5f); public final Value crystals = new Value<>("Crystals", new String[]{"cry", "c"}, "Go back to crystals in offhand after health is replenished.", false); + //public final Value force = new Value<>("Force", new String[]{"f"}, "Prioritize AutoTotem over AutoGapple, etc.", true); public final Value checkScreen = new Value<>("CheckScreen", new String[]{"screen", "check", "cs"}, "Checks if a screen is not opened to begin (usually disabled).", false); + private AutoGappleModule autoGappleModule; + public AutoTotemModule() { super("AutoTotem", new String[]{"Totem"}, "Automatically places a totem of undying in your offhand", "NONE", -1, ModuleType.COMBAT); } + @Listener + public void onLoadWorld(EventLoadWorld event) { + if (event.getWorld() != null) { + this.autoGappleModule = (AutoGappleModule) Seppuku.INSTANCE.getModuleManager().find(AutoGappleModule.class); + } + } + @Override public String getMetaData() { return "" + this.getTotemCount(); @@ -57,6 +70,14 @@ public final class AutoTotemModule extends Module { } } else { if (mc.player.getHealth() > this.health.getValue() && this.crystals.getValue()) { + if (this.autoGappleModule != null) { + if (this.autoGappleModule.isEnabled()) { + if (this.autoGappleModule.isActiveOffHand()) { + return; + } + } + } + if (offHand.getItem() == Items.END_CRYSTAL) { return; } diff --git a/src/main/java/me/rigamortis/seppuku/impl/module/player/AutoGappleModule.java b/src/main/java/me/rigamortis/seppuku/impl/module/player/AutoGappleModule.java index 1421a77..09aebe3 100644 --- a/src/main/java/me/rigamortis/seppuku/impl/module/player/AutoGappleModule.java +++ b/src/main/java/me/rigamortis/seppuku/impl/module/player/AutoGappleModule.java @@ -7,10 +7,12 @@ import me.rigamortis.seppuku.api.event.world.EventLoadWorld; import me.rigamortis.seppuku.api.module.Module; import me.rigamortis.seppuku.api.value.Value; import me.rigamortis.seppuku.impl.module.combat.AutoTotemModule; +import me.rigamortis.seppuku.impl.module.combat.MultitaskModule; import net.minecraft.client.Minecraft; import net.minecraft.init.Items; import net.minecraft.inventory.ClickType; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; import team.stiff.pomelo.impl.annotated.handler.annotation.Listener; /** @@ -20,11 +22,15 @@ public final class AutoGappleModule extends Module { public final Value health = new Value("Health", new String[]{"Hp", "h"}, "The amount of health needed to acquire a notch apple.", 15.0f, 0.0f, 20.0f, 0.5f); public final Value forcedSlot = new Value("Slot", new String[]{"s"}, "The hot-bar slot to put the notch apple into. (45 for offhand)", 44, 0, 44, 1); + public final Value enchantedOnly = new Value("EnchantedOnly", new String[]{"Enchanted", "Enchant", "EnchantOnly", "Notch", "NotchOnly", "NO", "EO"}, "Only allow enchanted golden apples to be used.", true); private int previousHeldItem = -1; private int notchAppleSlot = -1; + private boolean activeMainHand; + private boolean activeOffHand; private AutoTotemModule autoTotemModule; + private MultitaskModule multitaskModule; public AutoGappleModule() { super("AutoGapple", new String[]{"Gapple", "AutoApple"}, "Automatically swaps & eats a (notch) apple when health is below the set threshold.", "NONE", -1, ModuleType.PLAYER); @@ -39,6 +45,7 @@ public final class AutoGappleModule extends Module { public void onLoadWorld(EventLoadWorld event) { if (event.getWorld() != null) { this.autoTotemModule = (AutoTotemModule) Seppuku.INSTANCE.getModuleManager().find(AutoTotemModule.class); + this.multitaskModule = (MultitaskModule) Seppuku.INSTANCE.getModuleManager().find(MultitaskModule.class); } } @@ -62,6 +69,9 @@ public final class AutoGappleModule extends Module { if (mc.player.getHealth() < this.health.getValue() && mc.player.getAbsorptionAmount() == 0) { this.notchAppleSlot = this.findNotchApple(); + } else { + this.setActiveMainHand(false); + this.setActiveOffHand(false); } if (this.notchAppleSlot != -1) { @@ -71,15 +81,18 @@ public final class AutoGappleModule extends Module { } if (this.notchAppleSlot < 36) { + this.setActiveMainHand(true); mc.playerController.windowClick(0, this.forcedSlot.getValue(), 0, ClickType.QUICK_MOVE, mc.player); // last hotbar slot mc.playerController.windowClick(0, this.notchAppleSlot, 0, ClickType.PICKUP, mc.player); mc.playerController.windowClick(0, this.forcedSlot.getValue(), 0, ClickType.PICKUP, mc.player); mc.player.inventory.currentItem = this.forcedSlot.getValue() - 36; } else { + this.setActiveMainHand(true); mc.player.inventory.currentItem = this.notchAppleSlot - 36; // in the hotbar, so remove the inventory offset } } else { // we need this notch apple in the offhand if (mc.player.getHeldItemOffhand().getItem() != Items.GOLDEN_APPLE) { + this.setActiveOffHand(true); mc.playerController.windowClick(0, 45, 0, ClickType.QUICK_MOVE, mc.player); // offhand slot mc.playerController.windowClick(0, this.notchAppleSlot, 0, ClickType.PICKUP, mc.player); mc.playerController.windowClick(0, 45, 0, ClickType.PICKUP, mc.player); @@ -87,23 +100,57 @@ public final class AutoGappleModule extends Module { } if (mc.player.getHealth() >= this.health.getValue() && mc.player.getAbsorptionAmount() > 0) { - mc.gameSettings.keyBindUseItem.pressed = false; - if (this.previousHeldItem != -1) { - mc.player.inventory.currentItem = this.previousHeldItem; - } - this.notchAppleSlot = -1; - this.previousHeldItem = -1; + this.stop(); } else { - mc.gameSettings.keyBindUseItem.pressed = true; + if (this.forcedSlot.getValue() != 45) { + this.setActiveMainHand(true); + if (this.multitaskModule != null) { + if (this.multitaskModule.isEnabled()) { + mc.playerController.processRightClick(mc.player, mc.world, EnumHand.MAIN_HAND); + } else { + mc.gameSettings.keyBindUseItem.pressed = true; + } + } + } else { + this.setActiveOffHand(true); + if (this.multitaskModule != null) { + if (this.multitaskModule.isEnabled()) { + mc.playerController.processRightClick(mc.player, mc.world, EnumHand.OFF_HAND); + } else { + mc.gameSettings.keyBindUseItem.pressed = true; + } + } + } + + if (this.multitaskModule == null) { + mc.gameSettings.keyBindUseItem.pressed = true; + } } } } + public void stop() { + Minecraft.getMinecraft().gameSettings.keyBindUseItem.pressed = false; + if (this.previousHeldItem != -1) { + Minecraft.getMinecraft().player.inventory.currentItem = this.previousHeldItem; + } + this.notchAppleSlot = -1; + this.previousHeldItem = -1; + this.setActiveMainHand(false); + this.setActiveOffHand(false); + } + private int findNotchApple() { for (int slot = 44; slot > 8; slot--) { ItemStack itemStack = Minecraft.getMinecraft().player.inventoryContainer.getSlot(slot).getStack(); - if (itemStack.isEmpty() || itemStack.getItemDamage() == 0) + if (itemStack.isEmpty()) { continue; + } + + if (this.enchantedOnly.getValue()) { + if (itemStack.getItemDamage() == 0) + continue; + } if (itemStack.getItem() == Items.GOLDEN_APPLE) { return slot; @@ -120,11 +167,34 @@ public final class AutoGappleModule extends Module { for (int i = 0; i < 45; i++) { final ItemStack stack = Minecraft.getMinecraft().player.inventory.getStackInSlot(i); - if (stack.getItem() == Items.GOLDEN_APPLE && stack.getItemDamage() != 0) { - gapples += stack.getCount(); + if (stack.getItem() != Items.GOLDEN_APPLE) { + continue; } + + if (this.enchantedOnly.getValue()) { + if (stack.getItemDamage() == 0) + continue; + } + + gapples += stack.getCount(); } return gapples; } + + public boolean isActiveMainHand() { + return activeMainHand; + } + + public void setActiveMainHand(boolean activeMainHand) { + this.activeMainHand = activeMainHand; + } + + public boolean isActiveOffHand() { + return activeOffHand; + } + + public void setActiveOffHand(boolean activeOffHand) { + this.activeOffHand = activeOffHand; + } } diff --git a/src/main/resources/assets/seppukumod/textures/john.jpg b/src/main/resources/assets/seppukumod/textures/john.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aace33273a9c21f0f279b0ff197c750efad78e4a GIT binary patch literal 8514 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 literal 0 HcmV?d00001