Merge pull request #1493 from deathbeam/item-container-events

Hide clue scroll interface when no clue is present
This commit is contained in:
Adam
2018-04-18 08:58:38 -04:00
committed by GitHub

View File

@@ -29,7 +29,6 @@ package net.runelite.client.plugins.cluescrolls;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@@ -43,15 +42,20 @@ import net.runelite.api.GameObject;
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.Item;
import net.runelite.api.ItemComposition;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.Query; import net.runelite.api.Query;
import net.runelite.api.coords.WorldPoint; import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.queries.GameObjectQuery; import net.runelite.api.queries.GameObjectQuery;
import net.runelite.api.queries.InventoryItemQuery; import net.runelite.api.queries.InventoryItemQuery;
import net.runelite.api.queries.NPCQuery; import net.runelite.api.queries.NPCQuery;
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.client.game.ItemManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.cluescrolls.clues.AnagramClue; import net.runelite.client.plugins.cluescrolls.clues.AnagramClue;
@@ -65,7 +69,6 @@ import net.runelite.client.plugins.cluescrolls.clues.MapClue;
import net.runelite.client.plugins.cluescrolls.clues.NpcClueScroll; import net.runelite.client.plugins.cluescrolls.clues.NpcClueScroll;
import net.runelite.client.plugins.cluescrolls.clues.ObjectClueScroll; import net.runelite.client.plugins.cluescrolls.clues.ObjectClueScroll;
import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll; import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll;
import net.runelite.client.task.Schedule;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.util.QueryRunner; import net.runelite.client.util.QueryRunner;
@@ -96,6 +99,9 @@ public class ClueScrollPlugin extends Plugin
@Getter @Getter
private Client client; private Client client;
@Inject
private ItemManager itemManager;
@Inject @Inject
private QueryRunner queryRunner; private QueryRunner queryRunner;
@@ -131,19 +137,47 @@ public class ClueScrollPlugin extends Plugin
clue = null; clue = null;
} }
@Schedule( @Subscribe
period = 600, public void onItemContainerChanged(final ItemContainerChanged event)
unit = ChronoUnit.MILLIS
)
public void checkForClues()
{ {
if (client.getGameState() == GameState.LOGIN_SCREEN) // Check if item was removed from inventory
if (clue != null && event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY))
{ {
client.clearHintArrow(); final Item[] items = event.getItemContainer().getItems();
clue = null; boolean found = false;
return;
}
// Clue was maybe removed from inventory, check if there is any clue scrolls left
for (Item item : items)
{
final ItemComposition itemContainerDefinition = itemManager.getItemComposition(item.getId());
// Check if we have any clue scrolls left
if (itemContainerDefinition.getName().startsWith("Clue scroll"))
{
found = true;
break;
}
}
if (!found)
{
resetClue();
}
}
}
@Subscribe
public void onGameStateChanged(final GameStateChanged event)
{
if (event.getGameState() == GameState.LOGIN_SCREEN)
{
resetClue();
}
}
@Subscribe
public void onGameTick(final GameTick event)
{
npcsToMark = null; npcsToMark = null;
objectsToMark = null; objectsToMark = null;
equippedItems = null; equippedItems = null;
@@ -202,12 +236,22 @@ public class ClueScrollPlugin extends Plugin
// so the clue window doesn't have to be open. // so the clue window doesn't have to be open.
if (clue != null) if (clue != null)
{ {
client.clearHintArrow(); if (clue != this.clue)
{
resetClue();
}
this.clue = clue; this.clue = clue;
this.clueTimeout = Instant.now(); this.clueTimeout = Instant.now();
} }
} }
private void resetClue()
{
clue = null;
client.clearHintArrow();
}
private ClueScroll findClueScroll() private ClueScroll findClueScroll()
{ {
Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT); Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT);