fix(birdhouse): manual pendant teleport + mushtree transport#2
Open
runsonmypc wants to merge 129 commits into
Open
fix(birdhouse): manual pendant teleport + mushtree transport#2runsonmypc wants to merge 129 commits into
runsonmypc wants to merge 129 commits into
Conversation
Development
fix(AIOMagicPlugin): Bump version to 1.2.3 and add support for Stun a…
…prevent weird bank withdrawal shenanigans (tried withdrawing yew logs)
feat/new-planks + profit calculation fix/update + Lazy Mode
* feat(sailing): fix alch loop, add casket opening and inventory order options * feat(sailing): fix alch loop, add casket opening and inventory order options Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com>
Development
fix(TitheFarmingPlugin): Bump version to 1.1.4 and update game object…
Development
fix(TitheFarmingPlugin): Bump version to 1.1.5 and update game object…
Development
* fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit
Development
* Reduce code smell, implement sawmill vouchers and Lazy Mode * Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs) * undo main runner change * re-add microbot.java. whoops. * Karam fix (chsami#351) * fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit * client thread fixes --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com>
…r/banking/flicker scripts to Queryable API Continues the AIOFighter Queryable API migration started in 2.1.0: - PrayerScript / SlayerScript / FlickerScript now inject Rs2NpcCache and use rs2NpcCache.query() chains instead of legacy Rs2Npc.* lookups. - BankerScript injects Rs2TileObjectCache for the Pool of Refreshment lookup, replacing Rs2GameObject.get()/interact(). The .nearest(20) bound preserves the legacy 51-tile walk-to guard's intent (the new model's click() does not walk-to-object). - Monster.npc swapped to api.npc.models.Rs2NpcModel; AIOFighterOverlay is unchanged because both legacy and new models implement Actor. - Logout-race null guards added to PrayerScript and FlickerScript to mirror legacy Rs2Npc.getNpcsForPlayer's empty-stream behavior. - SlayerScript predicate collapses two getName() calls (each is a client-thread invoke) into a single fetch. - Migrated scripts converted to @Inject in AIOFighterPlugin so Guice satisfies their cache fields. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…he access from @Inject to Microbot static accessors The 2.1.0/2.1.3 @Inject Rs2NpcCache / Rs2TileObjectCache fields and the @Inject script wiring in AIOFighterPlugin caused Guice's createChildInjector to throw inside MicrobotPluginManager.instantiate. The Hub plugin loader silently catches that exception (MicrobotPluginManager.java:564-568): it logs "Incompatible plugin found", deletes the plugin's JAR from ~/.runelite/microbot-plugins, and returns the partially-constructed plugin with all @Inject fields still null. The plugin then sat in the UI list and NPE'd in startUp() at line 150 (config null) when started. Fix: revert the @Inject script wiring back to `new XxxScript()` and switch every cache access from injected field to the upstream static accessor (Microbot.getRs2NpcCache() / Microbot.getRs2TileObjectCache()). The static fields in Microbot.java are populated via requestStaticInjection in RuneLiteModule, which is the same pattern Rs2BoatModel uses upstream. This keeps all the Queryable API call sites identical while bypassing Guice's plugin-classloader child-injector binding-resolution problem entirely. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…criptor with default settings
* Reduce code smell, implement sawmill vouchers and Lazy Mode * Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs) * undo main runner change * re-add microbot.java. whoops. * Karam fix (chsami#351) * fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit * Add Use Cargo Hold to salvaging script and debug thoroughly * various fixes and changed hold capacity counting to use widget information as opposed to walking the item graph * small fixes * Boat facilities detection fixes, comment changes --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com>
…ect interactions to use Rs2TileObjectModel
* fix(aiomagic): Fix stun and added queryable NPC targeting (chsami#365) * Reduce code smell, implement sawmill vouchers and Lazy Mode * Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs) * undo main runner change * re-add microbot.java. whoops. * Karam fix (chsami#351) * fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit * fix(aiomagic): bring back stable 1.2.6 flow with queryable NPC targeting •restore missing STUN lifecycle wiring so the mode starts and shuts down correctly •replace hardcoded StunTeleAlch target/teleport with user-configured NPC + teleport •move stun/splash NPC lookup to Queryable NPC cache for reliable targeting •harden stun cast sequence: select spell, confirm selection, then click target NPC •Plugin version updated 1.2.6 --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: Jonathan Thomas <95548936+JThomasDevs@users.noreply.github.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com> * Autopray changes and additions (chsami#366) * Reduce code smell, implement sawmill vouchers and Lazy Mode * Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs) * undo main runner change * re-add microbot.java. whoops. * Karam fix (chsami#351) * fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit * LMS Mode - antiban, antiban config Made-with: Cursor # Conflicts: # src/main/java/net/runelite/client/plugins/microbot/qualityoflife/scripts/AutoPrayer.java * laxed antiban regarding fast weapon switches * - Added offensive prayers to autoprayer - Moved autoeat to the client thread - Throttled autoeating in PvP as to not block prayer switching when trying to spam eat - Fully fleshed out remaining LMS weapons in WeaponID enum - changed LMS dd to be classified as melee weapon Made-with: Cursor # Conflicts: # src/main/java/net/runelite/client/plugins/microbot/qualityoflife/QoLPlugin.java --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com> * docs: add Agent Server and Microbot CLI documentation * fix(AIOFighterPlugin): bump version to 2.0.13 and refactor configuration methods * client thread fixes (chsami#371) * Reduce code smell, implement sawmill vouchers and Lazy Mode * Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs) * undo main runner change * re-add microbot.java. whoops. * Karam fix (chsami#351) * fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit * client thread fixes --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com> * fix(AIOFighterPlugin): bump version to 2.0.14 and improve player location checks * fix(AIOFighterPlugin): bump version to 2.1.0 and refactor NPC interaction logic * fix(AIOFighterPlugin): bump version to 2.1.3 and migrate prayer/slayer/banking/flicker scripts to Queryable API Continues the AIOFighter Queryable API migration started in 2.1.0: - PrayerScript / SlayerScript / FlickerScript now inject Rs2NpcCache and use rs2NpcCache.query() chains instead of legacy Rs2Npc.* lookups. - BankerScript injects Rs2TileObjectCache for the Pool of Refreshment lookup, replacing Rs2GameObject.get()/interact(). The .nearest(20) bound preserves the legacy 51-tile walk-to guard's intent (the new model's click() does not walk-to-object). - Monster.npc swapped to api.npc.models.Rs2NpcModel; AIOFighterOverlay is unchanged because both legacy and new models implement Actor. - Logout-race null guards added to PrayerScript and FlickerScript to mirror legacy Rs2Npc.getNpcsForPlayer's empty-stream behavior. - SlayerScript predicate collapses two getName() calls (each is a client-thread invoke) into a single fetch. - Migrated scripts converted to @Inject in AIOFighterPlugin so Guice satisfies their cache fields. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(AIOFighterPlugin): bump version to 2.1.4 and switch Queryable cache access from @Inject to Microbot static accessors The 2.1.0/2.1.3 @Inject Rs2NpcCache / Rs2TileObjectCache fields and the @Inject script wiring in AIOFighterPlugin caused Guice's createChildInjector to throw inside MicrobotPluginManager.instantiate. The Hub plugin loader silently catches that exception (MicrobotPluginManager.java:564-568): it logs "Incompatible plugin found", deletes the plugin's JAR from ~/.runelite/microbot-plugins, and returns the partially-constructed plugin with all @Inject fields still null. The plugin then sat in the UI list and NPE'd in startUp() at line 150 (config null) when started. Fix: revert the @Inject script wiring back to `new XxxScript()` and switch every cache access from injected field to the upstream static accessor (Microbot.getRs2NpcCache() / Microbot.getRs2TileObjectCache()). The static fields in Microbot.java are populated via requestStaticInjection in RuneLiteModule, which is the same pattern Rs2BoatModel uses upstream. This keeps all the Queryable API call sites identical while bypassing Guice's plugin-classloader child-injector binding-resolution problem entirely. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(HueyPrayerPlugin): update version to 1.0.1 and enhance plugin descriptor with default settings * Add Use Cargo Hold to salvaging script and debug thoroughly (chsami#368) * Reduce code smell, implement sawmill vouchers and Lazy Mode * Change profit calculation to be more accurate, extended Logs enum to prevent weird bank withdrawal shenanigans (tried withdrawing yew logs) * undo main runner change * re-add microbot.java. whoops. * Karam fix (chsami#351) * fix: karambwan fairy ring return Made-with: Cursor * plugin now clicks on fairy ring to get back to karams * commit * Add Use Cargo Hold to salvaging script and debug thoroughly * various fixes and changed hold capacity counting to use widget information as opposed to walking the item graph * small fixes * Boat facilities detection fixes, comment changes --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com> * fix(TitheFarmingPlugin): bump version to 1.1.12 and refactor game object interactions to use Rs2TileObjectModel * mahogany homes client thread fixes (chsami#372) --------- Co-authored-by: irkedMATT <59846844+irkedMATT@users.noreply.github.com> Co-authored-by: Jonathan Thomas <95548936+JThomasDevs@users.noreply.github.com> Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ng and crushing logic
…ect interactions to use Rs2TileObjectModel
…t interactions to use Microbot API
* fix prayer bug and add trio mode to charge pillars (chsami#408) * fix(QoL): drop FieldUtil static-final hacks FieldUtil no longer exists; stop mutating ColorScheme/ToggleButton statics. Patch Swing via UIManager defaults + per-component updates, queue UI refresh/restore safely, and keep toggles/labels consistent. --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: JThomasDevs <95548936+JThomasDevs@users.noreply.github.com>
) walkToBoss called walkWithState(bossWorldPoint, 0) once (exact-tile match) then fell back to walkFastCanvas(bossWorldPoint). When the walker exited early on a single pass (cross-region transport, door handler interrupt) the canvas-click fallback tried to click a tile dozens of tiles off-screen, LocalPoint.fromWorld returned null, and the plugin looped forever without the player ever moving. Replace with a bounded retry loop: walkWithState(bp, 3) with 600ms spacing and a 90s overall budget, breaking on distance<=3. Null-guard Rs2Player.getWorldLocation() since it can transiently return null during region transitions (observed NPE at BossHandler.java:50). Callers (Blue/Eclipse/BloodMoonHandler, RewardHandler) only need scene proximity -- each follows with its own exact-tile interaction. Bump version 1.0.3 -> 1.0.4. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…mi#414) Replace brittle per-location furnace object IDs in CraftingLocation with a name-based lookup anchored at the configured WorldPoint (or the player when ANYWHERE), gated by a "Smelt" action check — matches AutoSmeltingScript's pattern. Adds ANYWHERE (use the nearest smelt-capable furnace wherever the player is) and SHILO_VILLAGE. Wires JewelryPlugin into debugPlugins for local debug runs. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> Co-authored-by: chsami <sami.chkhachkhi@gmail.com>
* Add Sisyphus: Infernal Pact plugin - Yama's Lair stepping-stone automation (chsami#423) * fix prayer bug and add trio mode to charge pillars (chsami#408) * Add Sisyphus: Infernal Pact plugin — Yama stepping-stone automation Automates the Yama's Lair stepping-stone circuit for the Demonic Pacts League. Features: - Fixed waypoint route covering the full entry path and central circle - Fire NPC detection (ID 15608) with 2-tile exclusion radius via dual-source polling - Anti-backtracking via 3-stone history deque — always moves forward in the loop - Rapid 200-400ms scheduler for near-instant stone hops - Configurable stone count (default 666 for the Demonic Pacts task) - Respects Microbot break handler Author: Sisyphus (papakonnekt) --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: JThomasDevs <95548936+JThomasDevs@users.noreply.github.com> * fix(MKE_Wintertodt): brazier behavior, snowfall-safe fletch, antiban hardening (chsami#422) * fix(MKE_Wintertodt): brazier detection + non-blocking snowfall dodge The exact-equals worldLocation filter for brazier objects in analyzeGameState never matched live state (SE brazier at (1638,3997) vs constant (1639,3998)), so the brazier / brokenBrazier / burningBrazier slots were permanently null. Result: no light, no relight, no fix, and NPE on feed-click. Replace with a within-3 filter anchored on the player-stand tile (sides are 17 tiles apart so radius 3 still unambiguously selects the chosen side). dodgeSnowfallDamage's sleepUntilTrue (5s nominal) wedged the executor for ~140s in practice (confirmed via "avg loop time: 141100ms" in round logs), starving handleEating and nearly killing the player. Strip the wait — the next tick's priority blocks already handle a broken/unlit brazier. Make the whole dodge opt-in via new DodgeSnowfall config (default off) since most players just rely on food/potions. Also: drop the burningBrazier-not-null gate from FLETCH_LOGS fletch- start and knife-preselect (fletching needs knife + roots, not a lit brazier nearby), null-guard the BURN_LOGS feed click, only consume the round-start light priority flag when a brazier is *definitively* burning so cache lag at round start doesn't abandon it, and run handleEating before dodgeSnowfallDamage in maintenance. Bump 2.1.3 -> 2.1.7. * feat(MKE_Wintertodt): snowfall-safe fletch tile + maintenance-first priority Fletch on a tile one south of the brazier-stand tile (the same offset the dodge logic uses) so we stop tanking snowfall AoE for an entire root pile. Feeding/lighting/repair still walk back to the brazier. Promote brazier fix/relight to the top of performMaintenanceTasks, ahead of handleEating. When snowfall breaks the brazier, the repair window closes fast (other players race for it) and an unlit brazier means zero points until relit — both beat eating, which can wait a tick. The per-state priority blocks remain as a safety net. Bump version to 2.2.0 (new feature). * fix(MKE_Wintertodt): walk to fletch tile only on fresh post-chop entry Mid-fletch interruptions (brazier fix/light, eat, cold tick) don't change state, so resume fletching wherever the player happens to be standing instead of trekking back to the safe tile for a partial pile. A new one-shot `needFletchTileWalk` is armed by `changeState` only on entry into FLETCH_LOGS and cleared after the first walk. Drop "(priority over eating)" from the maintenance log label since the top-level handler also fires from CHOP_ROOTS / WAITING where there's no eat to defer. * fix(MKE_Wintertodt): antiban hardening + font-safe config icons Issues surfaced by a code review of the maintenance-priority changes: - handleBrazierMaintenance was firing a bare click() every 60ms while the repair animation ran (~30 clicks in 2s). Added a resetActions guard at the top + sleepGaussian(200, 150) before each click. - handleBurnLogsState fix-block had no pre-click delay, inconsistent with its own relight-block and every other priority block. Added sleepGaussian(200, 150). - Feed click was missing Rs2Antiban.actionCooldown(), so feeding bypassed the PlayStyle pause regime that chop/fletch already use. - Action Cooldown log line now prints the actual chance value. Config icons swapped to the Dingbats / Misc Symbols blocks, which render reliably in the JVM emoji font. The previous icons (kitchen knife / wrench, Pictographs block) silently dropped to tofu in the client panel. * fix(MKE_Wintertodt): drop pre-click delays in brazier emergency paths Removed five sleepGaussian(200, 150) calls (50-350ms) that fired before the fix/light click in handleBrazierMaintenance, handleFletchLogsState, and handleBurnLogsState. These pre-click waits cost the bot the repair race against other players when snowfall broke the brazier. deselectSelectedItem already has its own internal 80ms sleep and natural mouse adds organic humanization downstream, so the extra wait was pure dead time. Reaction now fires within ~1 tick (60ms) of detection plus mouse-travel time. * fix(MKE_Wintertodt): route nudge/hover/spam-click through natural mouse Five direct Microbot.getMouse().move(x, y) calls dispatched a teleport MOUSE_MOVED event with no path, visually obvious as a bot: - maybeNudgeMouse() fired after every chop/fletch/feed click - pre-round-start hover before the round timer hit zero - spam-click pre-hover during the wait-for-round phase Added moveCursorHumanized(int, int) and moveCursorHumanized(Rectangle) helpers that route through Microbot.naturalMouse.moveTo() when natural mouse is available, falling back to the direct move only when it isn't. The remaining no-arg Microbot.getMouse().click() in the spam path is fine — it reads the live canvas mouse position (where natural mouse just moved the cursor) and the click itself routes through the natural-mouse path via planMovementOrFallback. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> * fix(auto-looter): stop world-hopping while walking to/from bank (chsami#421) DefaultScript ran two concurrent schedulers (200ms state machine, 1000ms walk handler). The BANKING->LOOTING transition fired the moment inventory emptied, before the walk back from the bank had finished. The next LOOTING tick scanned Rs2GroundItem from the bank tile, found nothing, and after 5 misses (~1s) called Microbot.hopToWorld. Same hazard during stray-walk-back. - Add isAwayFromBase() helper: true when initialPlayerLocation is unset, the player is moving, or distance from base exceeds distanceToStray. - LOOTING now short-circuits while away from base. No scan, no failedLootAttempts increment, no world hop. - BANKING stays put until inventory is empty AND the player is parked at the loot spot. failedLootAttempts resets on the transition so each return to the spot gets a fresh 5-tick window. Refs #1747 Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> * feat(AIOAIO): record walks via destination polling (chsami#419) * feat(AIOAIO): record walks via destination polling * fix(AIOAIO): suppress side-effect walks by target location, not timing * fix(AIOAIO): capture walks via destination poll on WALK/CANCEL * fix(qol): drop FieldUtil reflective writes that crash on client 2.5.4 (chsami#418) Upstream commit 048a44d deleted util/antiban/FieldUtil to remove sun.misc.Unsafe usage, so QoLPlugin throws NoClassDefFoundError on every game state change against the official 2.5.4 jar, cascading into BlockingEventManager timeouts and freezing the canvas until shutdown. Removes the two FieldUtil.setFinalStatic calls that mutated ColorScheme.BRAND_ORANGE and MicrobotPluginToggleButton.ON_SWITCHER, plus the now-unused imports (FieldUtil, ColorScheme, java.lang.reflect.Field). There is no supported JDK 17+ replacement for writing static-final fields of another class (commons-lang3 FieldUtils.removeFinalModifier is deprecated; VarHandle requires non-final declaration). Per-instance label color and toggle icon recoloring (the parts that don't require static-final mutation) are preserved. Bumps version 1.8.12 -> 1.8.13. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> * fix(aiofighter): make NPC attack work inside instances (chsami#417) Inside an instance, npc.getWorldLocation() returns the instance-side (high-corner template region) coord, while config.centerLocation() and Rs2Player.getWorldLocation() are template/overworld coords. The radius check at AttackNpcScript filtered out every NPC because the two sides of distanceTo() were in different coordinate spaces, so the script silently did nothing in any instance. Convert the NPC location via WorldPoint.fromLocalInstance(client, npc.getLocalLocation()) when the scene is instanced, for both the radius/reachable filter and the path-distance sort. Bumps version to 2.1.7. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> * feat(Kraken): slayer-task gate, food check, spawn recovery, fix Leagues loot (chsami#416) * feat(Kraken): add Kraken boss plugin AFK five-click loop: disturb 4 small whirlpools + main, let auto-retaliate do the damage, detect Kraken NPC despawn, loot, wait for respawn, repeat. - Kraken uniques (tentacle, trident of the seas, jar of dirt, pet) are always looted regardless of user settings. - Config kept minimal: extra-names list, optional GE-value loot toggle + min price. - Click delays drawn from a skewed Gaussian (1800-2400ms, mode 2000) for humanization; all other waits use Rs2Random ranges. * feat(Kraken): slayer-task gate, food check, spawn recovery, fix Leagues loot - Slayer task gate via Rs2Slayer varbit + chat-message backstop; stops the plugin once the assigned task no longer contains "kraken". - Stop-when-out-of-food toggle (default on), checked only at IDLE so a kill is never aborted mid-fight. - FIGHTING now waits up to 8s for the Kraken to actually spawn before counting a kill — recovers cleanly when a small whirlpool was missed. - Loot: drop unconditional addCoins/addUntradables. On Leagues, drops are account-bound and report as untradeable, which was sweeping up every noted stack (monkfish, battlestaves, soul runes). * fix(Kraken): tighten disturb click cadence to ~180ms A click alone is enough to register the disturb — no need to wait for an attack to land. Drops total disturb sequence from ~8s to ~720ms while keeping enough variance to avoid metronomic timing. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> * fix(QoL): drop FieldUtil static-final hacks (chsami#415) * fix prayer bug and add trio mode to charge pillars (chsami#408) * fix(QoL): drop FieldUtil static-final hacks FieldUtil no longer exists; stop mutating ColorScheme/ToggleButton statics. Patch Swing via UIManager defaults + per-component updates, queue UI refresh/restore safely, and keep toggles/labels consistent. --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: JThomasDevs <95548936+JThomasDevs@users.noreply.github.com> * fix(moonsofperil): retry walker to reach boss lobby reliably (chsami#413) walkToBoss called walkWithState(bossWorldPoint, 0) once (exact-tile match) then fell back to walkFastCanvas(bossWorldPoint). When the walker exited early on a single pass (cross-region transport, door handler interrupt) the canvas-click fallback tried to click a tile dozens of tiles off-screen, LocalPoint.fromWorld returned null, and the plugin looped forever without the player ever moving. Replace with a bounded retry loop: walkWithState(bp, 3) with 600ms spacing and a 90s overall budget, breaking on distance<=3. Null-guard Rs2Player.getWorldLocation() since it can transiently return null during region transitions (observed NPE at BossHandler.java:50). Callers (Blue/Eclipse/BloodMoonHandler, RewardHandler) only need scene proximity -- each follows with its own exact-tile interaction. Bump version 1.0.3 -> 1.0.4. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> * feat: add Shilo Village and Anywhere options to jewelry crafter (chsami#414) Replace brittle per-location furnace object IDs in CraftingLocation with a name-based lookup anchored at the configured WorldPoint (or the player when ANYWHERE), gated by a "Smelt" action check — matches AutoSmeltingScript's pattern. Adds ANYWHERE (use the nearest smelt-capable furnace wherever the player is) and SHILO_VILLAGE. Wires JewelryPlugin into debugPlugins for local debug runs. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> Co-authored-by: chsami <sami.chkhachkhi@gmail.com> --------- Co-authored-by: papakonnekt <42449974+papakonnekt@users.noreply.github.com> Co-authored-by: JThomasDevs <95548936+JThomasDevs@users.noreply.github.com> Co-authored-by: runsonmypc <45095641+runsonmypc@users.noreply.github.com> Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> Co-authored-by: Dan G <danielginovker@gmail.com> Co-authored-by: Haliax <18099301+TheHaliax@users.noreply.github.com>
* fix prayer bug and add trio mode to charge pillars (chsami#408) * Jad helper tuning (chsami#420) * fix prayer bug and add trio mode to charge pillars * Jad prayer timing fixes * first commit --------- Co-authored-by: chsami <sami.chkhachkhi@gmail.com> Co-authored-by: papakonnekt <42449974+papakonnekt@users.noreply.github.com> Co-authored-by: runsonmypc <45095641+runsonmypc@users.noreply.github.com> Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com> Co-authored-by: Dan G <danielginovker@gmail.com> Co-authored-by: Haliax <18099301+TheHaliax@users.noreply.github.com>
…hsami#431) * fix(themess): rewrite script for batch-correctness, Make-All semantics, and burn recovery The Mess plugin was running 1-2 actions per dispatcher tick and re-issuing combine/cook calls between Make-X items, capping every batch at a few products and stalling repeatedly. This rewrite consolidates the per-dish flow around a single principle: each phase blocks until its consumed ingredient hits 0, so the dispatcher cannot pick a competing guard mid-chain. - cookOnOven and combineAll/combineDoughDialog now block on inventory delta (not animation, which combines don't have) until the consumed item is depleted, with stall guards. - Per-dish guards reordered so cooking-to-zero precedes any combine that uses its output (no more "started combining the moment 2 cooked meats appeared"). - Withdrawal targets size to predecessor counts so burn-induced leftover shells/water/etc. carry into the next batch and the chain tops up rather than over-fetching. - Cupboard withdraws use VarClientStr.INPUT_TEXT instead of typeString for the Enter Amount prompt, fixing digits leaking into game chat when the chatbox input hadn't taken focus. - Cupboard interactions use exact-tile lookup (findObjectByLocation) to avoid mis-targeting the food cupboard when querying near the utensil cupboard one tile away. - Burnt food dropped between phases (gated on !isAnimating and !isProductionWidgetOpen so the cook chain isn't interrupted). - Hard-fail invariant: if any chain item exceeds BATCH_SIZE the script shuts down loudly rather than over-fetching. - Bowl-return guard gated on count(PIE_SHELL) >= BATCH_SIZE so freshly withdrawn bowls aren't immediately returned during top-up. Version bump 1.0.3 → 1.1.0. * fix(themess): stew leftover recovery and combine-chain stall guard - Stew gates takeRawMeat on count(BOWL_WATER) >= BATCH_SIZE so leftover bowls from prior burns drive the top-up formula instead of looping a tiny 2-stew batch. - Reorder stew guards: fillBowls before BOWL_WATER consumers so a partial fill cannot under-fetch downstream raw meat. - Mirror Rs2GrandExchange.setQuantity timing (sleep 600 + 400 around setChatboxAmount) in withdrawFromCupboard and takeRawMeat. Without these, the chatbox silently drops small-qty values, hanging withdrawals. - fillBowls timeout 8s -> 15s; 14 bowls at game-tick speed is ~8.4s with no headroom. - waitForCombineChain stall guard from min(c1,c2) to c1+c2: knife persists at 2 during pizza pineapple-cutting, pinning min and tripping the stall guard after ~3 cuts. Sum decreases on every action. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
The script popped "smithing level isn't high enough" / "Could not find item in bank" mid-run and shut down on transient state. Rewrites the condition checks so the loop self-heals instead of bailing on a single bad read. - Use getRealSkillLevel for the smithing gate (was getBoostedSkillLevel, which drains and reads 0 transiently); early-return on a 0 read. - Replace Microbot.showMessage + shutdown in the bank checks with Microbot.log + retry per PLUGIN_DEBUGGING_NOTES.md §6. - Wait for the deposit to settle before withdrawing so Rs2Bank's full-inventory guard doesn't silently skip the cycle-2 withdraw. - Fix duplicate isWearing(ICE_GLOVES) check that masked the regular-gloves branch. - Replace slow per-object ClientThread furnace lookup with withNameContains + nearestOnClientThread. - Catch printing ex.getMessage() -> Microbot.logStackTrace. - Scheduler tick 100ms -> 600ms (game-tick floor). Bumps version 1.0.3 -> 1.0.4. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…d Ourania runner (chsami#440) Adds four new Leagues utilities under the existing toolkit: - Demonic Gorilla prayer helper: event-driven prayer switching via onAnimationChanged, hit-tracking via onHitsplatApplied, and style-switch confirmation via the "Rhaaaaaaa!" overhead text. No polling. - Hespori (Echo) boss helper: prayer-only mode (fast loop) plus optional combat with flower-phase weapon switching and projectile-driven vine dodge. - Kraken boss helper: full fight automation (disturb tentacles, kill, disturb boss, kill, loot trident/tentacle/jar/pet) with Protect from Magic. - Ourania (ZMI) runner: bank -> walk -> craft loop using Banker's briefcase teleport for return trips. Each helper is gated by its own config toggle. Plugin version 1.2.0 -> 1.3.0. Co-authored-by: dev <dev@riskless.id>
…#439) * fix(birdhouse): rewrite seed matching, fix plugin shutoff, optimize walking - Replace ID-based seed list with name-based BIRDHOUSE_SEED_NAMES (single source of truth) — fixes seeds-in-inventory not being recognized because Rs2Inventory.count() returns slot count, not stack quantity - Use Microbot.stopPlugin() instead of this.shutdown() so the plugin properly disables in the panel after a completed run - Use Rs2Walker.walkFastCanvas() for same-plane hops ≤15 tiles (H1→H2) instead of WebWalker (~3s vs ~12s) - Skip isMoving() gate in arrivedAndStill once within ARRIVAL_RADIUS so interactions fire immediately on arrival - Add comprehensive diagnostic logging throughout the state machine * perf(birdhouse): interact-first pattern, fall-through loop, 600ms tick - Try Rs2GameObject.interact before walking — if the birdhouse is loaded in the scene, the game auto-walks and interacts in one fluid motion - Fall back to Rs2Walker only when the object isn't in the scene, stopping at 25 tiles (SCENE_INTERACT_RANGE) instead of 4 so the interact can take over on the next tick - Wrap state machine in a while(advanced) loop so completed actions immediately fall through to the next state within the same tick (dismantle→build→seed in one tick instead of three) - Reduce scheduleWithFixedDelay from 1000ms to 600ms (one game tick) * fix(birdhouse): wait for actual seed quantity change before advancing sleepUntil used Rs2Inventory.count() which returns slot count (always 1 for stackable seeds), not stack quantity. Replaced with name-based findInventoryBirdhouseSeed().getQuantity() so the script waits for the real quantity drop (e.g. 40→30) before moving to the next state. * fix(birdhouse): gate varp reads on Fossil Island presence Varps read as 0 (stale/unloaded) when the player is off Fossil Island, causing the script to skip houses entirely. Added isOnFossilIsland() gate before reading varps in dismantle/build/seed — walks to the house first if not on the island. Also added region 14908 (mushtree hub) to FOSSIL_ISLAND_REGIONS which was incorrectly excluded. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…hsami#437) Roots are several tiles from the brazier, so abandoning a chop to walk over loses the repair/relight window to another player anyway. Bail out of handleBrazierMaintenance when state == CHOP_ROOTS so the chop cycle isn't interrupted for nothing. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…hsami#436) * fix(leftclickcast): sync top spell dropdown with active slot The top "Spell" dropdown was dead legacy config — editing it did nothing, and slot hotkey presses didn't update it. Wire two-way sync: dropdown edits write into the active slot's spell config, and slot hotkeys / direct slot-spell edits write back into the top dropdown. Equality guards break the ConfigChanged echo loop; ExternalPluginsChanged is posted to rebuild the panel so the change is visible immediately. * fix(leftclickcast): keep original Attack entry; add Cast as new tail Previously the plugin mutated the game's Attack menu entry in place, changing its label and action to "Cast X". That replaced Attack entirely — right-clicking the NPC no longer offered a plain Attack option. Now we leave the Attack entry untouched and append a new RUNELITE-type "Cast X" entry at the tail via createMenuEntry(-1). The tail is the left-click slot in RuneLite's menu model, so Cast becomes left-click while Attack remains in the right-click menu. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
… build (chsami#438) Client 2.6.0 dropped `Rs2UiHelper.ITEM_NAME_SUFFIX_PATTERN`. The static import failed early in `:compileJava`, which cascaded through Lombok's javac patch and silently disabled annotation processing for the rest of the source set — surfacing as 100 unrelated "cannot find symbol" errors across motherloadmine, jewelleryenchant, kittentracker, sisyphusinfernalpact, thievingstalls, driftnet, and herbiboar (missing `@Slf4j`-generated `log`, missing `@Getter` accessors, unrecognised `onConstructor_`/`onMethod_` Lombok meta-attributes). Inlining the regex locally (same pattern BankTabSorterScript already uses) removes the only failing import and restores the entire build. Bump 1.2.1 -> 1.2.2. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…hsami#435) When the bank object or shop NPC is loaded in the current scene, click it directly instead of invoking Rs2Walker — the game server handles pathing and opens the UI. The walker only fires on the return trip when the NPC isn't visible from the bank's deposit position. - tryDirectBankDeposit scans the scene for any Rs2BankID-matched object (booths, chests, deposit boxes) and clicks the closest one. Falls back to Rs2Bank.bankItemsAndWalkBackToOriginalPosition only when nothing matches. - ensureShopOpen sends exactly one Rs2Npc.interact(npc, "Trade") per scheduler tick instead of polling Rs2Shop.openShop, which re-clicked every iteration while the player was still walking to the NPC. - The async return-trip walker awaits its CompletableFuture after clearWalkingRoute, so the ShortestPath overlay clears and a late currentTarget write can't resurrect the route. - shopNpcLocation pins the walker target to the NPC's actual tile (captured on the first successful trade), not whatever tile the user toggled the plugin on. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…g fixes (chsami#442) * docs: add design spec for compost type selection in farm tree runner * docs: add implementation plan for compost type selection * feat(FarmTreeRun): add CompostType enum for compost selection * feat(FarmTreeRun): replace useCompost boolean with compostType dropdown * feat(FarmTreeRun): support all compost types with qty calc and bucket drop * fix(FarmTreeRun): fix protection dialog, skills necklace crash, and cleanup - Handle first-time protection dialog by clicking "don't ask again" - Make skills necklace optional (no shutdown if missing) - Consolidate drops into dropCrap() (pots, buckets, weeds) - Allow dropping while moving, only guard on isAnimating - Remove isInteracting checks throughout - Revert config group rename back to "example" * feat(FarmTreeRun): add tool leprechaun compost withdrawal and bank-on-finish - Non-reusable compost (regular/super/ultra) is now withdrawn from the Tool Leprechaun at each patch instead of from the bank, saving inventory slots. Bottomless bucket still comes from bank as before. - Plugin stops with an error if the leprechaun has no compost stored. - On run completion, plugin walks to the nearest bank, deposits all items, then shuts down cleanly. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
* fix(combat-hotkeys): move prayer toggles off key event thread Prayer hotkeys were calling Rs2Prayer.toggle() directly on the key listener thread, causing focus loss and input lag on every press. Replaced runOnSeperateThread (silently drops calls when the shared ClientThread future is busy) with a plugin-owned ExecutorService. Also added a debug overlay panel toggled via config. Bump to v1.1.2. * feat(butterfly-catcher): add Butterfly Catcher plugin v1.0.0 Automates butterfly and moth catching for Hunter XP. Supports Ruby Harvest through Moonlight Moth (Varlamore). Barehanded and butterfly net modes with level/equipment checks on startup. --------- Co-authored-by: chsami <aintaro@proton.me>
…#447) Prayer hotkeys were calling Rs2Prayer.toggle() directly on the key listener thread, causing focus loss and input lag on every press. Replaced runOnSeperateThread (silently drops calls when the shared ClientThread future is busy) with a plugin-owned ExecutorService. Also added a debug overlay panel toggled via config. Bump to v1.1.2. Co-authored-by: chsami <aintaro@proton.me>
…owboat, chain seaweed plugin (chsami#446) - Set Rs2Walker.disableTeleports=true once on Fossil Island so the digsite pendant is only consumed once (for the initial teleport) - Walk to southern rowboat before banking to avoid the longer northern route - Wire up "Start Giant Seaweed after run" config to launch GiantSeaweedFarmerPlugin on birdhouse run completion - Fix withdrawSeeds false warning: use real stack quantity instead of Rs2Inventory.count() slot count, and fail fast if <40 seeds - Add debug section with override start state for testing - Bump version to 1.1.2 Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
… shutdown (chsami#445) * fix(GiantSeaweedFarmer): replace broken varbit state detection with action+name approach getSeaweedPatchState() read the varbit from the impostor composition instead of the base object, returning garbage values that always mapped to "Weeds" regardless of actual patch state. This caused infinite loops after harvesting. Replace with getPatchState() that checks the impostor's actions and name: Pick→Harvestable, Rake→Weeds, Clear→Dead, Cure→Diseased, "Seaweed patch" (no Rake)→Empty, "Seaweed"→Growing. Also fixes: Harvestable case sleepUntil waited for "Empty" (varbit 3) but post-harvest patches go to Weeds first, causing 20s timeouts every cycle. Now waits for not-Harvestable which resolves immediately. * fix(GiantSeaweedFarmer): reset all state on plugin restart BankSuccess, GSF_Running, and other fields were not reset in run(), so restarting the plugin reused stale state from the previous run (e.g. BankSuccess=true skipped banking entirely). * fix(GiantSeaweedFarmer): clean shutdown via Microbot.stopPlugin shutdownSequence() now calls Microbot.stopPlugin() which toggles the plugin off in the client UI, stops both the farmer and spore scripts, and removes the overlay — instead of just cancelling the script future while leaving everything else running. Also: reset BankSuccess in shutdown(), remove dead safetyCheck() method, remove redundant GSF_Running assignment in plugin startUp(). * fix(GiantSeaweedFarmer): fix typo and wrong description in override config --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…rawal bugfix (chsami#444) * fix(FarmTreeRun): remove isAnimating checks, delete planning docs, bump version - Remove all Rs2Player.isAnimating() checks from the script — they cause stalls and are unreliable for gating plugin logic. - Replace animation waits in handleRakeAction/handleClearAction with waitForXpDrop(Skill.FARMING) which is the actual completion signal. - Replace animation wait in bank() with sleepUntil(Rs2Bank::isOpen). - Delete docs/superpowers/ planning artifacts accidentally committed. - Bump plugin version to 1.2.0. * feat(FarmTreeRun): category toggles, proper shutdown, rake fix - Add "Run trees", "Run fruit trees", "Run hardwood trees" toggles in the sapling selection section to skip entire tree categories at once. - Plugin properly disables itself via Microbot.stopPlugin() on shutdown. - Increase rake XP drop wait to 10s and drop weeds immediately after raking instead of in the general drop loop. * feat(FarmTreeRun): shared Rs2Leprechaun helper, fix duplicate-item withdrawal bug Extract leprechaun compost withdrawal into shared Rs2Leprechaun utility (included in every plugin JAR alongside PluginConstants). Merge duplicate itemId entries before bank withdrawal so overlapping protection payments (e.g. Willow + Banana both needing baskets of apples) sum correctly. --------- Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
* fix(cluesolver): client-thread safety for clue task classes Multiple clue task classes (AnagramClueTask, CrypticClueTask, EmoteClueTask, RequirementHandlerTask, CoordinateClueTask, MusicClueTask) threw IllegalStateException 'must be called on client thread' when reading player world location from the script thread. Fix: added a getPlayerLocationSafe() helper in ClueTask base class that wraps the read with Microbot.getClientThread().runOnClientThreadOptional(). All callers updated to use the safe accessor. * chore(cluesolver): address Copilot review feedback - Remove dead `hasArrived(Player)` method from AnagramClueTask (never called; state machine uses isWithinRadius instead). - Remove unused Player/NPC imports across Anagram/Coordinate/Cryptic/Music tasks. - Reword `ClueTask#getPlayerLocationSafe` JavaDoc to drop hardcoded line numbers (drift hazard). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…chsami#451) Pathfinder routes through the rubber cap mushroom shortcuts which causes the walker to stall. Add tile restrictions on all 5 origin tiles when on Fossil Island, cleared on shutdown. Bump to 1.1.3. Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
…ree transport TELEPORTING was a no-op that immediately advanced to DISMANTLE_HOUSE_1 without ever calling Rs2Walker, so the player never left the bank. Now calls Rs2Walker.walkTo(birdhouseLocation1) which routes via digsite pendant to Fossil Island. MUSHROOM_TELEPORT was also a no-op relying on Rs2Walker to route through the mushtree, but the walker kept detouring to the bank instead. Replaced with direct object interaction: Use mushtree → select Mushroom Meadow from the Mycelium Transportation System widget.
…ing on Rs2Walker Rs2Walker.walkTo() was blocking indefinitely trying to path from the mainland bank to Fossil Island. Now explicitly rubs the pendant, selects Fossil Island from the dialogue, and only uses the walker for local on-island navigation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan