Merge pull request #1850 from deathbeam/fix-clue-reset

Fix clue resetting
This commit is contained in:
Adam
2018-04-28 17:42:56 -04:00
committed by GitHub

View File

@@ -31,6 +31,7 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
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;
@@ -52,6 +53,7 @@ import net.runelite.api.events.ChatMessage;
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.events.ItemContainerChanged; import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.MenuOptionClicked;
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;
@@ -117,6 +119,9 @@ public class ClueScrollPlugin extends Plugin
@Inject @Inject
private ClueScrollWorldOverlay clueScrollWorldOverlay; private ClueScrollWorldOverlay clueScrollWorldOverlay;
private Integer clueItemId;
private boolean clueItemChanged = false;
@Override @Override
public Collection<Overlay> getOverlays() public Collection<Overlay> getOverlays()
{ {
@@ -139,29 +144,31 @@ public class ClueScrollPlugin extends Plugin
resetClue(); resetClue();
} }
@Subscribe
public void onMenuOptionClicked(final MenuOptionClicked event)
{
if (event.getMenuOption() != null && event.getMenuOption().equals("Read"))
{
final ItemComposition itemComposition = itemManager.getItemComposition(event.getId());
if (itemComposition != null && itemComposition.getName().startsWith("Clue scroll"))
{
clueItemId = itemComposition.getId();
clueItemChanged = true;
}
}
}
@Subscribe @Subscribe
public void onItemContainerChanged(final ItemContainerChanged event) public void onItemContainerChanged(final ItemContainerChanged event)
{ {
// Check if item was removed from inventory // Check if item was removed from inventory
if (clue != null && event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY)) if (clue != null && clueItemId != null && event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY))
{ {
final Item[] items = event.getItemContainer().getItems(); final Stream<Item> items = Arrays.stream(event.getItemContainer().getItems());
boolean found = false;
// Clue was maybe removed from inventory, check if there is any clue scrolls left // Check if clue was removed from inventory
for (Item item : items) if (items.noneMatch(item -> itemManager.getItemComposition(item.getId()).getId() == clueItemId))
{
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(); resetClue();
} }
@@ -286,6 +293,12 @@ public class ClueScrollPlugin extends Plugin
private void resetClue() private void resetClue()
{ {
if (!clueItemChanged)
{
clueItemId = null;
}
clueItemChanged = false;
clue = null; clue = null;
client.clearHintArrow(); client.clearHintArrow();
} }
@@ -339,7 +352,16 @@ public class ClueScrollPlugin extends Plugin
return emoteClue; return emoteClue;
} }
return FairyRingClue.forText(text); final FairyRingClue fairyRingClue = FairyRingClue.forText(text);
if (fairyRingClue != null)
{
return fairyRingClue;
}
// We have unknown clue, reset
resetClue();
return null;
} }
} }
@@ -356,6 +378,8 @@ public class ClueScrollPlugin extends Plugin
if (clue != null) if (clue != null)
{ {
clueItemId = item.getId();
clueItemChanged = true;
return clue; return clue;
} }
} }