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:
@@ -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);
|
||||||
|
}
|
||||||
@@ -75,13 +75,11 @@ import net.runelite.client.game.chatbox.ChatboxPanelManager;
|
|||||||
import net.runelite.client.input.MouseManager;
|
import net.runelite.client.input.MouseManager;
|
||||||
import net.runelite.client.input.MouseWheelListener;
|
import net.runelite.client.input.MouseWheelListener;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDependency;
|
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.plugins.banktags.tabs.TabInterface;
|
import net.runelite.client.plugins.banktags.tabs.TabInterface;
|
||||||
import static net.runelite.client.plugins.banktags.tabs.TabInterface.FILTERED_CHARS;
|
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.TabSprites;
|
||||||
import net.runelite.client.plugins.banktags.tabs.TagTab;
|
import net.runelite.client.plugins.banktags.tabs.TagTab;
|
||||||
import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
|
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
|
|
||||||
@PluginDescriptor(
|
@PluginDescriptor(
|
||||||
@@ -89,7 +87,6 @@ import net.runelite.client.util.Text;
|
|||||||
description = "Enable tagging of bank items and searching of bank tags",
|
description = "Enable tagging of bank items and searching of bank tags",
|
||||||
tags = {"searching", "tagging"}
|
tags = {"searching", "tagging"}
|
||||||
)
|
)
|
||||||
@PluginDependency(ClueScrollPlugin.class)
|
|
||||||
public class BankTagsPlugin extends Plugin implements MouseWheelListener
|
public class BankTagsPlugin extends Plugin implements MouseWheelListener
|
||||||
{
|
{
|
||||||
public static final String CONFIG_GROUP = "banktags";
|
public static final String CONFIG_GROUP = "banktags";
|
||||||
|
|||||||
@@ -27,24 +27,17 @@ package net.runelite.client.plugins.banktags;
|
|||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import net.runelite.api.ItemID;
|
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.game.ItemVariationMapping;
|
import net.runelite.client.game.ItemVariationMapping;
|
||||||
import static net.runelite.client.plugins.banktags.BankTagsPlugin.CONFIG_GROUP;
|
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;
|
import net.runelite.client.util.Text;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -53,17 +46,15 @@ public class TagManager
|
|||||||
static final String ITEM_KEY_PREFIX = "item_";
|
static final String ITEM_KEY_PREFIX = "item_";
|
||||||
private final ConfigManager configManager;
|
private final ConfigManager configManager;
|
||||||
private final ItemManager itemManager;
|
private final ItemManager itemManager;
|
||||||
private final ClueScrollService clueScrollService;
|
private final Map<String, BankTag> customTags = new HashMap<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private TagManager(
|
private TagManager(
|
||||||
final ItemManager itemManager,
|
final ItemManager itemManager,
|
||||||
final ConfigManager configManager,
|
final ConfigManager configManager)
|
||||||
final ClueScrollService clueScrollService)
|
|
||||||
{
|
{
|
||||||
this.itemManager = itemManager;
|
this.itemManager = itemManager;
|
||||||
this.configManager = configManager;
|
this.configManager = configManager;
|
||||||
this.clueScrollService = clueScrollService;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String getTagString(int itemId, boolean variation)
|
String getTagString(int itemId, boolean variation)
|
||||||
@@ -123,9 +114,10 @@ public class TagManager
|
|||||||
|
|
||||||
boolean findTag(int itemId, String search)
|
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);
|
Collection<String> tags = getTags(itemId, false);
|
||||||
@@ -194,38 +186,13 @@ public class TagManager
|
|||||||
return itemId;
|
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)
|
public void unregisterTag(String name)
|
||||||
{
|
{
|
||||||
return false;
|
customTags.remove(name);
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,10 @@ import net.runelite.client.events.ConfigChanged;
|
|||||||
import net.runelite.client.events.OverlayMenuClicked;
|
import net.runelite.client.events.OverlayMenuClicked;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
|
import net.runelite.client.plugins.PluginDependency;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
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.AnagramClue;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.BeginnerMapClue;
|
import net.runelite.client.plugins.cluescrolls.clues.BeginnerMapClue;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.CipherClue;
|
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.SkillChallengeClue;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll;
|
import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll;
|
||||||
import net.runelite.client.plugins.cluescrolls.clues.ThreeStepCrypticClue;
|
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.OverlayManager;
|
||||||
import net.runelite.client.ui.overlay.OverlayMenuEntry;
|
import net.runelite.client.ui.overlay.OverlayMenuEntry;
|
||||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
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",
|
description = "Show answers to clue scroll riddles, anagrams, ciphers, and cryptic clues",
|
||||||
tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"}
|
tags = {"arrow", "hints", "world", "map", "coordinates", "emotes"}
|
||||||
)
|
)
|
||||||
|
@PluginDependency(BankTagsPlugin.class)
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ClueScrollPlugin extends Plugin
|
public class ClueScrollPlugin extends Plugin
|
||||||
{
|
{
|
||||||
@@ -144,6 +149,7 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
13150, 9011,
|
13150, 9011,
|
||||||
13151, 9012
|
13151, 9012
|
||||||
};
|
};
|
||||||
|
private static final String CLUE_TAG_NAME = "clue";
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private ClueScroll clue;
|
private ClueScroll clue;
|
||||||
@@ -191,6 +197,9 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private WorldMapPointManager worldMapPointManager;
|
private WorldMapPointManager worldMapPointManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private TagManager tagManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named("developerMode")
|
@Named("developerMode")
|
||||||
boolean developerMode;
|
boolean developerMode;
|
||||||
@@ -227,11 +236,13 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
overlayManager.add(clueScrollEmoteOverlay);
|
overlayManager.add(clueScrollEmoteOverlay);
|
||||||
overlayManager.add(clueScrollWorldOverlay);
|
overlayManager.add(clueScrollWorldOverlay);
|
||||||
overlayManager.add(clueScrollMusicOverlay);
|
overlayManager.add(clueScrollMusicOverlay);
|
||||||
|
tagManager.registerTag(CLUE_TAG_NAME, this::testClueTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void shutDown() throws Exception
|
protected void shutDown() throws Exception
|
||||||
{
|
{
|
||||||
|
tagManager.unregisterTag(CLUE_TAG_NAME);
|
||||||
overlayManager.remove(clueScrollOverlay);
|
overlayManager.remove(clueScrollOverlay);
|
||||||
overlayManager.remove(clueScrollEmoteOverlay);
|
overlayManager.remove(clueScrollEmoteOverlay);
|
||||||
overlayManager.remove(clueScrollWorldOverlay);
|
overlayManager.remove(clueScrollWorldOverlay);
|
||||||
@@ -1109,4 +1120,38 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
return worldPoint;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user