Implement ItemUtil for plugins

This commit is contained in:
TheStonedTurtle
2019-02-15 22:02:23 -08:00
parent b32ea38d47
commit dbb659c739
6 changed files with 41 additions and 129 deletions

View File

@@ -24,6 +24,7 @@
*/ */
package net.runelite.client.plugins.cannon; package net.runelite.client.plugins.cannon;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.awt.Color; import java.awt.Color;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@@ -38,7 +39,6 @@ import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameObject; import net.runelite.api.GameObject;
import net.runelite.api.InventoryID; import net.runelite.api.InventoryID;
import net.runelite.api.Item;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import static net.runelite.api.ObjectID.CANNON_BASE; import static net.runelite.api.ObjectID.CANNON_BASE;
import net.runelite.api.Player; 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.task.Schedule;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.ItemUtil;
@PluginDescriptor( @PluginDescriptor(
name = "Cannon", name = "Cannon",
@@ -72,6 +73,9 @@ public class CannonPlugin extends Plugin
{ {
private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)"); private static final Pattern NUMBER_PATTERN = Pattern.compile("([0-9]+)");
private static final int MAX_CBALLS = 30; private static final int MAX_CBALLS = 30;
private static final ImmutableSet<Integer> CANNON_PARTS = ImmutableSet.of(
ItemID.CANNON_BASE, ItemID.CANNON_STAND, ItemID.CANNON_BARRELS, ItemID.CANNON_FURNACE
);
private CannonCounter counter; private CannonCounter counter;
private boolean skipProjectileCheckThisTick; private boolean skipProjectileCheckThisTick;
@@ -153,46 +157,7 @@ public class CannonPlugin extends Plugin
return; return;
} }
boolean hasBase = false; cannonSpotOverlay.setHidden(!ItemUtil.containsAllItemIds(event.getItemContainer().getItems(), CANNON_PARTS));
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);
} }
@Subscribe @Subscribe

View File

@@ -31,10 +31,8 @@ import com.google.inject.Provides;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Stream;
import javax.inject.Inject; import javax.inject.Inject;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; 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.OverlayManager;
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
import net.runelite.client.util.ImageUtil; import net.runelite.client.util.ImageUtil;
import net.runelite.client.util.ItemUtil;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
@PluginDescriptor( @PluginDescriptor(
@@ -234,10 +233,8 @@ public class ClueScrollPlugin extends Plugin
// Check if item was removed from inventory // Check if item was removed from inventory
if (clue != null && clueItemId != null) if (clue != null && clueItemId != null)
{ {
final Stream<Item> items = Arrays.stream(event.getItemContainer().getItems());
// Check if clue was removed from inventory // 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); resetClue(true);
} }

View File

@@ -28,15 +28,12 @@ import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Stream;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.InventoryID; 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_1;
import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_2; import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_2;
import static net.runelite.api.ItemID.TORN_CLUE_SCROLL_PART_3; 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.LineComponent;
import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.components.PanelComponent;
import net.runelite.client.ui.overlay.components.TitleComponent; import net.runelite.client.ui.overlay.components.TitleComponent;
import net.runelite.client.util.ItemUtil;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
@Getter @Getter
@@ -127,21 +125,19 @@ public class ThreeStepCrypticClue extends ClueScroll implements TextClueScroll,
if (event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY)) if (event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY))
{ {
boolean success = false; boolean success = false;
success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_1, 0); success |= checkForPart(event, TORN_CLUE_SCROLL_PART_1, 0);
success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_2, 1); success |= checkForPart(event, TORN_CLUE_SCROLL_PART_2, 1);
success |= checkForPart(event, itemManager, TORN_CLUE_SCROLL_PART_3, 2); success |= checkForPart(event, TORN_CLUE_SCROLL_PART_3, 2);
return success; return success;
} }
return false; 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<Item> items = Arrays.stream(event.getItemContainer().getItems());
// If we have the part then that step is done // 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<CrypticClue, Boolean> entry = clueSteps.get(index); final Map.Entry<CrypticClue, Boolean> entry = clueSteps.get(index);

View File

