bank tags: allow plugins to register their own tag names

This also moves the clue tab logic into the clue plugin and inverts the bank tags -> clue plugin dependency
This commit is contained in:
Adam
2021-02-03 12:49:34 -05:00
parent 8c5354b510
commit 1ae0770705
4 changed files with 89 additions and 49 deletions

View File

@@ -0,0 +1,31 @@
/*
* Copyright (c) 2021, Adam <Adam@sigterm.info>
* 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 HOLDER 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.banktags;
public interface BankTag
{
boolean contains(int itemId);
}

View File

@@ -75,13 +75,11 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager;
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 static net.runelite.client.plugins.banktags.tabs.TabInterface.FILTERED_CHARS;
import net.runelite.client.plugins.banktags.tabs.TabSprites;
import net.runelite.client.plugins.banktags.tabs.TagTab;
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
import net.runelite.client.util.Text;
@PluginDescriptor(
@@ -89,7 +87,6 @@ import net.runelite.client.util.Text;
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 String CONFIG_GROUP = "banktags";

View File

@@ -27,24 +27,17 @@ package net.runelite.client.plugins.banktags;
import com.google.common.base.Strings;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
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 net.runelite.client.game.ItemVariationMapping;
import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP;
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.item.ItemRequirement;
import net.runelite.client.util.Text;
@Singleton
@@ -53,17 +46,15 @@ public class TagManager
static final String ITEM_KEY_PREFIX = "item_";
private final ConfigManager configManager;
private final ItemManager itemManager;
private final ClueScrollService clueScrollService;
private final Map<String, BankTag> customTags = new HashMap<>();
@Inject
private TagManager(
final ItemManager itemManager,
final ConfigManager configManager,
final ClueScrollService clueScrollService)
final ConfigManager configManager)
{
this.itemManager = itemManager;
this.configManager = configManager;
this.clueScrollService = clueScrollService;
}
String getTagString(int itemId, boolean variation)
@@ -123,9 +114,10 @@ public class TagManager
boolean findTag(int itemId, String search)
{
if (search.equals("clue") && testClue(itemId))
BankTag bankTag = customTags.get(search);
if (bankTag != null)
{
return true;
return bankTag.contains(itemId);
}
Collection<String> tags = getTags(itemId, false);
@@ -194,38 +186,13 @@ public class TagManager
return itemId;
}
private boolean testClue(int itemId)
public void registerTag(String name, BankTag tag)
{
ClueScroll c = clueScrollService.getClue();
customTags.put(name, tag);
}
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;
public void unregisterTag(String name)
{
customTags.remove(name);
}
}

View File

@@ -96,7 +96,10 @@ import net.runelite.client.events.ConfigChanged;
import net.runelite.client.events.OverlayMenuClicked;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDependency;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.banktags.BankTagsPlugin;
import net.runelite.client.plugins.banktags.TagManager;
import net.runelite.client.plugins.cluescrolls.clues.AnagramClue;
import net.runelite.client.plugins.cluescrolls.clues.BeginnerMapClue;
import net.runelite.client.plugins.cluescrolls.clues.CipherClue;
@@ -117,6 +120,7 @@ import net.runelite.client.plugins.cluescrolls.clues.ObjectClueScroll;
import net.runelite.client.plugins.cluescrolls.clues.SkillChallengeClue;
import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll;
import net.runelite.client.plugins.cluescrolls.clues.ThreeStepCrypticClue;
import net.runelite.client.plugins.cluescrolls.clues.item.ItemRequirement;
import net.runelite.client.ui.overlay.OverlayManager;
import net.runelite.client.ui.overlay.OverlayMenuEntry;
import net.runelite.client.ui.overlay.OverlayUtil;
@@ -131,6 +135,7 @@ import org.apache.commons.lang3.ArrayUtils;
description = "Show answers to clue scroll riddles, anagrams, ciphers, and cryptic clues",
tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"}
)
@PluginDependency(BankTagsPlugin.class)
@Slf4j
public class ClueScrollPlugin extends Plugin
{
@@ -144,6 +149,7 @@ public class ClueScrollPlugin extends Plugin
13150, 9011,
13151, 9012
};
private static final String CLUE_TAG_NAME = "clue";
@Getter
private ClueScroll clue;
@@ -191,6 +197,9 @@ public class ClueScrollPlugin extends Plugin
@Inject
private WorldMapPointManager worldMapPointManager;
@Inject
private TagManager tagManager;
@Inject
@Named("developerMode")
boolean developerMode;
@@ -227,11 +236,13 @@ public class ClueScrollPlugin extends Plugin
overlayManager.add(clueScrollEmoteOverlay);
overlayManager.add(clueScrollWorldOverlay);
overlayManager.add(clueScrollMusicOverlay);
tagManager.registerTag(CLUE_TAG_NAME, this::testClueTag);
}
@Override
protected void shutDown() throws Exception
{
tagManager.unregisterTag(CLUE_TAG_NAME);
overlayManager.remove(clueScrollOverlay);
overlayManager.remove(clueScrollEmoteOverlay);
overlayManager.remove(clueScrollWorldOverlay);
@@ -1109,4 +1120,38 @@ public class ClueScrollPlugin extends Plugin
}
return worldPoint;
}
private boolean testClueTag(int itemId)
{
ClueScroll c = clue;
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;
}
}