Skip to content

fix(GiantSeaweedFarmer): broken state detection, stale state, unclean shutdown#445

Merged
chsami merged 4 commits into
chsami:developmentfrom
runsonmypc:fix/seaweed
May 22, 2026
Merged

fix(GiantSeaweedFarmer): broken state detection, stale state, unclean shutdown#445
chsami merged 4 commits into
chsami:developmentfrom
runsonmypc:fix/seaweed

Conversation

@runsonmypc
Copy link
Copy Markdown
Contributor

@runsonmypc runsonmypc commented May 20, 2026

Summary

  • State detection: replaced broken varbit-from-impostor approach with action+name lookup on the resolved composition. The old code read 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).
  • Stale state on restart: BankSuccess, GSF_Running, handledPatches, and other fields were not reset in run(), so toggling the plugin off/on reused state from the previous run (e.g. skipping banking entirely).
  • Unclean shutdown: shutdownSequence() only cancelled the script future — the plugin stayed enabled in the client UI and the spore script kept running. Now calls Microbot.stopPlugin() which toggles the plugin off, stops both scripts, and removes the overlay.
image

This should be a lot less brittle than relying on varbits!

Test plan

  • Start plugin → banks, dives, detects Harvestable, picks seaweed
  • After harvest → detects Weeds, rakes, detects Empty, composts+plants
  • Already-growing patch → detected as Growing, skipped
  • All patches handled → plugin auto-disables in client UI
  • Toggle plugin off/on → fresh state, banks again from scratch

…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 chsami merged commit ecebab1 into chsami:development May 22, 2026
1 check passed
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>
@runsonmypc runsonmypc deleted the fix/seaweed branch May 23, 2026 18:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants