diff --git a/runelite-api/src/main/java/net/runelite/api/InventoryID.java b/runelite-api/src/main/java/net/runelite/api/InventoryID.java index 000bb8aa52..49f84ea551 100644 --- a/runelite-api/src/main/java/net/runelite/api/InventoryID.java +++ b/runelite-api/src/main/java/net/runelite/api/InventoryID.java @@ -60,7 +60,12 @@ public enum InventoryID /** * Theater of Blood reward chest inventory (Raids 2) */ - THEATRE_OF_BLOOD_CHEST(612); + THEATRE_OF_BLOOD_CHEST(612), + + /** + * Seed vault located inside the Farming Guild + */ + SEED_VAULT(626); private final int id; 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 f93ad417f9..df79f322ef 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 @@ -141,6 +141,7 @@ public class WidgetID public static final int BEGINNER_CLUE_MAP_WIZARDS_TOWER = 356; public static final int SEED_BOX_GROUP_ID = 128; public static final int ITEMS_KEPT_ON_DEATH_GROUP_ID = 4; + public static final int SEED_VAULT_GROUP_ID = 631; static class WorldMap { @@ -820,4 +821,9 @@ public class WidgetID static final int MAX_ITEMS_KEPT_ON_DEATH = 30; static final int SAFE_ZONE_CONTAINER = 31; } + + static class SeedVault + { + static final int TITLE_CONTAINER = 2; + } } 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 50c054c42f..9a22b724ae 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 @@ -492,7 +492,9 @@ public enum WidgetInfo ITEMS_KEPT_INFORMATION_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.INFORMATION_CONTAINER), ITEMS_KEPT_SAFE_ZONE_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.SAFE_ZONE_CONTAINER), ITEMS_LOST_VALUE(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_VALUE), - ITEMS_KEPT_MAX(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.MAX_ITEMS_KEPT_ON_DEATH); + ITEMS_KEPT_MAX(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.MAX_ITEMS_KEPT_ON_DEATH), + + SEED_VAULT_TITLE_CONTAINER(WidgetID.SEED_VAULT_GROUP_ID, WidgetID.SeedVault.TITLE_CONTAINER); private final int groupId; private final int childId; 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 28e46fb76e..057e7c20e4 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 @@ -37,9 +37,14 @@ import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.MenuEntry; import net.runelite.api.Varbits; +import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuShouldLeftClick; import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetID; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -70,6 +75,7 @@ public class BankPlugin extends Plugin private static final String DEPOSIT_WORN = "Deposit worn items"; private static final String DEPOSIT_INVENTORY = "Deposit inventory"; private static final String DEPOSIT_LOOT = "Deposit loot"; + private static final String SEED_VAULT_TITLE = "Seed Vault"; @Inject private Client client; @@ -86,6 +92,9 @@ public class BankPlugin extends Plugin @Inject private ContainerCalculation bankCalculation; + @Inject + private ContainerCalculation seedVaultCalculation; + private boolean forceRightClickFlag; @Provides @@ -156,6 +165,28 @@ public class BankPlugin extends Plugin stringStack[stringStackSize - 1] += strCurrentTab; } + @Subscribe + public void onWidgetLoaded(WidgetLoaded event) + { + if (event.getGroupId() != WidgetID.SEED_VAULT_GROUP_ID || !config.seedVaultValue()) + { + return; + } + + updateSeedVaultTotal(); + } + + @Subscribe + public void onItemContainerChanged(ItemContainerChanged event) + { + if (event.getContainerId() != InventoryID.SEED_VAULT.getId() || !config.seedVaultValue()) + { + return; + } + + updateSeedVaultTotal(); + } + private String createValueText(final ContainerPrices prices) { final long gePrice = prices.getGePrice(); @@ -229,4 +260,41 @@ public class BankPlugin extends Plugin return items; } + + private void updateSeedVaultTotal() + { + final Widget titleContainer = client.getWidget(WidgetInfo.SEED_VAULT_TITLE_CONTAINER); + if (titleContainer == null) + { + return; + } + + final Widget[] children = titleContainer.getDynamicChildren(); + if (children == null || children.length < 2) + { + return; + } + + final ContainerPrices prices = seedVaultCalculation.calculate(getSeedVaultItems()); + if (prices == null) + { + return; + } + + final String titleText = createValueText(prices); + + final Widget title = children[1]; + title.setText(SEED_VAULT_TITLE + titleText); + } + + private Item[] getSeedVaultItems() + { + final ItemContainer itemContainer = client.getItemContainer(InventoryID.SEED_VAULT); + if (itemContainer == null) + { + return null; + } + + return itemContainer.getItems(); + } }