slayer plugin: move widget inventory check to game tick

This commit is contained in:
Adam
2018-05-10 21:08:14 -04:00
parent 593bab8609
commit f6a093aada
2 changed files with 43 additions and 36 deletions

View File

@@ -24,9 +24,7 @@
*/ */
package net.runelite.client.plugins.slayer; package net.runelite.client.plugins.slayer;
import static com.google.common.collect.ObjectArrays.concat; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
@@ -35,25 +33,19 @@ import java.util.Collection;
import java.util.Set; import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.Query;
import net.runelite.api.queries.EquipmentItemQuery;
import net.runelite.api.queries.InventoryWidgetItemQuery;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetItem; import net.runelite.api.widgets.WidgetItem;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.TextComponent; import net.runelite.client.ui.overlay.components.TextComponent;
import net.runelite.client.util.QueryRunner;
class SlayerOverlay extends Overlay class SlayerOverlay extends Overlay
{ {
private final QueryRunner queryRunner;
private final SlayerConfig config; private final SlayerConfig config;
private final SlayerPlugin plugin; private final SlayerPlugin plugin;
private final Set<Integer> slayerJewelry = Sets.newHashSet( private final Set<Integer> slayerJewelry = ImmutableSet.of(
ItemID.SLAYER_RING_1, ItemID.SLAYER_RING_1,
ItemID.SLAYER_RING_2, ItemID.SLAYER_RING_2,
ItemID.SLAYER_RING_3, ItemID.SLAYER_RING_3,
@@ -64,7 +56,7 @@ class SlayerOverlay extends Overlay
ItemID.SLAYER_RING_8 ItemID.SLAYER_RING_8
); );
private final Set<Integer> slayerEquipment = Sets.newHashSet( private final Set<Integer> slayerEquipment = ImmutableSet.of(
ItemID.SLAYER_HELMET, ItemID.SLAYER_HELMET,
ItemID.SLAYER_HELMET_I, ItemID.SLAYER_HELMET_I,
ItemID.BLACK_SLAYER_HELMET, ItemID.BLACK_SLAYER_HELMET,
@@ -85,11 +77,10 @@ class SlayerOverlay extends Overlay
); );
@Inject @Inject
SlayerOverlay(QueryRunner queryRunner, SlayerPlugin plugin, SlayerConfig config) private SlayerOverlay(SlayerPlugin plugin, SlayerConfig config)
{ {
setPosition(OverlayPosition.DYNAMIC); setPosition(OverlayPosition.DYNAMIC);
setLayer(OverlayLayer.ABOVE_WIDGETS); setLayer(OverlayLayer.ABOVE_WIDGETS);
this.queryRunner = queryRunner;
this.plugin = plugin; this.plugin = plugin;
this.config = config; this.config = config;
} }
@@ -113,7 +104,8 @@ class SlayerOverlay extends Overlay
graphics.setFont(FontManager.getRunescapeSmallFont()); graphics.setFont(FontManager.getRunescapeSmallFont());
for (WidgetItem item : getSlayerWidgetItems()) Collection<WidgetItem> items = plugin.getSlayerItems();
for (WidgetItem item : items)
{ {
int itemId = item.getId(); int itemId = item.getId();
@@ -125,17 +117,17 @@ class SlayerOverlay extends Overlay
final Rectangle bounds = item.getCanvasBounds(); final Rectangle bounds = item.getCanvasBounds();
final TextComponent textComponent = new TextComponent(); final TextComponent textComponent = new TextComponent();
if (item.getId() == ItemID.EXPEDITIOUS_BRACELET) switch (item.getId())
{ {
textComponent.setText(String.valueOf(expeditiousCount)); case ItemID.EXPEDITIOUS_BRACELET:
} textComponent.setText(String.valueOf(expeditiousCount));
else if (item.getId() == ItemID.BRACELET_OF_SLAUGHTER) break;
{ case ItemID.BRACELET_OF_SLAUGHTER:
textComponent.setText(String.valueOf(slaughterCount)); textComponent.setText(String.valueOf(slaughterCount));
} break;
else default:
{ textComponent.setText(String.valueOf(amount));
textComponent.setText(String.valueOf(amount)); break;
} }
// Draw the counter in the bottom left for equipment, and top left for jewelry // Draw the counter in the bottom left for equipment, and top left for jewelry
@@ -147,16 +139,4 @@ class SlayerOverlay extends Overlay
return null; return null;
} }
private Collection<WidgetItem> getSlayerWidgetItems()
{
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);
}
} }

View File

@@ -25,6 +25,8 @@
*/ */
package net.runelite.client.plugins.slayer; package net.runelite.client.plugins.slayer;
import com.google.common.collect.ImmutableList;
import static com.google.common.collect.ObjectArrays.concat;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@@ -49,14 +51,18 @@ import net.runelite.api.GameState;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.NPCComposition; import net.runelite.api.NPCComposition;
import net.runelite.api.Query;
import static net.runelite.api.Skill.SLAYER; import static net.runelite.api.Skill.SLAYER;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.ExperienceChanged;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick; import net.runelite.api.events.GameTick;
import net.runelite.api.queries.EquipmentItemQuery;
import net.runelite.api.queries.InventoryWidgetItemQuery;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetItem;
import net.runelite.client.Notifier; import net.runelite.client.Notifier;
import net.runelite.client.callback.ClientThread; import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
@@ -65,6 +71,7 @@ import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
import net.runelite.client.util.QueryRunner;
import net.runelite.client.util.Text; import net.runelite.client.util.Text;
@PluginDescriptor( @PluginDescriptor(
@@ -115,6 +122,9 @@ public class SlayerPlugin extends Plugin
@Inject @Inject
private ClientThread clientThread; private ClientThread clientThread;
@Inject
private QueryRunner queryRunner;
@Inject @Inject
private TargetClickboxOverlay targetClickboxOverlay; private TargetClickboxOverlay targetClickboxOverlay;
@@ -124,6 +134,9 @@ public class SlayerPlugin extends Plugin
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private List<NPC> highlightedTargets = new ArrayList<>(); private List<NPC> highlightedTargets = new ArrayList<>();
@Getter(AccessLevel.PACKAGE)
private Collection<WidgetItem> slayerItems = Collections.emptyList();
private String taskName; private String taskName;
private int amount; private int amount;
private TaskCounter counter; private TaskCounter counter;
@@ -207,6 +220,8 @@ public class SlayerPlugin extends Plugin
@Subscribe @Subscribe
public void onGameTick(GameTick tick) public void onGameTick(GameTick tick)
{ {
checkInventories();
Widget NPCDialog = client.getWidget(WidgetInfo.DIALOG_NPC_TEXT); Widget NPCDialog = client.getWidget(WidgetInfo.DIALOG_NPC_TEXT);
if (NPCDialog != null) if (NPCDialog != null)
{ {
@@ -277,6 +292,18 @@ public class SlayerPlugin extends Plugin
} }
} }
private void checkInventories()
{
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);
slayerItems = ImmutableList.copyOf(items);
}
@Subscribe @Subscribe
public void onChatMessage(ChatMessage event) public void onChatMessage(ChatMessage event)
{ {