GE Flipper
This page describes the committed source and automated regression tests. Live acceptance on the current RuneLite and Flipping Copilot builds remains pending.
GE Flipper is a disabled-by-default automation plugin registered as
com.n3plugins.geflipper.FlipperPlugin with config group geflipper. Install
and enable Flipping Copilot, sign in to it, and resume its suggestions before
enabling GE Flipper.
Flipping Copilot does not expose a public service for its current suggestion.
CopilotOverlayReader therefore reads the active Copilot widget and NPC overlay
payloads through a package-local reflection boundary. A Copilot update can
change those private fields and stop highlight discovery without affecting
RuneLite or the n3 interaction APIs.
Workflow
FlipperPlugin.onGameTick(...) supplies the only GE Flipper event subscription.
It checks Break Handler state and pulses one AutomationLoop on the RuneLite
client thread. The loop rejects a second pulse for the same game tick. Startup
and shutdown create and clear that loop without a background scheduler.
Each accepted tick follows this order:
- Confirm a visible GE high- or low-price warning when its text contains both
muchandprice. - Prepare the inventory when enabled. The controller deposits non-coins, withdraws all available coins, and closes the bank across separate ticks.
- Read Copilot quantity or price text from the chatbox and submit it through
Grand Exchange price and quantity widget actions (
GrandExchange.trySetItemPriceandGrandExchange.trySetItemQuantity). - Resolve each Copilot highlight to the visible widget that owns its semantic
action. Dispatch that action through
WidgetActions; dispatch clerk and banker highlights throughNPCActions. - Open or walk toward the Grand Exchange when no actionable Copilot highlight exists and the corresponding configuration permits it.
The controller performs at most one gameplay action per tick. It retries an
unchanged highlight after highlightRetryDelay. InteractionResult.accepted()
means the interaction layer accepted the request; the next overlay, widget, or
GE offer state establishes progress.
Configuration
| Setting | Default | Behavior |
|---|---|---|
| Prepare inventory | Enabled | Deposits non-coins and withdraws all coins before following suggestions |
| Walk to Grand Exchange | Enabled | Walks to the Grand Exchange when no clerk or Copilot highlight is available |
| Minimum action delay | 350 ms | Sets the lower random delay between accepted actions |
| Maximum action delay | 700 ms | Sets the upper random delay between accepted actions |
| Highlight retry delay | 2500 ms | Controls when an unchanged highlight becomes eligible for another attempt |
| Debug logging | Disabled | Logs GE Flipper decisions and actions |
The plugin registers with Break Handler at startup. While the plugin remains enabled and the client remains logged in, it marks its workflow active and skips gameplay actions during a planned or active break. Shutdown stops Break Handler tracking and clears the workflow state.
GE Flipper can place, modify, abort, and collect offers highlighted by Flipping Copilot. Start with low-value offers and verify the item, quantity, price, and offer direction in the visible Grand Exchange before enabling it.
Validation
The regression tests cover same-tick deduplication, stop/restart lifecycle, semantic widget resolution, withdraw-all inventory preparation, price-warning confirmation, and refusal to confirm unrelated destroy dialogs.
.\gradlew.bat test --tests 'com.n3plugins.geflipper.*' --console plain
.\gradlew.bat test --tests 'com.n3plugins.breakhandler.AutomationBreakHandlerRegistrationTest' --console plain
Live validation must compare accepted actions with the resulting Copilot
overlay, widget, inventory, and GE offer state. See
the live interaction catalog for the
PLUG-011 acceptance scope.