From dbb659c7392e7ea707c4fb1dbc00d72977fbf47a Mon Sep 17 00:00:00 2001 From: TheStonedTurtle <29030969+TheStonedTurtle@users.noreply.github.com> Date: Fri, 15 Feb 2019 22:02:23 -0800 Subject: [PATCH] Implement ItemUtil for plugins --- .../client/plugins/cannon/CannonPlugin.java | 47 +++---------------- .../plugins/cluescrolls/ClueScrollPlugin.java | 7 +-- .../clues/ThreeStepCrypticClue.java | 16 +++---- .../client/plugins/fishing/FishingPlugin.java | 46 +++++------------- .../itemstats/potions/PrayerPotion.java | 42 +++++------------ .../plugins/roguesden/RoguesDenPlugin.java | 12 +---- 6 files changed, 41 insertions(+), 129 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index 2d96d26e4c..f57097360a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.cannon; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.awt.Color; import java.time.temporal.ChronoUnit; @@ -38,7 +39,6 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameObject; import net.runelite.api.InventoryID; -import net.runelite.api.Item; import net.runelite.api.ItemID; import static net.runelite.api.ObjectID.CANNON_BASE; import net.runelite.api.Player; @@ -62,6 +62,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; +import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Cannon", @@ -72,6 +73,9 @@ public class CannonPlugin extends Plugin { private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)"); private static final int MAX_CBALLS = 30; + private static final ImmutableSet CANNON_PARTS = ImmutableSet.of( + ItemID.CANNON_BASE, ItemID.CANNON_STAND, ItemID.CANNON_BARRELS, ItemID.CANNON_FURNACE + ); private CannonCounter counter; private boolean skipProjectileCheckThisTick; @@ -153,46 +157,7 @@ public class CannonPlugin extends Plugin return; } - boolean hasBase = false; - boolean hasStand = false; - boolean hasBarrels = false; - boolean hasFurnace = false; - boolean hasAll = false; - - if (!cannonPlaced) - { - for (Item item : event.getItemContainer().getItems()) - { - if (item == null) - { - continue; - } - - switch (item.getId()) - { - case ItemID.CANNON_BASE: - hasBase = true; - break; - case ItemID.CANNON_STAND: - hasStand = true; - break; - case ItemID.CANNON_BARRELS: - hasBarrels = true; - break; - case ItemID.CANNON_FURNACE: - hasFurnace = true; - break; - } - - if (hasBase && hasStand && hasBarrels && hasFurnace) - { - hasAll = true; - break; - } - } - } - - cannonSpotOverlay.setHidden(!hasAll); + cannonSpotOverlay.setHidden(!ItemUtil.containsAllItemIds(event.getItemContainer().getItems(), CANNON_PARTS)); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 8a24153854..768553e7f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -31,10 +31,8 @@ import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.time.Duration; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Objects; -import java.util.stream.Stream; import javax.inject.Inject; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -86,6 +84,7 @@ import net.runelite.client.plugins.cluescrolls.clues.ThreeStepCrypticClue; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.ImageUtil; +import net.runelite.client.util.ItemUtil; import net.runelite.client.util.Text; @PluginDescriptor( @@ -234,10 +233,8 @@ public class ClueScrollPlugin extends Plugin // Check if item was removed from inventory if (clue != null && clueItemId != null) { - final Stream items = Arrays.stream(event.getItemContainer().getItems()); - // Check if clue was removed from inventory - if (items.noneMatch(item -> itemManager.getItemComposition(item.getId()).getId() == clueItemId)) + if (!ItemUtil.containsItemId(event.getItemContainer().getItems(), clueItemId)) { resetClue(true); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java index 995c6b90e0..34d036ae5a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java @@ -28,15 +28,12 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.util.AbstractMap; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.stream.Stream; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Client; import net.runelite.api.InventoryID; -import net.runelite.api.Item; import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_1; import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_2; import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_3; @@ -48,6 +45,7 @@ import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; import net.runelite.client.ui.overlay.components.LineComponent; import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.TitleComponent; +import net.runelite.client.util.ItemUtil; import net.runelite.client.util.Text; @Getter @@ -127,21 +125,19 @@ public class ThreeStepCrypticClue extends ClueScroll implements TextClueScroll, if (event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY)) { boolean success = false; - success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_1, 0); - success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_2, 1); - success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_3, 2); + success |= checkForPart(event, TORN_CLUE_SCROLL_PART_1, 0); + success |= checkForPart(event, TORN_CLUE_SCROLL_PART_2, 1); + success |= checkForPart(event, TORN_CLUE_SCROLL_PART_3, 2); return success; } return false; } - private boolean checkForPart(final ItemContainerChanged event, ItemManager itemManager, int clueScrollPart, int index) + private boolean checkForPart(final ItemContainerChanged event, int clueScrollPart, int index) { - final Stream items = Arrays.stream(event.getItemContainer().getItems()); - // If we have the part then that step is done - if (items.anyMatch(item -> itemManager.getItemComposition(item.getId()).getId() == clueScrollPart)) + if (ItemUtil.containsItemId(event.getItemContainer().getItems(), clueScrollPart)) { final Map.Entry entry = clueSteps.get(index); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java index 07977334e4..aae5c0f00b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.fishing; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.time.Duration; import java.time.Instant; @@ -43,7 +44,6 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.InventoryID; -import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.NPC; @@ -65,6 +65,7 @@ import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Fishing", @@ -81,6 +82,15 @@ public class FishingPlugin extends Plugin private static final int TRAWLER_ACTIVITY_THRESHOLD = Math.round(0.15f * 255); + private static final ImmutableSet FISHING_TOOLS = ImmutableSet.of( + ItemID.DRAGON_HARPOON, ItemID.INFERNAL_HARPOON, ItemID.INFERNAL_HARPOON_UNCHARGED, ItemID.HARPOON, + ItemID.BARBTAIL_HARPOON, ItemID.BIG_FISHING_NET, ItemID.SMALL_FISHING_NET, ItemID.SMALL_FISHING_NET_6209, + ItemID.FISHING_ROD, ItemID.FLY_FISHING_ROD, ItemID.BARBARIAN_ROD, ItemID.OILY_FISHING_ROD, + ItemID.LOBSTER_POT, ItemID.KARAMBWAN_VESSEL, ItemID.KARAMBWAN_VESSEL_3159, + ItemID.CORMORANTS_GLOVE, ItemID.CORMORANTS_GLOVE_22817, + ItemID.PEARL_FISHING_ROD, ItemID.PEARL_FLY_FISHING_ROD, ItemID.PEARL_BARBARIAN_ROD + ); + @Getter(AccessLevel.PACKAGE) private final FishingSession session = new FishingSession(); @@ -226,39 +236,7 @@ public class FishingPlugin extends Plugin return false; } - for (Item item : itemContainer.getItems()) - { - if (item == null) - { - continue; - } - switch (item.getId()) - { - case ItemID.DRAGON_HARPOON: - case ItemID.INFERNAL_HARPOON: - case ItemID.INFERNAL_HARPOON_UNCHARGED: - case ItemID.HARPOON: - case ItemID.BARBTAIL_HARPOON: - case ItemID.BIG_FISHING_NET: - case ItemID.SMALL_FISHING_NET: - case ItemID.SMALL_FISHING_NET_6209: - case ItemID.FISHING_ROD: - case ItemID.FLY_FISHING_ROD: - case ItemID.PEARL_BARBARIAN_ROD: - case ItemID.PEARL_FISHING_ROD: - case ItemID.PEARL_FLY_FISHING_ROD: - case ItemID.BARBARIAN_ROD: - case ItemID.OILY_FISHING_ROD: - case ItemID.LOBSTER_POT: - case ItemID.KARAMBWAN_VESSEL: - case ItemID.KARAMBWAN_VESSEL_3159: - case ItemID.CORMORANTS_GLOVE: - case ItemID.CORMORANTS_GLOVE_22817: - return true; - } - } - - return false; + return ItemUtil.containsAnyItemId(itemContainer.getItems(), FISHING_TOOLS); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/PrayerPotion.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/PrayerPotion.java index 4c0bfff6a1..bd2fbfa4b6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/PrayerPotion.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/potions/PrayerPotion.java @@ -24,13 +24,16 @@ */ package net.runelite.client.plugins.itemstats.potions; +import com.google.common.collect.ImmutableSet; import net.runelite.api.Client; +import net.runelite.api.EquipmentInventorySlot; import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.client.plugins.itemstats.StatBoost; import static net.runelite.client.plugins.itemstats.stats.Stats.PRAYER; +import net.runelite.client.util.ItemUtil; public class PrayerPotion extends StatBoost { @@ -42,8 +45,11 @@ public class PrayerPotion extends StatBoost this.delta = delta; } - private static final int RING_SLOT = 12; - private static final int CAPE_SLOT = 1; + private static final ImmutableSet HOLY_WRENCH_IDS = ImmutableSet.of( + ItemID.HOLY_WRENCH, ItemID.PRAYER_CAPE, ItemID.PRAYER_CAPET, ItemID.MAX_CAPE, ItemID.MAX_CAPE_13342, + // No idea what these are + ItemID.PRAYER_CAPE_10643, ItemID.MAX_CAPE_13282 + ); @Override public int heals(Client client) @@ -54,40 +60,18 @@ public class PrayerPotion extends StatBoost if (equipContainer != null) { Item[] equip = equipContainer.getItems(); + final int ring = ItemUtil.safeGetItemIdAtIndex(equip, EquipmentInventorySlot.RING.getSlotIdx()); + final int cape = ItemUtil.safeGetItemIdAtIndex(equip, EquipmentInventorySlot.CAPE.getSlotIdx()); - hasHolyWrench |= equip.length > RING_SLOT && equip[RING_SLOT].getId() == ItemID.RING_OF_THE_GODS_I; - if (equip.length > CAPE_SLOT) - { - int cape = equip[CAPE_SLOT].getId(); - hasHolyWrench |= cape == ItemID.PRAYER_CAPE; - hasHolyWrench |= cape == ItemID.PRAYER_CAPET; - hasHolyWrench |= cape == ItemID.PRAYER_CAPE_10643; // No idea what this is - hasHolyWrench |= cape == ItemID.MAX_CAPE; - hasHolyWrench |= cape == ItemID.MAX_CAPE_13282; // Or these - hasHolyWrench |= cape == ItemID.MAX_CAPE_13342; - } + hasHolyWrench |= ring == ItemID.RING_OF_THE_GODS_I; + hasHolyWrench |= HOLY_WRENCH_IDS.contains(cape); } if (!hasHolyWrench) { ItemContainer invContainer = client.getItemContainer(InventoryID.INVENTORY); if (invContainer != null) { - for (Item itemStack : invContainer.getItems()) - { - int item = itemStack.getId(); - hasHolyWrench |= item == ItemID.HOLY_WRENCH; - hasHolyWrench |= item == ItemID.PRAYER_CAPE; - hasHolyWrench |= item == ItemID.PRAYER_CAPET; - hasHolyWrench |= item == ItemID.PRAYER_CAPE_10643; - hasHolyWrench |= item == ItemID.MAX_CAPE; - hasHolyWrench |= item == ItemID.MAX_CAPE_13282; - hasHolyWrench |= item == ItemID.MAX_CAPE_13342; - - if (hasHolyWrench) - { - break; - } - } + hasHolyWrench = ItemUtil.containsAnyItemId(invContainer.getItems(), HOLY_WRENCH_IDS); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java index b7e8b682b0..b0c4eaee5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenPlugin.java @@ -32,7 +32,6 @@ import lombok.Getter; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.InventoryID; -import net.runelite.api.Item; import net.runelite.api.ItemContainer; import static net.runelite.api.ItemID.MYSTIC_JEWEL; import net.runelite.api.Tile; @@ -49,6 +48,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.client.util.ItemUtil; @PluginDescriptor( name = "Rogues' Den", @@ -104,15 +104,7 @@ public class RoguesDenPlugin extends Plugin return false; } - for (Item item : container.getItems()) - { - if (item.getId() == MYSTIC_JEWEL) - { - return true; - } - } - - return false; + return ItemUtil.containsItemId(container.getItems(), MYSTIC_JEWEL); } @Subscribe