Conversation
…od patches from trees & make more sense, reordered the patches in the config to match the order in the tree run.
WalkthroughAdds Auburnvale, Kastori, and Avium Savannah patches and handling states; restructures FarmTreeRunConfig into Sapling/Protection/Gear/patch sections with new selection and protection options and many renamed patch toggles; updates overlay title and plugin description; changes SplashScreen asset. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant Plugin as FarmTreeRunPlugin
participant Script as FarmTreeRunScript
participant Config as FarmTreeRunConfig
participant Game as Game Client
User->>Plugin: enable/start
Plugin->>Script: init/start
Script->>Config: read sapling/protection/gear & patch toggles
Script->>Script: build route (tree -> fruit -> hardwood)
rect rgba(200,220,255,0.18)
note over Script: Patch handling loop (includes Auburnvale, Kastori, Avium Savannah)
loop per patch state
Script->>Game: walk to patch location
Script->>Config: isPatchEnabled(patch)?
alt enabled
Script->>Game: handlePatch(patch)
Game-->>Script: result
else disabled
Script-->>Script: skip to next
end
end
end
Script-->>Plugin: FINISHED
Plugin-->>User: run complete
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. ✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
...client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunScript.java (2)
946-953: Bug: Avium hardwood patch will use the wrong sapling
getSaplingToUseonly treats Fossil Island patches as hardwood. The newAVIUM_SAVANNAH_HARDWOOD_PATCHwill fall through and incorrectly select a fruit sapling. Select byTreeKindinstead.- private static int getSaplingToUse(Patch patch, FarmTreeRunConfig config) { - if (patch == Patch.FOSSIL_TREE_PATCH_A || patch == Patch.FOSSIL_TREE_PATCH_B || patch == Patch.FOSSIL_TREE_PATCH_C ) { - return config.selectedHardTree().getSaplingId(); - } else return patch.kind == TreeKind.TREE ? - config.selectedTree().getSaplingId() : - config.selectedFruitTree().getSaplingId(); - } + private static int getSaplingToUse(Patch patch, FarmTreeRunConfig config) { + if (patch.kind == TreeKind.HARD_TREE) { + return config.selectedHardTree().getSaplingId(); + } + return patch.kind == TreeKind.TREE + ? config.selectedTree().getSaplingId() + : config.selectedFruitTree().getSaplingId(); + }
696-703: Possible NPE: interacting with a null gardener
Rs2Npc.interact(treeGardener, "Pay");is called before null-checkingtreeGardener. This can NPE when the nearest “Pay” NPC isn’t found (likely at new/edge locations).- Rs2NpcModel treeGardener = null; - treeGardener = Rs2Npc.getNearestNpcWithAction("Pay"); - Rs2Npc.interact(treeGardener, "Pay"); - - if (treeGardener == null) { - handleExoticGardeners(); - } + Rs2NpcModel treeGardener = Rs2Npc.getNearestNpcWithAction("Pay"); + if (treeGardener != null) { + Rs2Npc.interact(treeGardener, "Pay"); + } else { + handleExoticGardeners(); + }
🧹 Nitpick comments (9)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/enums/FarmTreeRunState.java (1)
48-53: New states are well-placed; update the run-order comment to matchThe enum additions look correct and align with the script flow. Please also update the header comment (Lines 3–16) to include Auburnvale Tree, Kastori Fruit, and Avium Savannah Hardwood so the documented order matches actual execution.
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunOverlay.java (1)
26-26: Version bump acknowledged; avoid hardcoding version in multiple placesThe title change to v1.3.1 is fine. To prevent drift between overlay title and future descriptor changes, consider sourcing the version from a single constant (e.g., from the plugin class).
Example (outside this hunk):
- In FarmTreeRunPlugin:
public static final String VERSION = "v1.3.1";
- Here:
- .text("Acun's farm tree runner (v1.3.1)") + .text("Acun's farm tree runner (" + FarmTreeRunPlugin.VERSION + ")")runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunPlugin.java (1)
25-30: Descriptor text matches new scope; consider improving discoverability tagsGood call updating the description to include hardwood trees. Optional: add a “hardwood” tag to improve searchability in the plugins list.
@PluginDescriptor( name = PluginDescriptor.Default + "Farm tree runner", - description = "Acun's farm tree runner. Supports regular, fruit and hardwood trees", - tags = {"Farming", "Tree run"}, + description = "Acun's farm tree runner. Supports regular, fruit and hardwood trees", + tags = {"Farming", "Tree run", "Hardwood"}, enabledByDefault = false )runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunScript.java (3)
87-91: Confirm new patch IDs and coordinates; set appropriate farming levelsThe new patches are wired correctly. Please confirm object IDs/WorldPoints and set realistic farmingLevel requirements (non-1) where applicable to avoid misleading “requires level 1” messages.
304-341: States integrate cleanly; consider DRYing state boilerplateThe three new states mirror existing handling and transition correctly. The repeated pattern (walk → handlePatch → gate on handled → next state) could be extracted into a helper to reduce duplication and future maintenance.
Illustrative refactor (outside this hunk):
private void process(Patch patch, boolean enabled, FarmTreeRunState next) { if (enabled && walkToLocation(patch.getLocation())) { if (!handlePatch(config, patch)) return; } botStatus = next; }Usage:
case HANDLE_AUBURNVALE_TREE_PATCH: process(Patch.AUBURNVALE_TREE_PATCH, config.auburnTreePatch(), HANDLE_KASTORI_FRUIT_TREE_PATCH); break;
879-881: Counting logic for withdrawals looks intentional; add a clarifying commentListing
fossilTreePatchthree times to represent A/B/C drives correct sapling/payment counts. Consider adding a brief comment so future readers know the duplication is deliberate.Also applies to: 895-896, 913-914
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java (3)
36-39: Config help text mentions “banking is broken” — align defaults or remove noteIf banking is intentionally unreliable, consider defaulting
banking()to false to spare new users, or remove the warning once fixed. Right now the note and default (true) conflict.Optional diff:
- default boolean banking() { return true; } + default boolean banking() { return false; }
110-118: Avoid spaces inkeyNamefor the hard tree sapling selector
keyName = "Fossil Island Tree"contains spaces; config keys are used as persistent identifiers and typically avoid spaces. Suggest a stable, descriptive key likehardTreeSapling(UInamecan stay friendly).- @ConfigItem( - keyName = "Fossil Island Tree", - name = "Hard sapling", - description = "Select Hard tree sapling to use", - position = 2, - section = saplingSection - ) + @ConfigItem( + keyName = "hardTreeSapling", + name = "Hardwood sapling", + description = "Select hardwood sapling to use", + position = 2, + section = saplingSection + )
141-147: Tone and consistency for “Protect Hard trees”Minor: consider “Protect hardwood trees” to match section naming and keep tone professional.
- name = "Protect Hard trees", - description = "Do you want to protect your hard wood ;)?", + name = "Protect hardwood trees", + description = "Pay gardeners to protect hardwood trees",
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (5)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java(2 hunks)runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunOverlay.java(1 hunks)runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunPlugin.java(1 hunks)runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunScript.java(5 hunks)runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/enums/FarmTreeRunState.java(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Build
🔇 Additional comments (4)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java (4)
44-67: Sectioning looks good and improves clarityNice separation into Sapling, Protection, Gear, and patch sections. This will make the UI easier to navigate.
256-263: Auburnvale toggle aligns with new state — LGTMToggle naming and positioning are consistent with run order.
323-330: Kastori fruit patch toggle added — LGTMDefaults and ordering mirror the script.
334-350: Hardwood patch toggles reflect run order — LGTMFossil Island (x3) then Avium Savannah matches the new state flow and withdrawal counting logic.
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java (1)
11-11: Ensure ConfigGroup is correctly set for FarmTreeRunConfigThe placeholder
@ConfigGroup("example")on line 11 ofFarmTreeRunConfig.javashould be replaced with a plugin-specific identifier to prevent user settings from being reset:- @ConfigGroup("example") + @ConfigGroup("farmTreeRun")• Update the annotation in
src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java:11.
• Verify there are no other usages of"example"as a config group.
• If this plugin has already been released with the incorrect group, document the breaking change or provide a migration path so users don’t lose their saved configurations.
🧹 Nitpick comments (5)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java (5)
36-39: Minor copy/text polish + HTML line breaks for correct rendering“Happy botting\n” won’t render a break in HTML. Also, add punctuation and keep naming consistent with the rest of the text.
- "<br> If you want to stop the script during your farm run (maybe it gets stuck or whatever reason), make sure to disable 'Banking' and disable patches you previously ran." + - "Happy botting\n" + - "<br><br>UI and new trees added thanks to Diogenes and T\n" + + "<br> If you want to stop the script during your farm run (maybe it gets stuck or whatever reason), make sure to disable 'Banking' and disable patches you previously ran." + + "<br>Happy botting!" + + "<br><br>UI and new trees added thanks to Diogenes and T." + "<br><br> The tree order is as follows: GS Fruit → GS Tree → TGV Fruit → Farming Guild Tree → Farming Guild Fruit → Taverley → Falador → Lumbridge → Varrock → Brimhaven Fruit → Catherby Fruit → Fossil A/B/C → Lletya Fruit → Auburnvale Tree → Kastori Fruit → Avium Savannah Hardwood. <br><br>Patches are listed in the order they will be attended filtered by type\n"
42-42: AI summary mismatch: DEBUG_MODE is still presentThe AI summary notes DEBUG_MODE was removed, but it remains. If intentional, keep it; otherwise, remove to avoid dead code.
- public static final boolean DEBUG_MODE = System.getProperty("java.vm.info", "").contains("sharing"); + // DEBUG_MODE removed; enable locally when needed.
123-147: Tone and terminology for hardwood protectionUse consistent terminology (“hardwood”) and a neutral description.
- @ConfigItem( - keyName = "protectHardTree", - name = "Protect Hard trees", - description = "Do you want to protect your hard wood ;)?", + @ConfigItem( + keyName = "protectHardTree", + name = "Protect hardwood trees", + description = "Enable payment protection for hardwood trees.", position = 2, section = protectionSection )
331-350: Hardwood keyNames: be explicit and consistent; clarify description“fossil” is vague. Recommend “fossilIslandHardwood” as the key and reflecting “hardwood patches (x3)” in the description for clarity.
@ConfigItem( - keyName = "fossil", + keyName = "fossilIslandHardwood", name = "Fossil Island", - description = "Fossil Island tree patch x3", + description = "Fossil Island hardwood patches (x3)", position = 0, section = hardTreePatchesSection )
268-329: Fruit patch polish: capitalization, description clarity, and keyName consistency
- Capitalize the “Tree Gnome Village” name
- Make the Lletya description explicitly “fruit tree”
- Drop the trailing “Patch” from Kastori’s keyName to match the others
- Note: changing only the annotation’s
keyName(“kastoriFruitTreePatch” → “kastoriFruitTree”) has no downstream impact.- If you also rename the method signature (
kastoriFruitTreePatch()→kastoriFruitTree()), update its two call sites in FarmTreeRunScript.java (lines ~320–321) as discovered by yourrgsearch.Suggested diff:
@@ FarmTreeRunConfig.java @ConfigItem( - keyName = "treeGnomeVillage", + keyName = "treeGnomeVillage", name = "Tree Gnome Village", description = "Tree gnome village fruit tree patch", @@ FarmTreeRunConfig.java @ConfigItem( keyName = "lletya", name = "Lletya", - description = "Lletya tree patch", + description = "Lletya fruit tree patch", @@ FarmTreeRunConfig.java @ConfigItem( - keyName = "kastoriFruitTreePatch", + keyName = "kastoriFruitTree", name = "Kastori", description = "Enable Kastori fruit tree patch",If you opt to rename the method, run:
rg -nP '\bkastoriFruitTreePatch\s*\(' -C2and update those two occurrences to
config.kastoriFruitTree().
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java(2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Build
🔇 Additional comments (3)
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java (3)
44-88: Nice sectional refactor; config is much clearer nowBreaking the UI into Sapling, Protection, Gear, and Patch sections improves discoverability and aligns with the described run order. Good defaults, too.
93-109: Sapling defaults LGTMSensible defaults for tree and fruit tree saplings. Enum usage is appropriate.
153-195: Gear settings look goodGood set of toggles and sensible defaults; descriptions are clear. No issues spotted.
| @ConfigItem( | ||
| keyName = "Fossil Island Tree", | ||
| name = "Hard sapling", | ||
| description = "Select Hard tree sapling to use", | ||
| position = 2, | ||
| section = generalSection | ||
| section = saplingSection | ||
| ) | ||
| default TreeEnums selectedTree() { | ||
| return TreeEnums.MAPLE; | ||
| } | ||
| default HardTreeEnums selectedHardTree() { return HardTreeEnums.MAHOGANY; } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Avoid spaces in keyName and use “hardwood” consistently
keyName values become persisted keys; spaces are brittle and inconsistent with the rest. Also prefer “Hardwood” over “Hard”.
- @ConfigItem(
- keyName = "Fossil Island Tree",
- name = "Hard sapling",
- description = "Select Hard tree sapling to use",
+ @ConfigItem(
+ keyName = "hardwoodSapling",
+ name = "Hardwood sapling",
+ description = "Select hardwood tree sapling to use",
position = 2,
section = saplingSection
)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| @ConfigItem( | |
| keyName = "Fossil Island Tree", | |
| name = "Hard sapling", | |
| description = "Select Hard tree sapling to use", | |
| position = 2, | |
| section = generalSection | |
| section = saplingSection | |
| ) | |
| default TreeEnums selectedTree() { | |
| return TreeEnums.MAPLE; | |
| } | |
| default HardTreeEnums selectedHardTree() { return HardTreeEnums.MAHOGANY; } | |
| @ConfigItem( | |
| keyName = "hardwoodSapling", | |
| name = "Hardwood sapling", | |
| description = "Select hardwood tree sapling to use", | |
| position = 2, | |
| section = saplingSection | |
| ) | |
| default HardTreeEnums selectedHardTree() { return HardTreeEnums.MAHOGANY; } |
🤖 Prompt for AI Agents
In
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java
around lines 110-117, the config item's keyName uses spaces and the label uses
"Hard" inconsistently; update keyName to a space-free identifier (e.g.,
"hardwoodTree" or "hardwoodSapling"), change the displayed name and description
to use "Hardwood" instead of "Hard" (e.g., "Hardwood sapling" and "Select
Hardwood tree sapling to use"), and ensure any references to the old key are
updated accordingly so persisted settings remain consistent.
| /* ========================= | ||
| * Tree patches (regular) — ordered to match run: | ||
| * GS Tree → Farming Guild Tree → Taverley → Falador → Lumbridge → Varrock → Auburnvale | ||
| * ========================= */ | ||
| @ConfigItem( | ||
| keyName = "falador", | ||
| name = "Falador", | ||
| description = "Falador tree patch", | ||
| keyName = "gnomeStrongholdTree", | ||
| name = "Gnome Stronghold", | ||
| description = "Gnome Stronghold tree patch", | ||
| position = 0, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean faladorTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean gnomeStrongholdTreePatch() { return true; } | ||
|
|
||
| @ConfigItem( | ||
| keyName = "gnomeStrongholdTree", | ||
| name = "Gnome Stronghold", | ||
| description = "Gnome Stronghold tree patch", | ||
| keyName = "farmingGuildTree", | ||
| name = "Farming Guild", | ||
| description = "FarmingGuild tree patch", | ||
| position = 1, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean gnomeStrongholdTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean farmingGuildTreePatch() { return true; } | ||
|
|
||
| @ConfigItem( | ||
| keyName = "lumbridge", | ||
| name = "Lumbridge", | ||
| description = "Lumbridge tree patch", | ||
| keyName = "taverley", | ||
| name = "Taverley", | ||
| description = "Taverley tree patch", | ||
| position = 2, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean lumbridgeTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean taverleyTreePatch() { return true; } | ||
|
|
||
| @ConfigItem( | ||
| keyName = "taverley", | ||
| name = "Taverley", | ||
| description = "Taverley tree patch", | ||
| keyName = "falador", | ||
| name = "Falador", | ||
| description = "Falador tree patch", | ||
| position = 3, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean taverleyTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean faladorTreePatch() { return true; } | ||
|
|
||
| @ConfigItem( | ||
| keyName = "varrock", | ||
| name = "Varrock", | ||
| description = "Varrock tree patch", | ||
| keyName = "lumbridge", | ||
| name = "Lumbridge", | ||
| description = "Lumbridge tree patch", | ||
| position = 4, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean varrockTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean lumbridgeTreePatch() { return true; } | ||
|
|
||
| @ConfigItem( | ||
| keyName = "fossil", | ||
| name = "Fossil Island", | ||
| description = "Fossil Island tree patch x3", | ||
| position = 4, | ||
| keyName = "varrock", | ||
| name = "Varrock", | ||
| description = "Varrock tree patch", | ||
| position = 5, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean fossilTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean varrockTreePatch() { return true; } | ||
|
|
||
| @ConfigItem( | ||
| keyName = "farmingGuildTree", | ||
| name = "Farming Guild", | ||
| description = "FarmingGuild tree patch", | ||
| position = 5, | ||
| keyName = "AuburnvaleTree", | ||
| name = "Auburnvale", | ||
| description = "Auburnvale tree patch", | ||
| position = 6, | ||
| section = treePatchesSection | ||
| ) | ||
| default boolean farmingGuildTreePatch() { | ||
| return true; | ||
| } | ||
| default boolean auburnTreePatch() { return true; } | ||
|
|
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Patch naming consistency and minor description fix (“Farming Guild”)
- Keep keyName in lowerCamelCase without spaces and with consistent suffixes.
- Fix “FarmingGuild” spacing in description.
- Consider renaming Auburnvale items for consistency.
@ConfigItem(
- keyName = "farmingGuildTree",
+ keyName = "farmingGuildTree",
name = "Farming Guild",
- description = "FarmingGuild tree patch",
+ description = "Farming Guild tree patch",
position = 1,
section = treePatchesSection
)
@@
@ConfigItem(
- keyName = "AuburnvaleTree",
+ keyName = "auburnvaleTree",
name = "Auburnvale",
description = "Auburnvale tree patch",
position = 6,
section = treePatchesSection
)
- default boolean auburnTreePatch() { return true; }
+ default boolean auburnvaleTreePatch() { return true; }Verification script to find call sites needing updates if you rename the method:
🏁 Script executed:
#!/bin/bash
# Find usages of the old method name, if any
rg -nP '\bauburnTreePatch\s*\(' -C2Length of output: 1556
Consistent Auburnvale naming and Farming Guild description
Please apply the following refactors to keep naming consistent and avoid compile breaks:
• In FarmTreeRunConfig.java
- Rename the Auburnvale config key and method:
@ConfigItem(
-
keyName = "AuburnvaleTree",
-
)
keyName = "auburnvaleTree", name = "Auburnvale", description = "Auburnvale tree patch", position = 6, section = treePatchesSection
- default boolean auburnTreePatch() { return true; }
- default boolean auburnvaleTreePatch() { return true; }
```
- Fix the Farming Guild description spacing:
@ConfigItem( keyName = "farmingGuildTree", name = "Farming Guild", -
description = "FarmingGuild tree patch",
-
)
description = "Farming Guild tree patch", position = 1, section = treePatchesSection
• In FarmTreeRunScript.java
- Update method calls to the renamed Auburnvale config method:
case HANDLE_AUBURNVALE_TREE_PATCH: { -
if (config.auburnTreePatch()) {
-
}
if (config.auburnvaleTreePatch()) { if (walkToLocation(patch.getLocation())) { handledPatch = handlePatch(config, patch); }
These changes are required to prevent compilation errors and maintain consistent lower-camel-case naming.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| /* ========================= | |
| * Tree patches (regular) — ordered to match run: | |
| * GS Tree → Farming Guild Tree → Taverley → Falador → Lumbridge → Varrock → Auburnvale | |
| * ========================= */ | |
| @ConfigItem( | |
| keyName = "falador", | |
| name = "Falador", | |
| description = "Falador tree patch", | |
| keyName = "gnomeStrongholdTree", | |
| name = "Gnome Stronghold", | |
| description = "Gnome Stronghold tree patch", | |
| position = 0, | |
| section = treePatchesSection | |
| ) | |
| default boolean faladorTreePatch() { | |
| return true; | |
| } | |
| default boolean gnomeStrongholdTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "gnomeStrongholdTree", | |
| name = "Gnome Stronghold", | |
| description = "Gnome Stronghold tree patch", | |
| keyName = "farmingGuildTree", | |
| name = "Farming Guild", | |
| description = "FarmingGuild tree patch", | |
| position = 1, | |
| section = treePatchesSection | |
| ) | |
| default boolean gnomeStrongholdTreePatch() { | |
| return true; | |
| } | |
| default boolean farmingGuildTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "lumbridge", | |
| name = "Lumbridge", | |
| description = "Lumbridge tree patch", | |
| keyName = "taverley", | |
| name = "Taverley", | |
| description = "Taverley tree patch", | |
| position = 2, | |
| section = treePatchesSection | |
| ) | |
| default boolean lumbridgeTreePatch() { | |
| return true; | |
| } | |
| default boolean taverleyTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "taverley", | |
| name = "Taverley", | |
| description = "Taverley tree patch", | |
| keyName = "falador", | |
| name = "Falador", | |
| description = "Falador tree patch", | |
| position = 3, | |
| section = treePatchesSection | |
| ) | |
| default boolean taverleyTreePatch() { | |
| return true; | |
| } | |
| default boolean faladorTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "varrock", | |
| name = "Varrock", | |
| description = "Varrock tree patch", | |
| keyName = "lumbridge", | |
| name = "Lumbridge", | |
| description = "Lumbridge tree patch", | |
| position = 4, | |
| section = treePatchesSection | |
| ) | |
| default boolean varrockTreePatch() { | |
| return true; | |
| } | |
| default boolean lumbridgeTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "fossil", | |
| name = "Fossil Island", | |
| description = "Fossil Island tree patch x3", | |
| position = 4, | |
| keyName = "varrock", | |
| name = "Varrock", | |
| description = "Varrock tree patch", | |
| position = 5, | |
| section = treePatchesSection | |
| ) | |
| default boolean fossilTreePatch() { | |
| return true; | |
| } | |
| default boolean varrockTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "farmingGuildTree", | |
| name = "Farming Guild", | |
| description = "FarmingGuild tree patch", | |
| position = 5, | |
| keyName = "AuburnvaleTree", | |
| name = "Auburnvale", | |
| description = "Auburnvale tree patch", | |
| position = 6, | |
| section = treePatchesSection | |
| ) | |
| default boolean farmingGuildTreePatch() { | |
| return true; | |
| } | |
| default boolean auburnTreePatch() { return true; } | |
| /* ========================= | |
| * Tree patches (regular) — ordered to match run: | |
| * GS Tree → Farming Guild Tree → Taverley → Falador → Lumbridge → Varrock → Auburnvale | |
| * ========================= */ | |
| @ConfigItem( | |
| keyName = "gnomeStrongholdTree", | |
| name = "Gnome Stronghold", | |
| description = "Gnome Stronghold tree patch", | |
| position = 0, | |
| section = treePatchesSection | |
| ) | |
| default boolean gnomeStrongholdTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "farmingGuildTree", | |
| name = "Farming Guild", | |
| description = "Farming Guild tree patch", | |
| position = 1, | |
| section = treePatchesSection | |
| ) | |
| default boolean farmingGuildTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "taverley", | |
| name = "Taverley", | |
| description = "Taverley tree patch", | |
| position = 2, | |
| section = treePatchesSection | |
| ) | |
| default boolean taverleyTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "falador", | |
| name = "Falador", | |
| description = "Falador tree patch", | |
| position = 3, | |
| section = treePatchesSection | |
| ) | |
| default boolean faladorTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "lumbridge", | |
| name = "Lumbridge", | |
| description = "Lumbridge tree patch", | |
| position = 4, | |
| section = treePatchesSection | |
| ) | |
| default boolean lumbridgeTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "varrock", | |
| name = "Varrock", | |
| description = "Varrock tree patch", | |
| position = 5, | |
| section = treePatchesSection | |
| ) | |
| default boolean varrockTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "auburnvaleTree", | |
| name = "Auburnvale", | |
| description = "Auburnvale tree patch", | |
| position = 6, | |
| section = treePatchesSection | |
| ) | |
| default boolean auburnvaleTreePatch() { return true; } |
| /* ========================= | |
| * Tree patches (regular) — ordered to match run: | |
| * GS Tree → Farming Guild Tree → Taverley → Falador → Lumbridge → Varrock → Auburnvale | |
| * ========================= */ | |
| @ConfigItem( | |
| keyName = "falador", | |
| name = "Falador", | |
| description = "Falador tree patch", | |
| keyName = "gnomeStrongholdTree", | |
| name = "Gnome Stronghold", | |
| description = "Gnome Stronghold tree patch", | |
| position = 0, | |
| section = treePatchesSection | |
| ) | |
| default boolean faladorTreePatch() { | |
| return true; | |
| } | |
| default boolean gnomeStrongholdTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "gnomeStrongholdTree", | |
| name = "Gnome Stronghold", | |
| description = "Gnome Stronghold tree patch", | |
| keyName = "farmingGuildTree", | |
| name = "Farming Guild", | |
| description = "FarmingGuild tree patch", | |
| position = 1, | |
| section = treePatchesSection | |
| ) | |
| default boolean gnomeStrongholdTreePatch() { | |
| return true; | |
| } | |
| default boolean farmingGuildTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "lumbridge", | |
| name = "Lumbridge", | |
| description = "Lumbridge tree patch", | |
| keyName = "taverley", | |
| name = "Taverley", | |
| description = "Taverley tree patch", | |
| position = 2, | |
| section = treePatchesSection | |
| ) | |
| default boolean lumbridgeTreePatch() { | |
| return true; | |
| } | |
| default boolean taverleyTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "taverley", | |
| name = "Taverley", | |
| description = "Taverley tree patch", | |
| keyName = "falador", | |
| name = "Falador", | |
| description = "Falador tree patch", | |
| position = 3, | |
| section = treePatchesSection | |
| ) | |
| default boolean taverleyTreePatch() { | |
| return true; | |
| } | |
| default boolean faladorTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "varrock", | |
| name = "Varrock", | |
| description = "Varrock tree patch", | |
| keyName = "lumbridge", | |
| name = "Lumbridge", | |
| description = "Lumbridge tree patch", | |
| position = 4, | |
| section = treePatchesSection | |
| ) | |
| default boolean varrockTreePatch() { | |
| return true; | |
| } | |
| default boolean lumbridgeTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "fossil", | |
| name = "Fossil Island", | |
| description = "Fossil Island tree patch x3", | |
| position = 4, | |
| keyName = "varrock", | |
| name = "Varrock", | |
| description = "Varrock tree patch", | |
| position = 5, | |
| section = treePatchesSection | |
| ) | |
| default boolean fossilTreePatch() { | |
| return true; | |
| } | |
| default boolean varrockTreePatch() { return true; } | |
| @ConfigItem( | |
| keyName = "farmingGuildTree", | |
| name = "Farming Guild", | |
| description = "FarmingGuild tree patch", | |
| position = 5, | |
| keyName = "AuburnvaleTree", | |
| name = "Auburnvale", | |
| description = "Auburnvale tree patch", | |
| position = 6, | |
| section = treePatchesSection | |
| ) | |
| default boolean farmingGuildTreePatch() { | |
| return true; | |
| } | |
| default boolean auburnTreePatch() { return true; } | |
| case HANDLE_AUBURNVALE_TREE_PATCH: { | |
| if (config.auburnvaleTreePatch()) { | |
| if (walkToLocation(patch.getLocation())) { | |
| handledPatch = handlePatch(config, patch); | |
| } | |
| } | |
| break; | |
| } |
🤖 Prompt for AI Agents
In
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunConfig.java
around lines 197-263, the Auburnvale config key and method name are inconsistent
and the Farming Guild description lacks a space; rename the Auburnvale config
key from "AuburnvaleTree" to "auburnvaleTree" and the default method
auburnTreePatch() to auburnvaleTreePatch() (keeping the same return value and
annotation attributes), change the Farming Guild description string from
"FarmingGuild tree patch" to "Farming Guild tree patch", and then update all
references in
runelite-client/src/main/java/net/runelite/client/plugins/microbot/farmTreeRun/FarmTreeRunScript.java
to call the new auburnvaleTreePatch() method so compilation succeeds.
Lobotobag
left a comment
There was a problem hiding this comment.
updated farm tree runner; added microbot splash screen for brand awareness.
gmason0
left a comment
There was a problem hiding this comment.
In the future, please keep client related changes & plugin related changes in different pull requests. I would merged this simple UI change way earlier than this large plugin change.
Farm tree runner: added missing trees, reworked UI to separate hardwood patches from trees & make more sense, reordered the patches in the config to match the order in the tree run.
Summary by CodeRabbit
New Features
Improvements
UI