From a5445b0dce7cc073c180377b92dbf2f256a2f367 Mon Sep 17 00:00:00 2001 From: chsami Date: Tue, 10 Mar 2026 12:42:31 +0100 Subject: [PATCH 1/2] fix(AIOMagicPlugin): Bump version to 1.2.2 and improve item withdrawal logic in SuperHeatScript --- .../microbot/aiomagic/AIOMagicPlugin.java | 2 +- .../aiomagic/scripts/SuperHeatScript.java | 40 ++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/runelite/client/plugins/microbot/aiomagic/AIOMagicPlugin.java b/src/main/java/net/runelite/client/plugins/microbot/aiomagic/AIOMagicPlugin.java index e874d0e30a..edf3c0a22e 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/aiomagic/AIOMagicPlugin.java +++ b/src/main/java/net/runelite/client/plugins/microbot/aiomagic/AIOMagicPlugin.java @@ -77,7 +77,7 @@ AIOMagicConfig provideConfig(ConfigManager configManager) { @Inject private SpinFlaxScript spinFlaxScript; - public final static String version = "1.2.1"; // bumped + public final static String version = "1.2.2"; @Getter private Rs2CombatSpells combatSpell; diff --git a/src/main/java/net/runelite/client/plugins/microbot/aiomagic/scripts/SuperHeatScript.java b/src/main/java/net/runelite/client/plugins/microbot/aiomagic/scripts/SuperHeatScript.java index 257431c460..3b9fa584ea 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/aiomagic/scripts/SuperHeatScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/aiomagic/scripts/SuperHeatScript.java @@ -116,7 +116,9 @@ public boolean run() { return; } - Rs2Bank.withdrawX(plugin.getSuperHeatItem().getItemID(), requiredOre); + if (!withdrawExactAmount(plugin.getSuperHeatItem().getItemID(), requiredOre)) { + return; + } if (requiredCoal > 0) { if (!Rs2Bank.hasBankItem(ItemID.COAL, requiredCoal)) { @@ -125,8 +127,15 @@ public boolean run() { return; } - Rs2Bank.withdrawX(ItemID.COAL, requiredCoal); + if (!withdrawExactAmount(ItemID.COAL, requiredCoal)) { + return; + } + } + + if (!hasBankedMaterialsForCycle(requiredOre, requiredCoal)) { + return; } + Rs2Bank.closeBank(); sleepUntil(() -> !Rs2Bank.isOpen()); break; @@ -203,4 +212,31 @@ public static int[] calculateOreAndCoal(SuperHeatItem superHeatItem, int emptySl return new int[]{oreToWithdraw, coalToWithdraw}; } + + private boolean withdrawExactAmount(int itemId, int amount) { + if (amount <= 0) { + return true; + } + + if (!Rs2Bank.withdrawX(true, itemId, amount)) { + return false; + } + + Rs2Inventory.waitForInventoryChanges(1200); + sleepUntil(() -> Rs2Inventory.hasItemAmount(itemId, amount), 2500); + return Rs2Inventory.hasItemAmount(itemId, amount); + } + + private boolean hasBankedMaterialsForCycle(int requiredOre, int requiredCoal) { + boolean hasRequiredOre = Rs2Inventory.hasItemAmount(plugin.getSuperHeatItem().getItemID(), requiredOre); + if (!hasRequiredOre) { + return false; + } + + if (requiredCoal <= 0) { + return true; + } + + return Rs2Inventory.hasItemAmount(ItemID.COAL, requiredCoal); + } } From 53b2f1cbd1ff93e611e0453870cee0bc3f59c8eb Mon Sep 17 00:00:00 2001 From: chsami Date: Tue, 10 Mar 2026 12:49:49 +0100 Subject: [PATCH 2/2] fix(GiantMolePlugin): Bump version to 0.0.5 and enhance mole interaction logic --- .../microbot/giantmole/GiantMolePlugin.java | 2 +- .../microbot/giantmole/GiantMoleScript.java | 72 ++++++++++++++----- 2 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMolePlugin.java b/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMolePlugin.java index 5f4df749ab..1e9f60ba60 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMolePlugin.java +++ b/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMolePlugin.java @@ -32,7 +32,7 @@ ) @Slf4j public class GiantMolePlugin extends Plugin { - public static final String version = "0.0.4"; + public static final String version = "0.0.5"; @Inject private GiantMoleConfig config; diff --git a/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMoleScript.java b/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMoleScript.java index 010c698d78..b6b5ba03e0 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMoleScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/giantmole/GiantMoleScript.java @@ -278,11 +278,13 @@ public void goInsideMoleHill() */ public static WorldPoint getMoleLocation() { - if (isInMoleTunnel()) + if (!isInMoleTunnel()) { - return Microbot.getClient().getHintArrowPoint(); + return null; } - return null; + return Microbot.getClientThread() + .runOnClientThreadOptional(() -> Microbot.getClient().getHintArrowPoint()) + .orElse(null); } /** @@ -308,7 +310,10 @@ public static boolean isMoleDead() */ public Rs2NpcModel getMole() { - return new Rs2NpcModel(Microbot.getClient().getHintArrowNpc()); + return Microbot.getClientThread() + .runOnClientThreadOptional(() -> Microbot.getClient().getHintArrowNpc()) + .map(Rs2NpcModel::new) + .orElse(null); } /** @@ -352,22 +357,34 @@ public void walkToMole() public void attackMole() { Rs2NpcModel mole = getMole(); - if (mole != null && !Rs2Combat.inCombat()) + if (mole == null || Rs2Combat.inCombat()) { - // Mole's "dig" animation is 3314; if it's mid-dig or dead, skip - if (mole.getAnimation() == 3314 || isMoleDead()) - { - return; - } + return; + } - // If pathfinder is active, exit it before attacking - if (ShortestPathPlugin.getPathfinder() != null) - { - ShortestPathPlugin.exit(); - sleep(600, 800); - } + boolean moleIsDigging = Microbot.getClientThread() + .runOnClientThreadOptional(() -> + { + NPC hintNpc = Microbot.getClient().getHintArrowNpc(); + return hintNpc != null && hintNpc.getAnimation() == 3314; + }) + .orElse(false); + + // Mole's "dig" animation is 3314; if it's mid-dig or dead, skip + if (moleIsDigging || isMoleDead()) + { + return; + } + + // If pathfinder is active, exit it before attacking + if (ShortestPathPlugin.getPathfinder() != null) + { + ShortestPathPlugin.exit(); + sleep(600, 800); + } - Rs2Npc.interact(mole, "Attack"); + if (Rs2Npc.interact(mole, "Attack")) + { sleep(600, 800); } } @@ -458,6 +475,10 @@ public boolean needBanking(GiantMoleConfig config) // (1) If inventory is full, we need to bank if (Rs2Inventory.isFull()) { + if (config.toggleBuryBones() && buryBonesInInventory()) + { + return false; + } Microbot.log("Inventory is full, banking..."); return true; } @@ -615,7 +636,24 @@ private void lootBones(GiantMoleConfig config) { Microbot.pauseAllScripts.compareAndSet(true, false); } + buryBonesInInventory(); + } + } + + private boolean buryBonesInInventory() + { + List bones = Rs2Inventory.getBones(); + if (bones == null || bones.isEmpty()) + { + return false; } + if (Rs2Inventory.interact(bones.get(0), "Bury")) + { + Rs2Player.waitForAnimation(); + sleep(150, 300); + return true; + } + return false; } private void lootRunes(GiantMoleConfig config)