From 99bb57923f77dadb4f1af854d95771f7577d41f2 Mon Sep 17 00:00:00 2001 From: runsonmypc Date: Tue, 14 Apr 2026 16:38:05 -0400 Subject: [PATCH 1/4] chore: ignore .worktrees directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8a3ced8fbb..fe0cb7232a 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ nb-configuration.xml nbproject/ public/** /CreatePluginDocs.ps1 +.worktrees/ From b8b8180f33e11393aaf3da2757b41324e08d2862 Mon Sep 17 00:00:00 2001 From: runsonmypc Date: Sat, 18 Apr 2026 20:43:55 -0400 Subject: [PATCH 2/4] feat(fletching): add fletching knife support Prefer fletching knife over regular knife when available in inventory or bank. Falls back to regular knife if fletching knife is not present. - Add helper methods to check for either knife type - Update banking logic to handle both knife types - Update fletch() to use whichever knife is in inventory - Bump version to 1.7.0 --- .../microbot/fletching/FletchingPlugin.java | 2 +- .../microbot/fletching/FletchingScript.java | 47 ++++++++++++++++--- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingPlugin.java b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingPlugin.java index 50e1ad279b..1cc0762474 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingPlugin.java +++ b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingPlugin.java @@ -27,7 +27,7 @@ @Slf4j public class FletchingPlugin extends Plugin { - public static final String version = "1.6.4"; + public static final String version = "1.7.0"; @Inject private FletchingConfig config; diff --git a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java index 2c72f70cb0..b840445e2e 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java @@ -35,6 +35,9 @@ public class FletchingScript extends Script { // The fletching interface widget group ID private static final int FLETCHING_WIDGET_GROUP_ID = 17694736; + private static final String FLETCHING_KNIFE = "fletching knife"; + private static final String KNIFE = "knife"; + ProgressiveFletchingModel model = new ProgressiveFletchingModel(); String primaryItemToFletch = ""; @@ -68,7 +71,7 @@ public void run(FletchingConfig config) { boolean hasRequirementsToFletch; boolean hasRequirementsToBank; - primaryItemToFletch = fletchingMode.getItemName(); + primaryItemToFletch = usesKnife() ? getPreferredKnife() : fletchingMode.getItemName(); if (fletchingMode == FletchingMode.PROGRESSIVE) { secondaryItemToFletch = model.getFletchingMaterial().getLogItemName(); @@ -130,7 +133,9 @@ private void bankItems(FletchingConfig config) { } // Check if the primary item is available - if (!Rs2Bank.hasItem(primaryItemToFletch) && !Rs2Inventory.hasItem(primaryItemToFletch)) { + boolean hasPrimaryInBank = usesKnife() ? bankHasAnyKnife() : Rs2Bank.hasItem(primaryItemToFletch); + boolean hasPrimaryInInventory = usesKnife() ? hasAnyKnife() : Rs2Inventory.hasItem(primaryItemToFletch); + if (!hasPrimaryInBank && !hasPrimaryInInventory) { Rs2Bank.closeBank(); Microbot.status = "[Shutting down] - Reason: " + primaryItemToFletch + " not found in the bank."; Microbot.showMessage(Microbot.status); @@ -139,12 +144,12 @@ private void bankItems(FletchingConfig config) { } // Ensure the inventory isn't full without the primary item - if (!Rs2Inventory.hasItem(primaryItemToFletch)) { + if (!hasPrimaryInInventory) { Rs2Bank.depositAll(); } // Withdraw the primary item if not already in the inventory - if (!Rs2Inventory.hasItem(primaryItemToFletch)) { + if (!hasPrimaryInInventory) { Rs2Bank.withdrawX(primaryItemToFletch, fletchingMode.getAmount(), true); } @@ -181,7 +186,8 @@ private void bankItems(FletchingConfig config) { } // Final check to ensure both items are in the inventory - if (!Rs2Inventory.hasItem(primaryItemToFletch) || !Rs2Inventory.hasItem(secondaryItemToFletch)) { + boolean hasPrimaryFinal = usesKnife() ? hasAnyKnife() : Rs2Inventory.hasItem(primaryItemToFletch); + if (!hasPrimaryFinal || !Rs2Inventory.hasItem(secondaryItemToFletch)) { Microbot.log("waiting for inventory changes."); Rs2Inventory.waitForInventoryChanges(5000); } @@ -192,7 +198,8 @@ private void bankItems(FletchingConfig config) { private void fletch(FletchingConfig config) { - Rs2Inventory.combineClosest(primaryItemToFletch, secondaryItemToFletch); + String itemToUse = usesKnife() ? getKnifeInInventory() : primaryItemToFletch; + Rs2Inventory.combineClosest(itemToUse, secondaryItemToFletch); sleepUntil(() -> Rs2Widget.getWidget(FLETCHING_WIDGET_GROUP_ID) != null, 5000); char option; if (fletchingMode == FletchingMode.PROGRESSIVE || fletchingMode == FletchingMode.PROGRESSIVE_STRUNG) { @@ -219,6 +226,34 @@ private boolean configChecks(FletchingConfig config) { return true; } + private String getPreferredKnife() { + if (Rs2Inventory.hasItem(FLETCHING_KNIFE) || Rs2Bank.hasItem(FLETCHING_KNIFE)) { + return FLETCHING_KNIFE; + } + return KNIFE; + } + + private boolean hasAnyKnife() { + return Rs2Inventory.hasItem(FLETCHING_KNIFE) || Rs2Inventory.hasItem(KNIFE); + } + + private String getKnifeInInventory() { + if (Rs2Inventory.hasItem(FLETCHING_KNIFE)) { + return FLETCHING_KNIFE; + } + return KNIFE; + } + + private boolean bankHasAnyKnife() { + return Rs2Bank.hasItem(FLETCHING_KNIFE) || Rs2Bank.hasItem(KNIFE); + } + + private boolean usesKnife() { + return fletchingMode == FletchingMode.UNSTRUNG + || fletchingMode == FletchingMode.UNSTRUNG_STRUNG + || fletchingMode == FletchingMode.PROGRESSIVE; + } + public void calculateItemToFletch() { int level = Microbot.getClient().getRealSkillLevel(Skill.FLETCHING); FletchingItem item = null; From 18fac30e8b773ee6586e47155f130a89ea9c2af6 Mon Sep 17 00:00:00 2001 From: runsonmypc Date: Sat, 18 Apr 2026 21:06:42 -0400 Subject: [PATCH 3/4] fix(fletching): check bank open result before proceeding Bank operations were failing on first attempt because openBank() return value was ignored. Now checks if bank is already open and verifies openBank() succeeded before continuing with deposit/withdraw operations. --- .../client/plugins/microbot/fletching/FletchingScript.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java index b840445e2e..6ab14a066e 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java @@ -108,7 +108,11 @@ public void run(FletchingConfig config) { } private void bankItems(FletchingConfig config) { - Rs2Bank.openBank(); + if (!Rs2Bank.isOpen()) { + if (!Rs2Bank.openBank()) { + return; // Bank didn't open, retry next iteration + } + } // Deposit items based on the fletching mode switch (fletchingMode) { From 53c61366c30678caca5b88a0e37b2388e0dbb7b5 Mon Sep 17 00:00:00 2001 From: runsonmypc Date: Sat, 18 Apr 2026 21:42:42 -0400 Subject: [PATCH 4/4] fix(fletching): preHover bank when fletching starts, not after Move preHover() to execute right after initiating the fletching action so the mouse moves to the bank while fletching is in progress. This is more natural than hovering after fletching completes. --- .../client/plugins/microbot/fletching/FletchingScript.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java index 6ab14a066e..e5233eb7e7 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/fletching/FletchingScript.java @@ -215,10 +215,11 @@ private void fletch(FletchingConfig config) { Rs2Keyboard.keyPress(option); } + Rs2Bank.preHover(); + sleepUntil(() -> !Rs2Inventory.hasItem(secondaryItemToFletch), 60000); Rs2Antiban.actionCooldown(); Rs2Antiban.takeMicroBreakByChance(); - Rs2Bank.preHover(); } private boolean configChecks(FletchingConfig config) {