From f1af8d6383ea3309b9514dcfff954b189c79e45d Mon Sep 17 00:00:00 2001 From: raiyni Date: Fri, 12 Oct 2018 09:16:41 -0500 Subject: [PATCH 1/4] Add clue scroll service --- .../plugins/cluescrolls/ClueScrollPlugin.java | 7 +++ .../cluescrolls/ClueScrollService.java | 38 +++++++++++++++ .../cluescrolls/ClueScrollServiceImpl.java | 48 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollService.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollServiceImpl.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 0843faef3d..89ed66c7d9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.cluescrolls; import com.google.common.eventbus.Subscribe; +import com.google.inject.Binder; import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.time.Duration; @@ -147,6 +148,12 @@ public class ClueScrollPlugin extends Plugin return configManager.getConfig(ClueScrollConfig.class); } + @Override + public void configure(Binder binder) + { + binder.bind(ClueScrollService.class).to(ClueScrollServiceImpl.class); + } + @Override protected void startUp() throws Exception { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollService.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollService.java new file mode 100644 index 0000000000..e84c77808f --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollService.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018, Ron Young + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.client.plugins.cluescrolls; + +import net.runelite.client.plugins.cluescrolls.clues.ClueScroll; + +public interface ClueScrollService +{ + /** + * Get the clue scroll + * + * @return ClueScroll + */ + ClueScroll getClue(); +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollServiceImpl.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollServiceImpl.java new file mode 100644 index 0000000000..3dd2d55a33 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollServiceImpl.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2018, Ron Young + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.client.plugins.cluescrolls; + +import javax.inject.Inject; +import javax.inject.Singleton; +import net.runelite.client.plugins.cluescrolls.clues.ClueScroll; + +@Singleton +class ClueScrollServiceImpl implements ClueScrollService +{ + private final ClueScrollPlugin plugin; + + @Inject + private ClueScrollServiceImpl(ClueScrollPlugin plugin) + { + this.plugin = plugin; + } + + @Override + public ClueScroll getClue() + { + return plugin.getClue(); + } +} From 1d9e8876764ebd3d6a399a28b78a40acc3f401ce Mon Sep 17 00:00:00 2001 From: raiyni Date: Fri, 12 Oct 2018 09:17:48 -0500 Subject: [PATCH 2/4] Hookup clue scroll service dependency --- .../net/runelite/client/plugins/banktags/BankTagsPlugin.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index 6eccc2d955..40ad38a2e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -60,15 +60,18 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.input.MouseManager; import net.runelite.client.input.MouseWheelListener; import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.banktags.tabs.TabInterface; import net.runelite.client.plugins.banktags.tabs.TabSprites; +import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin; @PluginDescriptor( name = "Bank Tags", description = "Enable tagging of bank items and searching of bank tags", tags = {"searching", "tagging"} ) +@PluginDependency(ClueScrollPlugin.class) public class BankTagsPlugin extends Plugin implements MouseWheelListener { public static final Splitter SPLITTER = Splitter.on(",").omitEmptyStrings().trimResults(); From cd5155c4b1053b4250d9618f6d34c1f488934cf7 Mon Sep 17 00:00:00 2001 From: raiyni Date: Fri, 12 Oct 2018 09:18:23 -0500 Subject: [PATCH 3/4] Add fulfilledBy(int itemId) to item requirements --- .../clues/emote/AllRequirementsCollection.java | 14 ++++++++++++++ .../clues/emote/AnyRequirementCollection.java | 14 ++++++++++++++ .../cluescrolls/clues/emote/ItemRequirement.java | 2 ++ .../clues/emote/RangeItemRequirement.java | 6 ++++++ .../clues/emote/SingleItemRequirement.java | 6 ++++++ .../clues/emote/SlotLimitationRequirement.java | 6 ++++++ 6 files changed, 48 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AllRequirementsCollection.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AllRequirementsCollection.java index 73ce1c8bcb..2efe470b84 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AllRequirementsCollection.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AllRequirementsCollection.java @@ -36,6 +36,20 @@ public class AllRequirementsCollection implements ItemRequirement this.requirements = requirements; } + @Override + public boolean fulfilledBy(int itemId) + { + for (ItemRequirement requirement : requirements) + { + if (requirement.fulfilledBy(itemId)) + { + return true; + } + } + + return false; + } + @Override public boolean fulfilledBy(Item[] items) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AnyRequirementCollection.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AnyRequirementCollection.java index b412952767..02a713f7b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AnyRequirementCollection.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/AnyRequirementCollection.java @@ -38,6 +38,20 @@ public class AnyRequirementCollection implements ItemRequirement this.requirements = requirements; } + @Override + public boolean fulfilledBy(int itemId) + { + for (ItemRequirement requirement : requirements) + { + if (requirement.fulfilledBy(itemId)) + { + return true; + } + } + + return false; + } + @Override public boolean fulfilledBy(Item[] items) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/ItemRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/ItemRequirement.java index aebd3aba1b..ba70f45871 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/ItemRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/ItemRequirement.java @@ -29,6 +29,8 @@ import net.runelite.api.Item; public interface ItemRequirement { + boolean fulfilledBy(int itemId); + boolean fulfilledBy(Item[] items); String getCollectiveName(Client client); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/RangeItemRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/RangeItemRequirement.java index 833de8ca74..92d1f14de8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/RangeItemRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/RangeItemRequirement.java @@ -40,6 +40,12 @@ public class RangeItemRequirement implements ItemRequirement this.endItemId = endItemId; } + @Override + public boolean fulfilledBy(int itemId) + { + return itemId >= startItemId && itemId <= endItemId; + } + @Override public boolean fulfilledBy(Item[] items) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SingleItemRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SingleItemRequirement.java index ea164374e5..5c768b38c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SingleItemRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SingleItemRequirement.java @@ -37,6 +37,12 @@ public class SingleItemRequirement implements ItemRequirement this.itemId = itemId; } + @Override + public boolean fulfilledBy(int itemId) + { + return this.itemId == itemId; + } + @Override public boolean fulfilledBy(Item[] items) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SlotLimitationRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SlotLimitationRequirement.java index 36e9183970..1fae03dde5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SlotLimitationRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/emote/SlotLimitationRequirement.java @@ -39,6 +39,12 @@ public class SlotLimitationRequirement implements ItemRequirement this.slots = slots; } + @Override + public boolean fulfilledBy(int itemId) + { + return false; + } + @Override public boolean fulfilledBy(Item[] items) { From 64a661989c48c8e30eaa697fb1ff257865d3b38f Mon Sep 17 00:00:00 2001 From: raiyni Date: Fri, 12 Oct 2018 09:18:49 -0500 Subject: [PATCH 4/4] Add ability to search for current clue required items --- .../client/plugins/banktags/TagManager.java | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java index 1f887e46ba..c26a41b00d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/TagManager.java @@ -32,11 +32,20 @@ import java.util.List; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; +import net.runelite.api.ItemID; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP; import static net.runelite.client.plugins.banktags.BankTagsPlugin.JOINER; import static net.runelite.client.plugins.banktags.BankTagsPlugin.SPLITTER; +import net.runelite.client.plugins.cluescrolls.ClueScrollService; +import net.runelite.client.plugins.cluescrolls.clues.ClueScroll; +import net.runelite.client.plugins.cluescrolls.clues.CoordinateClue; +import net.runelite.client.plugins.cluescrolls.clues.EmoteClue; +import net.runelite.client.plugins.cluescrolls.clues.FairyRingClue; +import net.runelite.client.plugins.cluescrolls.clues.HotColdClue; +import net.runelite.client.plugins.cluescrolls.clues.MapClue; +import net.runelite.client.plugins.cluescrolls.clues.emote.ItemRequirement; import net.runelite.client.util.Text; @Singleton @@ -46,11 +55,14 @@ public class TagManager private final ItemManager itemManager; private final ConfigManager configManager; + private final ClueScrollService clueScrollService; + @Inject - private TagManager(final ItemManager itemManager, final ConfigManager configManager) + private TagManager(final ItemManager itemManager, final ConfigManager configManager, final ClueScrollService clueScrollService) { this.itemManager = itemManager; this.configManager = configManager; + this.clueScrollService = clueScrollService; } String getTagString(int itemId) @@ -108,6 +120,11 @@ public class TagManager boolean findTag(int itemId, String search) { + if (search.equals("clue") && testClue(itemId)) + { + return true; + } + return getTags(itemId).stream().anyMatch(tag -> tag.contains(Text.standardize(search))); } @@ -134,4 +151,39 @@ public class TagManager setTags(itemId, tags); } } + + private boolean testClue(int itemId) + { + ClueScroll c = clueScrollService.getClue(); + + if (c == null) + { + return false; + } + + if (c instanceof EmoteClue) + { + EmoteClue emote = (EmoteClue) c; + + for (ItemRequirement ir : emote.getItemRequirements()) + { + if (ir.fulfilledBy(itemId)) + { + return true; + } + } + } + else if (c instanceof CoordinateClue || c instanceof HotColdClue || c instanceof FairyRingClue) + { + return itemId == ItemID.SPADE; + } + else if (c instanceof MapClue) + { + MapClue mapClue = (MapClue) c; + + return mapClue.getObjectId() == -1 && itemId == ItemID.SPADE; + } + + return false; + } }