diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index bab04ecb05..2e3a31ebe7 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -446,4 +446,7 @@ public final class ScriptID */ @ScriptArguments(integer = 4) public static final int QUEST_FILTER = 3238; + + @ScriptArguments(integer = 18, string = 1) + public static final int GROUP_IRONMAN_STORAGE_BUILD = 5269; } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 153d800e01..46241c342c 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -311,6 +311,7 @@ public final class WidgetID static class GroupStorage { + static final int UI = 2; static final int ITEM_CONTAINER = 10; } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index b159733af6..8c239ba65a 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -153,6 +153,7 @@ public enum WidgetInfo BANK_SETTINGS_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.SETTINGS_BUTTON), BANK_TUTORIAL_BUTTON(WidgetID.BANK_GROUP_ID, WidgetID.Bank.TUTORIAL_BUTTON), + GROUP_STORAGE_UI(WidgetID.GROUP_STORAGE_GROUP_ID, WidgetID.GroupStorage.UI), GROUP_STORAGE_ITEM_CONTAINER(WidgetID.GROUP_STORAGE_GROUP_ID, WidgetID.GroupStorage.ITEM_CONTAINER), GRAND_EXCHANGE_WINDOW_CONTAINER(WidgetID.GRAND_EXCHANGE_GROUP_ID, WidgetID.GrandExchange.WINDOW_CONTAINER), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java index 71c2726f3a..de4bb16b82 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/bank/BankPlugin.java @@ -264,32 +264,14 @@ public class BankPlugin extends Plugin { if (event.getScriptId() == ScriptID.BANKMAIN_BUILD) { - // Compute bank prices using only the shown items so that we can show bank value during searches - final Widget bankItemContainer = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER); - final ItemContainer bankContainer = client.getItemContainer(InventoryID.BANK); - final Widget[] children = bankItemContainer.getChildren(); - long geTotal = 0, haTotal = 0; - - if (bankContainer != null && children != null) + ContainerPrices price = getWidgetContainerPrices(WidgetInfo.BANK_ITEM_CONTAINER, InventoryID.BANK); + if (price == null) { - log.debug("Computing bank price of {} items", bankContainer.size()); - - // The first components are the bank items, followed by tabs etc. There are always 816 components regardless - // of bank size, but we only need to check up to the bank size. - for (int i = 0; i < bankContainer.size(); ++i) - { - Widget child = children[i]; - if (child != null && !child.isSelfHidden() && child.getItemId() > -1) - { - final int alchPrice = getHaPrice(child.getItemId()); - geTotal += (long) itemManager.getItemPrice(child.getItemId()) * child.getItemQuantity(); - haTotal += (long) alchPrice * child.getItemQuantity(); - } - } - - Widget bankTitle = client.getWidget(WidgetInfo.BANK_TITLE_BAR); - bankTitle.setText(bankTitle.getText() + createValueText(geTotal, haTotal)); + return; } + + Widget bankTitle = client.getWidget(WidgetInfo.BANK_TITLE_BAR); + bankTitle.setText(bankTitle.getText() + createValueText(price.getGePrice(), price.getHighAlchPrice())); } else if (event.getScriptId() == ScriptID.BANKMAIN_SEARCH_REFRESH) { @@ -302,6 +284,17 @@ public class BankPlugin extends Plugin searchString = inputText; } } + else if (event.getScriptId() == ScriptID.GROUP_IRONMAN_STORAGE_BUILD) + { + ContainerPrices price = getWidgetContainerPrices(WidgetInfo.GROUP_STORAGE_ITEM_CONTAINER, InventoryID.GROUP_STORAGE); + if (price == null) + { + return; + } + + Widget bankTitle = client.getWidget(WidgetInfo.GROUP_STORAGE_UI).getChild(1); + bankTitle.setText(bankTitle.getText() + createValueText(price.getGePrice(), price.getHighAlchPrice())); + } } @Subscribe @@ -537,4 +530,35 @@ public class BankPlugin extends Plugin return itemManager.getItemComposition(itemId).getHaPrice(); } } + + private ContainerPrices getWidgetContainerPrices(WidgetInfo widgetInfo, InventoryID inventoryID) + { + final Widget widget = client.getWidget(widgetInfo); + final ItemContainer itemContainer = client.getItemContainer(inventoryID); + final Widget[] children = widget.getChildren(); + ContainerPrices prices = null; + + if (itemContainer != null && children != null) + { + long geTotal = 0, haTotal = 0; + log.debug("Computing bank price of {} items", itemContainer.size()); + + // In the bank, the first components are the bank items, followed by tabs etc. There are always 816 components regardless + // of bank size, but we only need to check up to the bank size. + for (int i = 0; i < itemContainer.size(); ++i) + { + Widget child = children[i]; + if (child != null && !child.isSelfHidden() && child.getItemId() > -1) + { + final int alchPrice = getHaPrice(child.getItemId()); + geTotal += (long) itemManager.getItemPrice(child.getItemId()) * child.getItemQuantity(); + haTotal += (long) alchPrice * child.getItemQuantity(); + } + } + + prices = new ContainerPrices(geTotal, haTotal); + } + + return prices; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index 8f6f9d6dbc..97d70676fa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -155,6 +155,7 @@ class XpInfoBox extends JPanel @Override public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) { + openXpTracker.setVisible(xpTrackerConfig.wiseOldManOpenOption()); canvasItem.setText(xpTrackerPlugin.hasOverlay(skill) ? REMOVE_STATE : ADD_STATE); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java index 0ecce8290d..bf34ad75e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java @@ -39,6 +39,8 @@ import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.Skill; @@ -112,6 +114,24 @@ class XpPanel extends PluginPanel popupMenu.add(resetPerHour); popupMenu.add(pauseAll); popupMenu.add(unpauseAll); + popupMenu.addPopupMenuListener(new PopupMenuListener() + { + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) + { + openXpTracker.setVisible(xpTrackerConfig.wiseOldManOpenOption()); + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) + { + } + + @Override + public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) + { + } + }); overallPanel.setComponentPopupMenu(popupMenu); final JLabel overallIcon = new JLabel(new ImageIcon(iconManager.getSkillImage(Skill.OVERALL))); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java index 9ad62e3414..b37c7153d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java @@ -211,4 +211,15 @@ public interface XpTrackerConfig extends Config { return false; } + + @ConfigItem( + position = 15, + keyName = "wiseOldManOpenOption", + name = "Wise Old Man Option", + description = "Adds an option to the XP info box right-click menu to open Wise Old Man" + ) + default boolean wiseOldManOpenOption() + { + return true; + } }