@@ -25,6 +25,7 @@
*/ */
package net.runelite.client.plugins.fishing; package net.runelite.client.plugins.fishing;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
@@ -43,7 +44,6 @@ import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.InventoryID; import net.runelite.api.InventoryID;
import net.runelite.api.Item;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.NPC; 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.PluginDescriptor;
import net.runelite.client.plugins.xptracker.XpTrackerPlugin; import net.runelite.client.plugins.xptracker.XpTrackerPlugin;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ItemUtil;
@PluginDescriptor( @PluginDescriptor(
name = "Fishing", 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 int TRAWLER_ACTIVITY_THRESHOLD = Math.round(0.15f * 255);
private static final ImmutableSet<Integer> 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) @Getter(AccessLevel.PACKAGE)
private final FishingSession session = new FishingSession(); private final FishingSession session = new FishingSession();
@@ -226,39 +236,7 @@ public class FishingPlugin extends Plugin
return false; return false;
} }
for (Item item : itemContainer.getItems()) return ItemUtil.containsAnyItemId(itemContainer.getItems(), FISHING_TOOLS);
{
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;
} }
@Subscribe @Subscribe

View File

@@ -24,13 +24,16 @@
*/ */
package net.runelite.client.plugins.itemstats.potions; package net.runelite.client.plugins.itemstats.potions;
import com.google.common.collect.ImmutableSet;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.EquipmentInventorySlot;
import net.runelite.api.InventoryID; import net.runelite.api.InventoryID;
import net.runelite.api.Item; import net.runelite.api.Item;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.client.plugins.itemstats.StatBoost; import net.runelite.client.plugins.itemstats.StatBoost;
import static net.runelite.client.plugins.itemstats.stats.Stats.PRAYER; import static net.runelite.client.plugins.itemstats.stats.Stats.PRAYER;
import net.runelite.client.util.ItemUtil;
public class PrayerPotion extends StatBoost public class PrayerPotion extends StatBoost
{ {
@@ -42,8 +45,11 @@ public class PrayerPotion extends StatBoost
this.delta = delta; this.delta = delta;
} }
private static final int RING_SLOT = 12; private static final ImmutableSet<Integer> HOLY_WRENCH_IDS = ImmutableSet.of(
private static final int CAPE_SLOT = 1; 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 @Override
public int heals(Client client) public int heals(Client client)
@@ -54,40 +60,18 @@ public class PrayerPotion extends StatBoost
if (equipContainer != null) if (equipContainer != null)
{ {
Item[] equip = equipContainer.getItems(); 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; hasHolyWrench |= ring == ItemID.RING_OF_THE_GODS_I;
if (equip.length > CAPE_SLOT) hasHolyWrench |= HOLY_WRENCH_IDS.contains(cape);
{
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;
}
} }
if (!hasHolyWrench) if (!hasHolyWrench)
{ {
ItemContainer invContainer = client.getItemContainer(InventoryID.INVENTORY); ItemContainer invContainer = client.getItemContainer(InventoryID.INVENTORY);
if (invContainer != null) if (invContainer != null)
{ {
for (Item itemStack : invContainer.getItems()) hasHolyWrench = ItemUtil.containsAnyItemId(invContainer.getItems(), HOLY_WRENCH_IDS);
{
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;
}
}
} }
} }

View File

@@ -32,7 +32,6 @@ import lombok.Getter;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.InventoryID; import net.runelite.api.InventoryID;
import net.runelite.api.Item;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import static net.runelite.api.ItemID.MYSTIC_JEWEL; import static net.runelite.api.ItemID.MYSTIC_JEWEL;
import net.runelite.api.Tile; 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.plugins.PluginDescriptor;
import net.runelite.client.task.Schedule; import net.runelite.client.task.Schedule;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.util.ItemUtil;
@PluginDescriptor( @PluginDescriptor(
name = "Rogues' Den", name = "Rogues' Den",
@@ -104,15 +104,7 @@ public class RoguesDenPlugin extends Plugin
return false; return false;
} }
for (Item item : container.getItems()) return ItemUtil.containsItemId(container.getItems(), MYSTIC_JEWEL);
{
if (item.getId() == MYSTIC_JEWEL)
{
return true;
}
}
return false;
} }
@Subscribe @Subscribe