From bd21c431187984ff74e20b634bd4567e02aa67f5 Mon Sep 17 00:00:00 2001 From: Alexsuperfly Date: Wed, 1 Jan 2020 20:31:17 -0500 Subject: [PATCH 1/3] grounditems: refactor isDropped into LootType the isDropped boolean was essentially just a lootype all its own this allows the onlyShowLoot option to show your own dropped items overlay --- .../net/runelite/client/plugins/grounditems/GroundItem.java | 4 ---- .../client/plugins/grounditems/GroundItemsOverlay.java | 4 ++-- .../client/plugins/grounditems/GroundItemsPlugin.java | 3 +-- .../net/runelite/client/plugins/grounditems/LootType.java | 1 + 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java index fab3857fa6..f130a55bc8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItem.java @@ -48,10 +48,6 @@ class GroundItem private boolean tradeable; @Nonnull private LootType lootType; - /** - * Is dropped by me - */ - private boolean isDropped; @Nullable private Instant spawnTime; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 1e626e776a..0624652fb7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -364,7 +364,7 @@ public class GroundItemsOverlay extends Overlay private void drawTimerOverlay(Graphics2D graphics, int textX, int textY, GroundItem groundItem) { // We can only accurately guess despawn times for our own pvm loot and dropped items - if (groundItem.getLootType() != LootType.PVM && !groundItem.isDropped()) + if (groundItem.getLootType() != LootType.PVM && groundItem.getLootType() != LootType.DROPPED) { return; } @@ -395,7 +395,7 @@ public class GroundItemsOverlay extends Overlay } else { - if (groundItem.isDropped()) + if (groundItem.getLootType() == LootType.DROPPED) { despawnTime = spawnTime.plus(DESPAWN_TIME_DROP); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 9f12804a41..f9919508a3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -393,8 +393,7 @@ public class GroundItemsPlugin extends Plugin .haPrice(alchPrice) .height(tile.getItemLayer().getHeight()) .tradeable(itemComposition.isTradeable()) - .lootType(LootType.UNKNOWN) - .isDropped(dropped) + .lootType(dropped ? LootType.DROPPED : LootType.UNKNOWN) .spawnTime(Instant.now()) .build(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java index abd6c815e0..b434298faf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/LootType.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.grounditems; enum LootType { UNKNOWN, + DROPPED, PVP, PVM; } From 1257b327a3930591f45e0b194a2fec2925ef906b Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 14 Jan 2020 12:51:46 -0500 Subject: [PATCH 2/3] api: rename menuaction cc ops --- .../src/main/java/net/runelite/api/MenuAction.java | 9 ++++----- .../client/plugins/banktags/tabs/TabInterface.java | 2 +- .../net/runelite/client/plugins/camera/CameraPlugin.java | 6 +++--- .../runelite/client/plugins/examine/ExaminePlugin.java | 2 +- .../client/plugins/itemprices/ItemPricesOverlay.java | 2 +- .../plugins/mousehighlight/MouseHighlightOverlay.java | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/MenuAction.java b/runelite-api/src/main/java/net/runelite/api/MenuAction.java index 688b18f141..450989d9c3 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuAction.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuAction.java @@ -226,9 +226,9 @@ public enum MenuAction PLAYER_EIGTH_OPTION(51), /** - * Default menu action for a widget. + * Menu action for normal priority child component actions. */ - WIDGET_DEFAULT(57), + CC_OP(57), /** * Casting a spell / op target on a widget @@ -256,10 +256,9 @@ public enum MenuAction */ CANCEL(1006), /** - * Menu action triggered by either examining item in bank, examining - * item in inventory while having bank open, or examining equipped item. + * Menu action for low priority child component actions. */ - EXAMINE_ITEM_BANK_EQ(1007), + CC_OP_LOW_PRIORITY(1007), /** * Menu action injected by runelite for its menu items. diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 4126e3805f..2800f4657d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -608,7 +608,7 @@ public class TabInterface if ((event.getWidgetId() == WidgetInfo.BANK_ITEM_CONTAINER.getId() || event.getWidgetId() == WidgetInfo.BANK_INVENTORY_ITEMS_CONTAINER.getId()) - && event.getMenuAction() == MenuAction.EXAMINE_ITEM_BANK_EQ + && event.getMenuAction() == MenuAction.CC_OP_LOW_PRIORITY && (event.getMenuOption().equalsIgnoreCase("withdraw-x") || event.getMenuOption().equalsIgnoreCase("deposit-x"))) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java index c67157d8db..cbdba9f4b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java @@ -120,7 +120,7 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener @Subscribe public void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) { - if (menuEntryAdded.getType() == MenuAction.WIDGET_DEFAULT.getId() && menuEntryAdded.getOption().equals(LOOK_NORTH) && config.compassLook()) + if (menuEntryAdded.getType() == MenuAction.CC_OP.getId() && menuEntryAdded.getOption().equals(LOOK_NORTH) && config.compassLook()) { MenuEntry[] menuEntries = client.getMenuEntries(); int len = menuEntries.length; @@ -144,7 +144,7 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener m.setOption(option); m.setTarget(lookNorth.getTarget()); m.setIdentifier(identifier); - m.setType(MenuAction.WIDGET_DEFAULT.getId()); + m.setType(MenuAction.CC_OP.getId()); m.setParam0(lookNorth.getActionParam0()); m.setParam1(lookNorth.getActionParam1()); return m; @@ -275,7 +275,7 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener case EXAMINE_NPC: case EXAMINE_ITEM_GROUND: case EXAMINE_ITEM: - case EXAMINE_ITEM_BANK_EQ: + case CC_OP_LOW_PRIORITY: if (config.ignoreExamine()) { break; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index 081c464400..d414d6fba0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -130,7 +130,7 @@ public class ExaminePlugin extends Plugin type = ExamineType.ITEM; id = event.getId(); break; - case EXAMINE_ITEM_BANK_EQ: + case CC_OP_LOW_PRIORITY: { type = ExamineType.ITEM_BANK_EQ; int[] qi = findItemFromWidget(event.getWidgetId(), event.getActionParam()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java index d9fa163675..40a97330e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemprices/ItemPricesOverlay.java @@ -100,7 +100,7 @@ class ItemPricesOverlay extends Overlay { break; } - case WIDGET_DEFAULT: + case CC_OP: case ITEM_USE: case ITEM_FIRST_OPTION: case ITEM_SECOND_OPTION: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java index e7e12580cd..22f9691bd3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java @@ -75,7 +75,7 @@ class MouseHighlightOverlay extends Overlay String option = menuEntry.getOption(); int type = menuEntry.getType(); - if (type == MenuAction.RUNELITE_OVERLAY.getId() || type == MenuAction.EXAMINE_ITEM_BANK_EQ.getId()) + if (type == MenuAction.RUNELITE_OVERLAY.getId() || type == MenuAction.CC_OP_LOW_PRIORITY.getId()) { // These are always right click only return null; From 4845560cb8f7b735ea4fd5ca0f8a0336d9f1d3b9 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 14 Jan 2020 15:14:30 -0500 Subject: [PATCH 3/3] menu swapper: add bank extra op swap --- .../MenuEntrySwapperConfig.java | 10 +++++ .../MenuEntrySwapperPlugin.java | 36 ++++++++++++++++++ .../MenuEntrySwapperPluginTest.java | 38 +++++++++++++++++++ 3 files changed, 84 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index b340e41bca..c193caadb3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -381,4 +381,14 @@ public interface MenuEntrySwapperConfig extends Config { return false; } + + @ConfigItem( + keyName = "swapBankOp", + name = "Swap Bank Op", + description = "Swaps the extra menu option in banks (Weild, Eat, etc.) when holding shift" + ) + default boolean swapBankOp() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 0830e3697f..8465df0a19 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -42,6 +42,7 @@ import net.runelite.api.MenuEntry; import net.runelite.api.NPC; import net.runelite.api.events.ClientTick; import net.runelite.api.events.FocusChanged; +import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOpened; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.PostItemComposition; @@ -299,6 +300,41 @@ public class MenuEntrySwapperPlugin extends Plugin client.setMenuEntries(ArrayUtils.addAll(entries, resetShiftClickEntry)); } + @Subscribe + public void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) + { + // This swap needs to happen prior to drag start on click, which happens during + // widget ticking and prior to our client tick event. This is because drag start + // is what builds the context menu row which is what the eventual click will use + + // Deposit- op 2 is the current withdraw amount 1/5/10/x + if (shiftModifier && menuEntryAdded.getType() == MenuAction.CC_OP.getId() && menuEntryAdded.getIdentifier() == 2 + && config.swapBankOp() && menuEntryAdded.getOption().startsWith("Deposit-")) + { + MenuEntry[] menuEntries = client.getMenuEntries(); + + // Find the extra menu option; they don't have fixed names, so check + // based on the menu identifier + for (int i = menuEntries.length - 1; i >= 0; --i) + { + MenuEntry entry = menuEntries[i]; + + // The extra options are always option 9 + if (entry.getType() == MenuAction.CC_OP_LOW_PRIORITY.getId() && entry.getIdentifier() == 9) + { + // we must also raise the priority of the op so it doesn't get sorted later + entry.setType(MenuAction.CC_OP.getId()); + + menuEntries[i] = menuEntries[menuEntries.length - 1]; + menuEntries[menuEntries.length - 1] = entry; + + client.setMenuEntries(menuEntries); + break; + } + } + } + } + @Subscribe public void onMenuOptionClicked(MenuOptionClicked event) { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java index f6e2bbe021..8aedec91cd 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java @@ -33,6 +33,7 @@ import net.runelite.api.GameState; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; import net.runelite.api.events.ClientTick; +import net.runelite.api.events.MenuEntryAdded; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import static org.junit.Assert.assertArrayEquals; @@ -98,11 +99,17 @@ public class MenuEntrySwapperPluginTest } private static MenuEntry menu(String option, String target, MenuAction menuAction) + { + return menu(option, target, menuAction, 0); + } + + private static MenuEntry menu(String option, String target, MenuAction menuAction, int identifier) { MenuEntry menuEntry = new MenuEntry(); menuEntry.setOption(option); menuEntry.setTarget(target); menuEntry.setType(menuAction.getId()); + menuEntry.setIdentifier(identifier); return menuEntry; } @@ -294,4 +301,35 @@ public class MenuEntrySwapperPluginTest menu("Quick-Enter", "Formidable Passage", MenuAction.GAME_OBJECT_SECOND_OPTION), }, argumentCaptor.getValue()); } + + @Test + public void testBankExtraOp() + { + when(config.swapBankOp()).thenReturn(true); + menuEntrySwapperPlugin.setShiftModifier(true); + + entries = new MenuEntry[]{ + menu("Cancel", "", MenuAction.CANCEL), + menu("Weild", "Abyssal whip", MenuAction.CC_OP_LOW_PRIORITY, 9), + menu("Deposit-1", "Abyssal whip", MenuAction.CC_OP, 2), + }; + + menuEntrySwapperPlugin.onMenuEntryAdded(new MenuEntryAdded( + "Deposit-1", + "Abyssal whip", + MenuAction.CC_OP.getId(), + 2, + -1, + -1 + )); + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(MenuEntry[].class); + verify(client).setMenuEntries(argumentCaptor.capture()); + + assertArrayEquals(new MenuEntry[]{ + menu("Cancel", "", MenuAction.CANCEL), + menu("Deposit-1", "Abyssal whip", MenuAction.CC_OP, 2), + menu("Weild", "Abyssal whip", MenuAction.CC_OP, 9), + }, argumentCaptor.getValue()); + } } \ No newline at end of file