fix(GiantSeaweedFarmer): broken state detection, stale state, unclean shutdown#445
Merged
Conversation
…ction+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.
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).
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().
chsami
added a commit
that referenced
this pull request
May 22, 2026
* Feat/butterfly catcher plugin (#448) * 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> * fix(combat-hotkeys): move prayer toggles off key event thread (#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> * feat(birdhouse): disable teleports on Fossil Island, force southern rowboat, chain seaweed plugin (#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> * fix(GiantSeaweedFarmer): broken state detection, stale state, unclean shutdown (#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> * fix(FarmTreeRun): remove isAnimating, shared leprechaun helper, withdrawal bugfix (#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> --------- Co-authored-by: stonksCode <99895926+stonksCode@users.noreply.github.com> Co-authored-by: runsonmypc <45095641+runsonmypc@users.noreply.github.com> Co-authored-by: runsonmypc <runsonmypc@users.noreply.github.com>
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
getVarbitId()from the impostor object (which returns 0/garbage), causing every patch to be classified as "Weeds" regardless of actual state. New approach checks actions (Pick→Harvestable, Rake→Weeds, Clear→Dead, Cure→Diseased) and composition name ("Seaweed patch"→Empty, "Seaweed"→Growing).BankSuccess,GSF_Running,handledPatches, and other fields were not reset inrun(), so toggling the plugin off/on reused state from the previous run (e.g. skipping banking entirely).shutdownSequence()only cancelled the script future — the plugin stayed enabled in the client UI and the spore script kept running. Now callsMicrobot.stopPlugin()which toggles the plugin off, stops both scripts, and removes the overlay.This should be a lot less brittle than relying on varbits!
Test plan