From 6dca841c87adfd7d6b1eb24a32c9c2c82cf27d45 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 9 May 2021 12:46:51 -0400 Subject: [PATCH] item charges: simplify infobox creation logic This looks at the worn items and matches them to known items with charges, instead of checking the worn items for each known item with charges. Additionally it associates guthix rest to potions, because previously they did not have a config option, and adds an infobox for the chronicle. --- .../itemcharges/ItemChargeInfobox.java | 6 +- .../itemcharges/ItemChargeOverlay.java | 93 +---- .../plugins/itemcharges/ItemChargePlugin.java | 345 ++++-------------- .../plugins/itemcharges/ItemChargeType.java | 46 ++- .../plugins/itemcharges/ItemWithCharge.java | 8 +- .../plugins/itemcharges/ItemWithConfig.java | 74 ++++ .../plugins/itemcharges/ItemWithSlot.java | 57 --- .../itemcharges/ItemChargePluginTest.java | 2 + 8 files changed, 202 insertions(+), 429 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeInfobox.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeInfobox.java index 7ee70d44b5..102c7bfac4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeInfobox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeInfobox.java @@ -27,14 +27,16 @@ package net.runelite.client.plugins.itemcharges; import java.awt.Color; import java.awt.image.BufferedImage; import lombok.Getter; +import lombok.ToString; import net.runelite.api.EquipmentInventorySlot; import net.runelite.client.ui.overlay.infobox.Counter; @Getter +@ToString class ItemChargeInfobox extends Counter { private final ItemChargePlugin plugin; - private final ItemWithSlot item; + private final int item; private final EquipmentInventorySlot slot; ItemChargeInfobox( @@ -42,7 +44,7 @@ class ItemChargeInfobox extends Counter BufferedImage image, String name, int charges, - ItemWithSlot item, + int item, EquipmentInventorySlot slot) { super(image, plugin, charges); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java index b028fa444a..39f081c4e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java @@ -30,9 +30,19 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import javax.inject.Inject; -import net.runelite.api.ItemID; import net.runelite.api.widgets.WidgetItem; -import static net.runelite.client.plugins.itemcharges.ItemChargeType.*; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.ABYSSAL_BRACELET; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.AMULET_OF_BOUNTY; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.AMULET_OF_CHEMISTRY; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.BELLOWS; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.FRUIT_BASKET; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.FUNGICIDE_SPRAY; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.IMPBOX; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.POTION; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.SACK; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.TELEPORT; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERCAN; +import static net.runelite.client.plugins.itemcharges.ItemChargeType.WATERSKIN; import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.WidgetItemOverlay; import net.runelite.client.ui.overlay.components.TextComponent; @@ -62,86 +72,15 @@ class ItemChargeOverlay extends WidgetItemOverlay graphics.setFont(FontManager.getRunescapeSmallFont()); int charges; - if (itemId == ItemID.DODGY_NECKLACE) + ItemWithConfig itemWithConfig = ItemWithConfig.findItem(itemId); + if (itemWithConfig != null) { - if (!config.showDodgyCount()) + if (!itemWithConfig.getType().getEnabled().apply(config)) { return; } - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_DODGY_NECKLACE); - } - else if (itemId == ItemID.BINDING_NECKLACE) - { - if (!config.showBindingNecklaceCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_BINDING_NECKLACE); - } - else if (itemId >= ItemID.EXPLORERS_RING_1 && itemId <= ItemID.EXPLORERS_RING_4) - { - if (!config.showExplorerRingCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_EXPLORERS_RING); - } - else if (itemId == ItemID.RING_OF_FORGING) - { - if (!config.showRingOfForgingCount()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_RING_OF_FORGING); - } - else if (itemId == ItemID.AMULET_OF_CHEMISTRY) - { - if (!config.showAmuletOfChemistryCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_AMULET_OF_CHEMISTRY); - } - else if (itemId == ItemID.AMULET_OF_BOUNTY) - { - if (!config.showAmuletOfBountyCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_AMULET_OF_BOUNTY); - } - else if (itemId == ItemID.CHRONICLE) - { - if (!config.showTeleportCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_CHRONICLE); - } - else if (itemId == ItemID.BRACELET_OF_SLAUGHTER) - { - if (!config.showBraceletOfSlaughterCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_BRACELET_OF_SLAUGHTER); - } - else if (itemId == ItemID.EXPEDITIOUS_BRACELET) - { - if (!config.showExpeditiousBraceletCharges()) - { - return; - } - - charges = itemChargePlugin.getItemCharges(ItemChargeConfig.KEY_EXPEDITIOUS_BRACELET); + charges = itemChargePlugin.getItemCharges(itemWithConfig.getConfigKey()); } else { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 2c964d6709..237a2174c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -31,6 +31,8 @@ import com.google.common.primitives.Ints; import com.google.inject.Provides; import java.awt.Color; import java.awt.image.BufferedImage; +import java.util.EnumMap; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; @@ -167,6 +169,7 @@ public class ItemChargePlugin extends Plugin // Limits destroy callback to once per tick private int lastCheckTick; + private final Map infoboxes = new EnumMap<>(EquipmentInventorySlot.class); @Provides ItemChargeConfig getConfig(ConfigManager configManager) @@ -185,6 +188,7 @@ public class ItemChargePlugin extends Plugin { overlayManager.remove(overlay); infoBoxManager.removeIf(ItemChargeInfobox.class::isInstance); + infoboxes.clear(); lastCheckTick = -1; } @@ -196,51 +200,7 @@ public class ItemChargePlugin extends Plugin return; } - if (!config.showInfoboxes()) - { - infoBoxManager.removeIf(ItemChargeInfobox.class::isInstance); - return; - } - - if (!config.showTeleportCharges()) - { - removeInfobox(ItemWithSlot.TELEPORT); - } - - if (!config.showAmuletOfChemistryCharges()) - { - removeInfobox(ItemWithSlot.AMULET_OF_CHEMISTY); - } - - if (!config.showAmuletOfBountyCharges()) - { - removeInfobox(ItemWithSlot.AMULET_OF_BOUNTY); - } - - if (!config.showAbyssalBraceletCharges()) - { - removeInfobox(ItemWithSlot.ABYSSAL_BRACELET); - } - - if (!config.showDodgyCount()) - { - removeInfobox(ItemWithSlot.DODGY_NECKLACE); - } - - if (!config.showBindingNecklaceCharges()) - { - removeInfobox(ItemWithSlot.BINDING_NECKLACE); - } - - if (!config.showExplorerRingCharges()) - { - removeInfobox(ItemWithSlot.EXPLORER_RING); - } - - if (!config.showRingOfForgingCount()) - { - removeInfobox(ItemWithSlot.RING_OF_FORGING); - } + clientThread.invoke(this::updateInfoboxes); } @Subscribe @@ -457,62 +417,12 @@ public class ItemChargePlugin extends Plugin @Subscribe public void onItemContainerChanged(ItemContainerChanged event) { - if (event.getItemContainer() != client.getItemContainer(InventoryID.EQUIPMENT) || !config.showInfoboxes()) + if (event.getContainerId() != InventoryID.EQUIPMENT.getId()) { return; } - final Item[] items = event.getItemContainer().getItems(); - - if (config.showTeleportCharges()) - { - updateJewelleryInfobox(ItemWithSlot.TELEPORT, items); - } - - if (config.showDodgyCount()) - { - updateJewelleryInfobox(ItemWithSlot.DODGY_NECKLACE, items); - } - - if (config.showAbyssalBraceletCharges()) - { - updateJewelleryInfobox(ItemWithSlot.ABYSSAL_BRACELET, items); - } - - if (config.showBindingNecklaceCharges()) - { - updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, items); - } - - if (config.showExplorerRingCharges()) - { - updateJewelleryInfobox(ItemWithSlot.EXPLORER_RING, items); - } - - if (config.showRingOfForgingCount()) - { - updateJewelleryInfobox(ItemWithSlot.RING_OF_FORGING, items); - } - - if (config.showAmuletOfChemistryCharges()) - { - updateJewelleryInfobox(ItemWithSlot.AMULET_OF_CHEMISTY, items); - } - - if (config.showAmuletOfBountyCharges()) - { - updateJewelleryInfobox(ItemWithSlot.AMULET_OF_BOUNTY, items); - } - - if (config.showBraceletOfSlaughterCharges()) - { - updateJewelleryInfobox(ItemWithSlot.BRACELET_OF_SLAUGHTER, items); - } - - if (config.showExpeditiousBraceletCharges()) - { - updateJewelleryInfobox(ItemWithSlot.EXPEDITIOUS_BRACELET, items); - } + updateInfoboxes(); } @Subscribe @@ -582,138 +492,50 @@ public class ItemChargePlugin extends Plugin private void updateDodgyNecklaceCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_DODGY_NECKLACE, value); - - if (config.showInfoboxes() && config.showDodgyCount()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.DODGY_NECKLACE, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateAmuletOfChemistryCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_AMULET_OF_CHEMISTRY, value); - - if (config.showInfoboxes() && config.showAmuletOfChemistryCharges()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.AMULET_OF_CHEMISTY, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateAmuletOfBountyCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_AMULET_OF_BOUNTY, value); - - if (config.showInfoboxes() && config.showAmuletOfBountyCharges()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.AMULET_OF_BOUNTY, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateBindingNecklaceCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_BINDING_NECKLACE, value); - - if (config.showInfoboxes() && config.showBindingNecklaceCharges()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.BINDING_NECKLACE, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateExplorerRingCharges(final int value) { // Note: Varbit counts upwards. We count down from the maximum charges. setItemCharges(ItemChargeConfig.KEY_EXPLORERS_RING, MAX_EXPLORER_RING_CHARGES - value); - - if (config.showInfoboxes() && config.showExplorerRingCharges()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.EXPLORER_RING, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateRingOfForgingCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_RING_OF_FORGING, value); - - if (config.showInfoboxes() && config.showRingOfForgingCount()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.RING_OF_FORGING, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateBraceletOfSlaughterCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_BRACELET_OF_SLAUGHTER, value); - - if (config.showInfoboxes() && config.showBraceletOfSlaughterCharges()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.BRACELET_OF_SLAUGHTER, itemContainer.getItems()); - } + updateInfoboxes(); } private void updateExpeditiousBraceletCharges(final int value) { setItemCharges(ItemChargeConfig.KEY_EXPEDITIOUS_BRACELET, value); - - if (config.showInfoboxes() && config.showExpeditiousBraceletCharges()) - { - final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - - if (itemContainer == null) - { - return; - } - - updateJewelleryInfobox(ItemWithSlot.EXPEDITIOUS_BRACELET, itemContainer.getItems()); - } + updateInfoboxes(); } private void checkDestroyWidget() @@ -738,81 +560,85 @@ public class ItemChargePlugin extends Plugin } } - private void updateJewelleryInfobox(ItemWithSlot item, Item[] items) + private void updateInfoboxes() { - for (final EquipmentInventorySlot equipmentInventorySlot : item.getSlots()) - { - updateJewelleryInfobox(item, items, equipmentInventorySlot); - } - } + final ItemContainer itemContainer = client.getItemContainer(InventoryID.EQUIPMENT); - private void updateJewelleryInfobox(ItemWithSlot type, Item[] items, EquipmentInventorySlot slot) - { - removeInfobox(type, slot); - - if (slot.getSlotIdx() >= items.length) + if (itemContainer == null) { return; } - final int id = items[slot.getSlotIdx()].getId(); - if (id < 0) + final Item[] items = itemContainer.getItems(); + boolean showInfoboxes = config.showInfoboxes(); + for (EquipmentInventorySlot slot : EquipmentInventorySlot.values()) { - return; - } + if (slot.getSlotIdx() >= items.length) + { + break; + } - final ItemWithCharge itemWithCharge = ItemWithCharge.findItem(id); - int charges = -1; + Item i = items[slot.getSlotIdx()]; + int id = i.getId(); + ItemChargeType type = null; + int charges = -1; - if (itemWithCharge == null) - { - if (id == ItemID.DODGY_NECKLACE && type == ItemWithSlot.DODGY_NECKLACE) + final ItemWithCharge itemWithCharge = ItemWithCharge.findItem(id); + if (itemWithCharge != null) { - charges = getItemCharges(ItemChargeConfig.KEY_DODGY_NECKLACE); + type = itemWithCharge.getType(); + charges = itemWithCharge.getCharges(); } - else if (id == ItemID.BINDING_NECKLACE && type == ItemWithSlot.BINDING_NECKLACE) + else { - charges = getItemCharges(ItemChargeConfig.KEY_BINDING_NECKLACE); + final ItemWithConfig itemWithConfig = ItemWithConfig.findItem(id); + if (itemWithConfig != null) + { + type = itemWithConfig.getType(); + charges = getItemCharges(itemWithConfig.getConfigKey()); + } } - else if ((id >= ItemID.EXPLORERS_RING_1 && id <= ItemID.EXPLORERS_RING_4) && type == ItemWithSlot.EXPLORER_RING) + + boolean enabled = type != null && type.getEnabled().apply(config); + + if (showInfoboxes && enabled && charges > 0) { - charges = getItemCharges(ItemChargeConfig.KEY_EXPLORERS_RING); + ItemChargeInfobox infobox = infoboxes.get(slot); + if (infobox != null) + { + if (infobox.getItem() == id) + { + if (infobox.getCount() == charges) + { + continue; + } + + log.debug("Updating infobox count for {}", infobox); + infobox.setCount(charges); + continue; + } + + log.debug("Rebuilding infobox {}", infobox); + infoBoxManager.removeInfoBox(infobox); + infoboxes.remove(slot); + } + + final String name = itemManager.getItemComposition(id).getName(); + final BufferedImage image = itemManager.getImage(id); + infobox = new ItemChargeInfobox(this, image, name, charges, id, slot); + infoBoxManager.addInfoBox(infobox); + infoboxes.put(slot, infobox); } - else if (id == ItemID.RING_OF_FORGING && type == ItemWithSlot.RING_OF_FORGING) + else { - charges = getItemCharges(ItemChargeConfig.KEY_RING_OF_FORGING); - } - else if (id == ItemID.AMULET_OF_CHEMISTRY && type == ItemWithSlot.AMULET_OF_CHEMISTY) - { - charges = getItemCharges(ItemChargeConfig.KEY_AMULET_OF_CHEMISTRY); - } - else if (id == ItemID.AMULET_OF_BOUNTY && type == ItemWithSlot.AMULET_OF_BOUNTY) - { - charges = getItemCharges(ItemChargeConfig.KEY_AMULET_OF_BOUNTY); - } - else if (id == ItemID.BRACELET_OF_SLAUGHTER && type == ItemWithSlot.BRACELET_OF_SLAUGHTER) - { - charges = getItemCharges(ItemChargeConfig.KEY_BRACELET_OF_SLAUGHTER); - } - else if (id == ItemID.EXPEDITIOUS_BRACELET && type == ItemWithSlot.EXPEDITIOUS_BRACELET) - { - charges = getItemCharges(ItemChargeConfig.KEY_EXPEDITIOUS_BRACELET); + ItemChargeInfobox infobox = infoboxes.remove(slot); + if (infobox != null) + { + log.debug("Removing infobox {}", infobox); + infoBoxManager.removeInfoBox(infobox); + } } } - else if (itemWithCharge.getType() == type.getType()) - { - charges = itemWithCharge.getCharges(); - } - - if (charges <= 0) - { - return; - } - - final String name = itemManager.getItemComposition(id).getName(); - final BufferedImage image = itemManager.getImage(id); - final ItemChargeInfobox infobox = new ItemChargeInfobox(this, image, name, charges, type, slot); - infoBoxManager.addInfoBox(infobox); } int getItemCharges(String key) @@ -835,25 +661,6 @@ public class ItemChargePlugin extends Plugin configManager.setRSProfileConfiguration(ItemChargeConfig.GROUP, key, value); } - private void removeInfobox(final ItemWithSlot item) - { - infoBoxManager.removeIf(t -> t instanceof ItemChargeInfobox && ((ItemChargeInfobox) t).getItem() == item); - } - - private void removeInfobox(final ItemWithSlot item, final EquipmentInventorySlot slot) - { - infoBoxManager.removeIf(t -> - { - if (!(t instanceof ItemChargeInfobox)) - { - return false; - } - - final ItemChargeInfobox i = (ItemChargeInfobox) t; - return i.getItem() == item && i.getSlot() == slot; - }); - } - Color getColor(int charges) { Color color = Color.WHITE; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java index 7abf9ac0a1..f713c008c9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeType.java @@ -25,26 +25,32 @@ */ package net.runelite.client.plugins.itemcharges; +import java.util.function.Function; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter enum ItemChargeType { - ABYSSAL_BRACELET, - AMULET_OF_CHEMISTRY, - AMULET_OF_BOUNTY, - BELLOWS, - BRACELET_OF_SLAUGHTER, - EXPEDITIOUS_BRACELET, - FUNGICIDE_SPRAY, - IMPBOX, - TELEPORT, - WATERCAN, - WATERSKIN, - DODGY_NECKLACE, - BINDING_NECKLACE, - EXPLORER_RING, - FRUIT_BASKET, - SACK, - RING_OF_FORGING, - GUTHIX_REST, - CHRONICLE, - POTION, + ABYSSAL_BRACELET(ItemChargeConfig::showAbyssalBraceletCharges), + AMULET_OF_CHEMISTRY(ItemChargeConfig::showAmuletOfChemistryCharges), + AMULET_OF_BOUNTY(ItemChargeConfig::showAmuletOfBountyCharges), + BELLOWS(ItemChargeConfig::showBellowCharges), + BRACELET_OF_SLAUGHTER(ItemChargeConfig::showBraceletOfSlaughterCharges), + EXPEDITIOUS_BRACELET(ItemChargeConfig::showExpeditiousBraceletCharges), + FUNGICIDE_SPRAY(ItemChargeConfig::showFungicideCharges), + IMPBOX(ItemChargeConfig::showImpCharges), + TELEPORT(ItemChargeConfig::showTeleportCharges), + WATERCAN(ItemChargeConfig::showWateringCanCharges), + WATERSKIN(ItemChargeConfig::showWaterskinCharges), + DODGY_NECKLACE(ItemChargeConfig::showDodgyCount), + BINDING_NECKLACE(ItemChargeConfig::showBindingNecklaceCharges), + EXPLORER_RING(ItemChargeConfig::showExplorerRingCharges), + FRUIT_BASKET(ItemChargeConfig::showBasketCharges), + SACK(ItemChargeConfig::showSackCharges), + RING_OF_FORGING(ItemChargeConfig::showRingOfForgingCount), + POTION(ItemChargeConfig::showPotionDoseCount); + + private final Function enabled; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java index b9c1124423..5984389ff4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithCharge.java @@ -231,10 +231,10 @@ enum ItemWithCharge GLORYT4(TELEPORT, AMULET_OF_GLORY_T4, 4), GLORYT5(TELEPORT, AMULET_OF_GLORY_T5, 5), GLORYT6(TELEPORT, AMULET_OF_GLORY_T6, 6), - GREST1(GUTHIX_REST, GUTHIX_REST1, 1), - GREST2(GUTHIX_REST, GUTHIX_REST2, 2), - GREST3(GUTHIX_REST, GUTHIX_REST3, 3), - GREST4(GUTHIX_REST, GUTHIX_REST4, 4), + GREST1(POTION, GUTHIX_REST1, 1), + GREST2(POTION, GUTHIX_REST2, 2), + GREST3(POTION, GUTHIX_REST3, 3), + GREST4(POTION, GUTHIX_REST4, 4), GUTHIX_BAL1(POTION, GUTHIX_BALANCE1, 1), GUTHIX_BAL2(POTION, GUTHIX_BALANCE2, 2), GUTHIX_BAL3(POTION, GUTHIX_BALANCE3, 3), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java new file mode 100644 index 0000000000..ca77f40d15 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithConfig.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.itemcharges; + +import com.google.common.collect.ImmutableMap; +import java.util.Map; +import javax.annotation.Nullable; +import lombok.AllArgsConstructor; +import lombok.Getter; +import net.runelite.api.ItemID; + +@AllArgsConstructor +@Getter +enum ItemWithConfig +{ + DODGY_NECKLACE(ItemID.DODGY_NECKLACE, ItemChargeConfig.KEY_DODGY_NECKLACE, ItemChargeType.DODGY_NECKLACE), + BINDING_NECKLACE(ItemID.BINDING_NECKLACE, ItemChargeConfig.KEY_BINDING_NECKLACE, ItemChargeType.BINDING_NECKLACE), + EXPLORERS_RING_1(ItemID.EXPLORERS_RING_1, ItemChargeConfig.KEY_EXPLORERS_RING, ItemChargeType.EXPLORER_RING), + EXPLORERS_RING_2(ItemID.EXPLORERS_RING_2, ItemChargeConfig.KEY_EXPLORERS_RING, ItemChargeType.EXPLORER_RING), + EXPLORERS_RING_3(ItemID.EXPLORERS_RING_3, ItemChargeConfig.KEY_EXPLORERS_RING, ItemChargeType.EXPLORER_RING), + EXPLORERS_RING_4(ItemID.EXPLORERS_RING_4, ItemChargeConfig.KEY_EXPLORERS_RING, ItemChargeType.EXPLORER_RING), + RING_OF_FORGING(ItemID.RING_OF_FORGING, ItemChargeConfig.KEY_RING_OF_FORGING, ItemChargeType.RING_OF_FORGING), + AMULET_OF_CHEMISTRY(ItemID.AMULET_OF_CHEMISTRY, ItemChargeConfig.KEY_AMULET_OF_CHEMISTRY, ItemChargeType.AMULET_OF_CHEMISTRY), + AMULET_OF_BOUNTY(ItemID.AMULET_OF_BOUNTY, ItemChargeConfig.KEY_AMULET_OF_BOUNTY, ItemChargeType.AMULET_OF_BOUNTY), + BRACELET_OF_SLAUGHTER(ItemID.BRACELET_OF_SLAUGHTER, ItemChargeConfig.KEY_BRACELET_OF_SLAUGHTER, ItemChargeType.BRACELET_OF_SLAUGHTER), + EXPEDITIOUS_BRACELET(ItemID.EXPEDITIOUS_BRACELET, ItemChargeConfig.KEY_EXPEDITIOUS_BRACELET, ItemChargeType.EXPEDITIOUS_BRACELET), + CHRONICLE(ItemID.CHRONICLE, ItemChargeConfig.KEY_CHRONICLE, ItemChargeType.TELEPORT); + + private final int itemId; + private final String configKey; + private final ItemChargeType type; + + private static final Map ID_MAP; + + static + { + ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); + + for (ItemWithConfig item : values()) + { + builder.put(item.getItemId(), item); + } + + ID_MAP = builder.build(); + } + + @Nullable + static ItemWithConfig findItem(int itemId) + { + return ID_MAP.get(itemId); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java deleted file mode 100644 index b46cf11e9e..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemWithSlot.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2019, Tomas Slusny - * Copyright (c) 2019, Aleios - * Copyright (c) 2020, Unmoon - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.itemcharges; - -import com.google.common.collect.Sets; -import java.util.Set; -import lombok.Getter; -import net.runelite.api.EquipmentInventorySlot; - -@Getter -enum ItemWithSlot -{ - ABYSSAL_BRACELET(ItemChargeType.ABYSSAL_BRACELET, EquipmentInventorySlot.GLOVES), - AMULET_OF_CHEMISTY(ItemChargeType.AMULET_OF_CHEMISTRY, EquipmentInventorySlot.AMULET), - AMULET_OF_BOUNTY(ItemChargeType.AMULET_OF_BOUNTY, EquipmentInventorySlot.AMULET), - BRACELET_OF_SLAUGHTER(ItemChargeType.BRACELET_OF_SLAUGHTER, EquipmentInventorySlot.GLOVES), - DODGY_NECKLACE(ItemChargeType.DODGY_NECKLACE, EquipmentInventorySlot.AMULET), - EXPEDITIOUS_BRACELET(ItemChargeType.EXPEDITIOUS_BRACELET, EquipmentInventorySlot.GLOVES), - BINDING_NECKLACE(ItemChargeType.BINDING_NECKLACE, EquipmentInventorySlot.AMULET), - EXPLORER_RING(ItemChargeType.EXPLORER_RING, EquipmentInventorySlot.RING), - RING_OF_FORGING(ItemChargeType.RING_OF_FORGING, EquipmentInventorySlot.RING), - CHRONICLE(ItemChargeType.CHRONICLE, EquipmentInventorySlot.SHIELD), - TELEPORT(ItemChargeType.TELEPORT, EquipmentInventorySlot.WEAPON, EquipmentInventorySlot.AMULET, EquipmentInventorySlot.GLOVES, EquipmentInventorySlot.RING); - - private final ItemChargeType type; - private final Set slots; - - ItemWithSlot(final ItemChargeType type, final EquipmentInventorySlot... slots) - { - this.type = type; - this.slots = Sets.newHashSet(slots); - } -} diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java index 9daa94a2cf..2e0f60c19c 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/itemcharges/ItemChargePluginTest.java @@ -32,6 +32,7 @@ import java.util.concurrent.ScheduledExecutorService; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.InventoryID; +import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.events.ChatMessage; @@ -173,6 +174,7 @@ public class ItemChargePluginTest ItemContainer equipmentItemContainer = mock(ItemContainer.class); when(client.getItemContainer(InventoryID.EQUIPMENT)).thenReturn(equipmentItemContainer); when(equipmentItemContainer.contains(ItemID.RING_OF_FORGING)).thenReturn(true); + when(equipmentItemContainer.getItems()).thenReturn(new Item[0]); // Run message chatMessage = new ChatMessage(null, ChatMessageType.GAMEMESSAGE, "", USED_RING_OF_FORGING, "", 0); itemChargePlugin.onChatMessage(chatMessage);