diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java index 4690a70ecc..f0edfc1928 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java @@ -33,6 +33,7 @@ import java.awt.Point; import java.awt.Rectangle; import java.util.Set; import javax.inject.Inject; +import com.google.common.primitives.ImmutableIntArray; import net.runelite.api.ItemID; import net.runelite.api.Query; import net.runelite.api.queries.EquipmentItemQuery; @@ -48,62 +49,70 @@ import net.runelite.client.util.QueryRunner; class SlayerOverlay extends Overlay { + private final static Set SLAYER_JEWELRY = ImmutableSet.of( + ItemID.SLAYER_RING_1, + ItemID.SLAYER_RING_2, + ItemID.SLAYER_RING_3, + ItemID.SLAYER_RING_4, + ItemID.SLAYER_RING_5, + ItemID.SLAYER_RING_6, + ItemID.SLAYER_RING_7, + ItemID.SLAYER_RING_8 + ); + + private final static ImmutableIntArray ALL_SLAYER_ITEMS = ImmutableIntArray.of( + ItemID.SLAYER_HELMET, + ItemID.SLAYER_HELMET_I, + ItemID.BLACK_SLAYER_HELMET, + ItemID.BLACK_SLAYER_HELMET_I, + ItemID.GREEN_SLAYER_HELMET, + ItemID.GREEN_SLAYER_HELMET_I, + ItemID.PURPLE_SLAYER_HELMET, + ItemID.PURPLE_SLAYER_HELMET_I, + ItemID.RED_SLAYER_HELMET, + ItemID.RED_SLAYER_HELMET_I, + ItemID.TURQUOISE_SLAYER_HELMET, + ItemID.TURQUOISE_SLAYER_HELMET_I, + ItemID.SLAYER_RING_ETERNAL, + ItemID.ENCHANTED_GEM, + ItemID.ETERNAL_GEM, + ItemID.BRACELET_OF_SLAUGHTER, + ItemID.EXPEDITIOUS_BRACELET, + ItemID.SLAYER_RING_1, + ItemID.SLAYER_RING_2, + ItemID.SLAYER_RING_3, + ItemID.SLAYER_RING_4, + ItemID.SLAYER_RING_5, + ItemID.SLAYER_RING_6, + ItemID.SLAYER_RING_7, + ItemID.SLAYER_RING_8 + ); + private final SlayerConfig config; private final SlayerPlugin plugin; + private final QueryRunner queryRunner; @Inject - private QueryRunner queryRunner; - - private final Set slayerJewelry = ImmutableSet.of( - ItemID.SLAYER_RING_1, - ItemID.SLAYER_RING_2, - ItemID.SLAYER_RING_3, - ItemID.SLAYER_RING_4, - ItemID.SLAYER_RING_5, - ItemID.SLAYER_RING_6, - ItemID.SLAYER_RING_7, - ItemID.SLAYER_RING_8 - ); - - private final Set slayerEquipment = ImmutableSet.of( - ItemID.SLAYER_HELMET, - ItemID.SLAYER_HELMET_I, - ItemID.BLACK_SLAYER_HELMET, - ItemID.BLACK_SLAYER_HELMET_I, - ItemID.GREEN_SLAYER_HELMET, - ItemID.GREEN_SLAYER_HELMET_I, - ItemID.PURPLE_SLAYER_HELMET, - ItemID.PURPLE_SLAYER_HELMET_I, - ItemID.RED_SLAYER_HELMET, - ItemID.RED_SLAYER_HELMET_I, - ItemID.TURQUOISE_SLAYER_HELMET, - ItemID.TURQUOISE_SLAYER_HELMET_I, - ItemID.SLAYER_RING_ETERNAL, - ItemID.ENCHANTED_GEM, - ItemID.ETERNAL_GEM, - ItemID.BRACELET_OF_SLAUGHTER, - ItemID.EXPEDITIOUS_BRACELET - ); - - private ImmutableList checkInventory() - { - Query inventoryQuery = new InventoryWidgetItemQuery(); - WidgetItem[] inventoryWidgetItems = queryRunner.runQuery(inventoryQuery); - - Query equipmentQuery = new EquipmentItemQuery().slotEquals(WidgetInfo.EQUIPMENT_HELMET, WidgetInfo.EQUIPMENT_RING, WidgetInfo.EQUIPMENT_GLOVES); - WidgetItem[] equipmentWidgetItems = queryRunner.runQuery(equipmentQuery); - - WidgetItem[] items = concat(inventoryWidgetItems, equipmentWidgetItems, WidgetItem.class); - return ImmutableList.copyOf(items); - } - - @Inject - private SlayerOverlay(SlayerPlugin plugin, SlayerConfig config) + private SlayerOverlay(SlayerPlugin plugin, SlayerConfig config, QueryRunner queryRunner) { setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); this.plugin = plugin; this.config = config; + this.queryRunner = queryRunner; + } + + private ImmutableList getSlayerItems() + { + int[] slayerItems = ALL_SLAYER_ITEMS.toArray(); + Query inventoryQuery = new InventoryWidgetItemQuery().idEquals(slayerItems); + WidgetItem[] inventoryWidgetItems = queryRunner.runQuery(inventoryQuery); + + Query equipmentQuery = new EquipmentItemQuery().slotEquals(WidgetInfo.EQUIPMENT_HELMET, WidgetInfo.EQUIPMENT_RING, WidgetInfo.EQUIPMENT_GLOVES).idEquals(slayerItems); + WidgetItem[] equipmentWidgetItems = queryRunner.runQuery(equipmentQuery); + + WidgetItem[] items = concat(inventoryWidgetItems, equipmentWidgetItems, WidgetItem.class); + return ImmutableList.copyOf(items); } @Override @@ -125,15 +134,10 @@ class SlayerOverlay extends Overlay graphics.setFont(FontManager.getRunescapeSmallFont()); - for (WidgetItem item : checkInventory()) + for (WidgetItem item : getSlayerItems()) { int itemId = item.getId(); - if (!slayerEquipment.contains(itemId) && !slayerJewelry.contains(itemId)) - { - continue; - } - final Rectangle bounds = item.getCanvasBounds(); final TextComponent textComponent = new TextComponent(); @@ -151,7 +155,7 @@ class SlayerOverlay extends Overlay } // Draw the counter in the bottom left for equipment, and top left for jewelry - textComponent.setPosition(new Point(bounds.x, bounds.y + (slayerJewelry.contains(itemId) + textComponent.setPosition(new Point(bounds.x, bounds.y + (SLAYER_JEWELRY.contains(itemId) ? bounds.height : graphics.getFontMetrics().getHeight()))); textComponent.render(graphics);