From c7b444d8926e994a9f2c32b80e69a0d3b227136e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 7 Aug 2021 15:18:45 -0400 Subject: [PATCH] slayer plugin: use npchiglight for task highlights --- .../npchighlight/NpcIndicatorsPlugin.java | 62 ++++++++++- .../npchighlight/NpcIndicatorsService.java | 35 ++++++ .../client/plugins/slayer/SlayerConfig.java | 14 --- .../client/plugins/slayer/SlayerPlugin.java | 105 +++++++++++------- .../plugins/slayer/TargetClickboxOverlay.java | 85 -------------- .../plugins/slayer/TargetMinimapOverlay.java | 80 ------------- .../plugins/slayer/TargetWeaknessOverlay.java | 2 +- .../client/plugins/PluginManagerTest.java | 35 +++--- .../npchighlight/NpcIndicatorsPluginTest.java | 8 +- .../plugins/slayer/SlayerPluginTest.java | 13 ++- 10 files changed, 193 insertions(+), 246 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsService.java delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetMinimapOverlay.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index a68a76d184..de84c15666 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.npchighlight; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; +import com.google.inject.Binder; import com.google.inject.Provides; import java.awt.Color; import java.time.Instant; @@ -38,6 +39,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; @@ -77,7 +79,7 @@ import net.runelite.client.util.WildcardMatcher; tags = {"highlight", "minimap", "npcs", "overlay", "respawn", "tags"} ) @Slf4j -public class NpcIndicatorsPlugin extends Plugin +public class NpcIndicatorsPlugin extends Plugin implements NpcIndicatorsService { private static final int MAX_ACTOR_VIEW_RANGE = 15; @@ -173,12 +175,20 @@ public class NpcIndicatorsPlugin extends Plugin */ private boolean skipNextSpawnCheck = false; + private final List> higlightPredicates = new ArrayList<>(); + @Provides NpcIndicatorsConfig provideConfig(ConfigManager configManager) { return configManager.getConfig(NpcIndicatorsConfig.class); } + @Override + public void configure(Binder binder) + { + binder.bind(NpcIndicatorsService.class).toInstance(this); + } + @Override protected void startUp() throws Exception { @@ -187,7 +197,7 @@ public class NpcIndicatorsPlugin extends Plugin clientThread.invoke(() -> { skipNextSpawnCheck = true; - rebuildAllNpcs(); + rebuild(); }); } @@ -230,7 +240,7 @@ public class NpcIndicatorsPlugin extends Plugin return; } - clientThread.invoke(this::rebuildAllNpcs); + clientThread.invoke(this::rebuild); } @Subscribe @@ -394,7 +404,23 @@ public class NpcIndicatorsPlugin extends Plugin memorizeNpc(npc); spawnedNpcsThisTick.add(npc); } + return; } + + for (Predicate predicate : higlightPredicates) + { + if (predicate.test(npc)) + { + highlightedNpcs.add(npc); + if (!client.isInInstancedRegion()) + { + memorizeNpc(npc); + spawnedNpcsThisTick.add(npc); + } + return; + } + } + } @Subscribe @@ -534,8 +560,8 @@ public class NpcIndicatorsPlugin extends Plugin return Text.fromCSV(configNpcs); } - @VisibleForTesting - void rebuildAllNpcs() + @Override + public void rebuild() { highlights = getHighlights(); highlightedNpcs.clear(); @@ -548,6 +574,7 @@ public class NpcIndicatorsPlugin extends Plugin return; } + outer: for (NPC npc : client.getNpcs()) { final String npcName = npc.getName(); @@ -573,6 +600,19 @@ public class NpcIndicatorsPlugin extends Plugin continue; } + for (Predicate predicate : higlightPredicates) + { + if (predicate.test(npc)) + { + if (!client.isInInstancedRegion()) + { + memorizeNpc(npc); + } + highlightedNpcs.add(npc); + continue outer; + } + } + // NPC is not highlighted memorizedNpcs.remove(npc.getIndex()); } @@ -680,4 +720,16 @@ public class NpcIndicatorsPlugin extends Plugin despawnedNpcsThisTick.clear(); teleportGraphicsObjectSpawnedThisTick.clear(); } + + @Override + public void registerHighlighter(Predicate p) + { + higlightPredicates.add(p); + } + + @Override + public void unregisterHighlighter(Predicate p) + { + higlightPredicates.remove(p); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsService.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsService.java new file mode 100644 index 0000000000..43a3b91694 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsService.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021, Adam + * 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.npchighlight; + +import java.util.function.Predicate; +import net.runelite.api.NPC; + +public interface NpcIndicatorsService +{ + void registerHighlighter(Predicate p); + void unregisterHighlighter(Predicate p); + void rebuild(); +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java index d16f96fa58..258ea51b17 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerConfig.java @@ -25,8 +25,6 @@ */ package net.runelite.client.plugins.slayer; -import java.awt.Color; -import net.runelite.client.config.Alpha; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; @@ -101,18 +99,6 @@ public interface SlayerConfig extends Config return false; } - @Alpha - @ConfigItem( - position = 6, - keyName = "targetColor", - name = "Target Color", - description = "Color of the highlighted targets" - ) - default Color getTargetColor() - { - return Color.RED; - } - @ConfigItem( position = 7, keyName = "weaknessPrompt", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 8cc18aa550..729debeb25 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -39,9 +39,11 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; +import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; +import javax.inject.Named; import joptsimple.internal.Strings; import lombok.AccessLevel; import lombok.Getter; @@ -60,6 +62,7 @@ import static net.runelite.api.Skill.SLAYER; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ActorDeath; import net.runelite.api.events.ChatMessage; +import net.runelite.api.events.CommandExecuted; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.HitsplatApplied; @@ -81,18 +84,23 @@ import net.runelite.client.events.ChatInput; import net.runelite.client.events.ConfigChanged; 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.npchighlight.NpcIndicatorsPlugin; +import net.runelite.client.plugins.npchighlight.NpcIndicatorsService; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.ColorUtil; import net.runelite.client.util.Text; import net.runelite.http.api.chat.ChatClient; +import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "Slayer", description = "Show additional slayer task related information", tags = {"combat", "notifications", "overlay", "tasks"} ) +@PluginDependency(NpcIndicatorsPlugin.class) @Slf4j public class SlayerPlugin extends Plugin { @@ -151,15 +159,9 @@ public class SlayerPlugin extends Plugin @Inject private ClientThread clientThread; - @Inject - private TargetClickboxOverlay targetClickboxOverlay; - @Inject private TargetWeaknessOverlay targetWeaknessOverlay; - @Inject - private TargetMinimapOverlay targetMinimapOverlay; - @Inject private ChatMessageManager chatMessageManager; @@ -172,8 +174,15 @@ public class SlayerPlugin extends Plugin @Inject private ChatClient chatClient; + @Inject + private NpcIndicatorsService npcIndicatorsService; + @Getter(AccessLevel.PACKAGE) - private List highlightedTargets = new ArrayList<>(); + private final List targets = new ArrayList<>(); + + @Inject + @Named("developerMode") + boolean developerMode; private final Set taggedNpcs = new HashSet<>(); private int taggedNpcsDiedPrevTick; @@ -201,13 +210,16 @@ public class SlayerPlugin extends Plugin private boolean loginFlag; private final List targetNames = new ArrayList<>(); + public final Predicate isTarget = (n) -> config.highlightTargets() && targets.contains(n); + @Override protected void startUp() throws Exception { + chatCommandManager.registerCommandAsync(TASK_COMMAND_STRING, this::taskLookup, this::taskSubmit); + npcIndicatorsService.registerHighlighter(isTarget); + overlayManager.add(overlay); - overlayManager.add(targetClickboxOverlay); overlayManager.add(targetWeaknessOverlay); - overlayManager.add(targetMinimapOverlay); if (client.getGameState() == GameState.LOGGED_IN) { @@ -224,23 +236,21 @@ public class SlayerPlugin extends Plugin getStringProfileConfig(SlayerConfig.TASK_LOC_KEY), false)); } } - - chatCommandManager.registerCommandAsync(TASK_COMMAND_STRING, this::taskLookup, this::taskSubmit); } @Override protected void shutDown() throws Exception { + chatCommandManager.unregisterCommand(TASK_COMMAND_STRING); + npcIndicatorsService.unregisterHighlighter(isTarget); + npcIndicatorsService.rebuild(); + overlayManager.remove(overlay); - overlayManager.remove(targetClickboxOverlay); overlayManager.remove(targetWeaknessOverlay); - overlayManager.remove(targetMinimapOverlay); removeCounter(); - highlightedTargets.clear(); + targets.clear(); taggedNpcs.clear(); cachedXp = -1; - - chatCommandManager.unregisterCommand(TASK_COMMAND_STRING); } @Provides @@ -260,7 +270,7 @@ public class SlayerPlugin extends Plugin taskName = ""; amount = 0; loginFlag = true; - highlightedTargets.clear(); + targets.clear(); taggedNpcs.clear(); break; case LOGGED_IN: @@ -279,6 +289,16 @@ public class SlayerPlugin extends Plugin } } + @Subscribe + public void onCommandExecuted(CommandExecuted commandExecuted) + { + if (developerMode && commandExecuted.getCommand().equals("task")) + { + setTask(commandExecuted.getArguments()[0], 42, 42); + log.debug("Set task to {}", commandExecuted.getArguments()[0]); + } + } + @VisibleForTesting int getIntProfileConfig(String key) { @@ -313,13 +333,16 @@ public class SlayerPlugin extends Plugin setProfileConfig(SlayerConfig.TASK_LOC_KEY, taskLocation); } - @Subscribe + @Subscribe( + // Run prior to npc indicators plugin so targets is populated before the isTarget predicate is checked + priority = 1 + ) public void onNpcSpawned(NpcSpawned npcSpawned) { NPC npc = npcSpawned.getNpc(); if (isTarget(npc)) { - highlightedTargets.add(npc); + targets.add(npc); } } @@ -328,7 +351,7 @@ public class SlayerPlugin extends Plugin { NPC npc = npcDespawned.getNpc(); taggedNpcs.remove(npc); - highlightedTargets.remove(npc); + targets.remove(npc); } @Subscribe @@ -541,7 +564,7 @@ public class SlayerPlugin extends Plugin { Actor actor = hitsplatApplied.getActor(); Hitsplat hitsplat = hitsplatApplied.getHitsplat(); - if (hitsplat.getHitsplatType() == Hitsplat.HitsplatType.DAMAGE_ME && highlightedTargets.contains(actor)) + if (hitsplat.getHitsplatType() == Hitsplat.HitsplatType.DAMAGE_ME && targets.contains(actor)) { // If the actor is in highlightedTargets it must be an NPC and also a task assignment taggedNpcs.add((NPC) actor); @@ -562,18 +585,25 @@ public class SlayerPlugin extends Plugin @Subscribe private void onConfigChanged(ConfigChanged event) { - if (!event.getGroup().equals(SlayerConfig.GROUP_NAME) || !event.getKey().equals("infobox")) + if (!event.getGroup().equals(SlayerConfig.GROUP_NAME)) { return; } - if (config.showInfobox()) + if (event.getKey().equals("infobox")) { - clientThread.invoke(this::addCounter); + if (config.showInfobox()) + { + clientThread.invoke(this::addCounter); + } + else + { + removeCounter(); + } } else { - removeCounter(); + npcIndicatorsService.rebuild(); } } @@ -619,27 +649,25 @@ public class SlayerPlugin extends Plugin return false; } - String name = npc.getName(); - if (name == null) + final NPCComposition composition = npc.getTransformedComposition(); + if (composition == null) { return false; } - name = name.toLowerCase(); + final String name = composition.getName() + .replace('\u00A0', ' ') + .toLowerCase(); for (String target : targetNames) { if (name.contains(target)) { - NPCComposition composition = npc.getTransformedComposition(); - - if (composition != null) + if (ArrayUtils.contains(composition.getActions(), "Attack") + // Pick action is for zygomite-fungi + || ArrayUtils.contains(composition.getActions(), "Pick")) { - List actions = Arrays.asList(composition.getActions()); - if (actions.contains("Attack") || actions.contains("Pick")) //Pick action is for zygomite-fungi - { - return true; - } + return true; } } } @@ -662,13 +690,13 @@ public class SlayerPlugin extends Plugin private void rebuildTargetList() { - highlightedTargets.clear(); + targets.clear(); for (NPC npc : client.getNpcs()) { if (isTarget(npc)) { - highlightedTargets.add(npc); + targets.add(npc); } } } @@ -701,6 +729,7 @@ public class SlayerPlugin extends Plugin Task task = Task.getTask(name); rebuildTargetNames(task); rebuildTargetList(); + npcIndicatorsService.rebuild(); } private void addCounter() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java deleted file mode 100644 index 441f1c6d85..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2018, James Swindle - * Copyright (c) 2018, Adam - * Copyright (c) 2018, Shaun Dreclin - * 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.slayer; - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.Shape; -import java.util.List; -import javax.inject.Inject; -import net.runelite.api.NPC; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayLayer; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.util.ColorUtil; - -public class TargetClickboxOverlay extends Overlay -{ - private final SlayerConfig config; - private final SlayerPlugin plugin; - - @Inject - TargetClickboxOverlay(SlayerConfig config, SlayerPlugin plugin) - { - this.config = config; - this.plugin = plugin; - setPosition(OverlayPosition.DYNAMIC); - setLayer(OverlayLayer.ABOVE_SCENE); - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (!config.highlightTargets()) - { - return null; - } - - List targets = plugin.getHighlightedTargets(); - for (NPC target : targets) - { - renderTargetOverlay(graphics, target, config.getTargetColor()); - } - - return null; - } - - private void renderTargetOverlay(Graphics2D graphics, NPC actor, Color color) - { - Shape objectClickbox = actor.getConvexHull(); - if (objectClickbox != null) - { - graphics.setColor(color); - graphics.setStroke(new BasicStroke(2)); - graphics.draw(objectClickbox); - graphics.setColor(ColorUtil.colorWithAlpha(color, color.getAlpha() / 12)); - graphics.fill(objectClickbox); - } - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetMinimapOverlay.java deleted file mode 100644 index ea12fde38a..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetMinimapOverlay.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2018, James Swindle - * Copyright (c) 2018, Adam - * Copyright (c) 2018, Shaun Dreclin - * 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.slayer; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.util.List; -import javax.inject.Inject; -import net.runelite.api.NPC; -import net.runelite.api.Point; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayLayer; -import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayUtil; - -public class TargetMinimapOverlay extends Overlay -{ - private final SlayerConfig config; - private final SlayerPlugin plugin; - - @Inject - TargetMinimapOverlay(SlayerConfig config, SlayerPlugin plugin) - { - this.config = config; - this.plugin = plugin; - setPosition(OverlayPosition.DYNAMIC); - setLayer(OverlayLayer.ABOVE_WIDGETS); - } - - @Override - public Dimension render(Graphics2D graphics) - { - if (!config.highlightTargets()) - { - return null; - } - - List targets = plugin.getHighlightedTargets(); - for (NPC target : targets) - { - renderTargetOverlay(graphics, target, config.getTargetColor()); - } - - return null; - } - - private void renderTargetOverlay(Graphics2D graphics, NPC actor, Color color) - { - Point minimapLocation = actor.getMinimapLocation(); - if (minimapLocation != null) - { - OverlayUtil.renderMinimapLocation(graphics, minimapLocation, color); - } - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetWeaknessOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetWeaknessOverlay.java index 91f331d06b..cc20cab485 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetWeaknessOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetWeaknessOverlay.java @@ -64,7 +64,7 @@ class TargetWeaknessOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - final List targets = plugin.getHighlightedTargets(); + final List targets = plugin.getTargets(); if (targets.isEmpty() || !config.weaknessPrompt()) { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java index 02b679e496..50692a915a 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java @@ -28,7 +28,6 @@ import com.google.common.reflect.ClassPath; import com.google.common.reflect.ClassPath.ClassInfo; import com.google.inject.Guice; import com.google.inject.Injector; -import com.google.inject.Module; import com.google.inject.grapher.graphviz.GraphvizGrapher; import com.google.inject.grapher.graphviz.GraphvizModule; import com.google.inject.testing.fieldbinder.Bind; @@ -39,10 +38,8 @@ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.Objects; import java.util.Set; import net.runelite.api.Client; @@ -153,24 +150,28 @@ public class PluginManagerTest @Test public void dumpGraph() throws Exception { - List modules = new ArrayList<>(); - modules.add(new GraphvizModule()); - modules.add(new RuneLiteModule(mock(OkHttpClient.class), () -> null, true, false, - RuneLite.DEFAULT_SESSION_FILE, - RuneLite.DEFAULT_CONFIG_FILE)); - PluginManager pluginManager = new PluginManager(true, false, null, null, null, null); pluginManager.loadCorePlugins(); - modules.addAll(pluginManager.getPlugins()); - File file = folder.newFile(); - try (PrintWriter out = new PrintWriter(file, "UTF-8")) + Injector graphvizInjector = Guice.createInjector(new GraphvizModule()); + GraphvizGrapher graphvizGrapher = graphvizInjector.getInstance(GraphvizGrapher.class); + + File dotFolder = folder.newFolder(); + try (PrintWriter out = new PrintWriter(new File(dotFolder, "runelite.dot"), "UTF-8")) { - Injector injector = Guice.createInjector(modules); - GraphvizGrapher grapher = injector.getInstance(GraphvizGrapher.class); - grapher.setOut(out); - grapher.setRankdir("TB"); - grapher.graph(injector); + graphvizGrapher.setOut(out); + graphvizGrapher.setRankdir("TB"); + graphvizGrapher.graph(RuneLite.getInjector()); + } + + for (Plugin p : pluginManager.getPlugins()) + { + try (PrintWriter out = new PrintWriter(new File(dotFolder, p.getName() + ".dot"), "UTF-8")) + { + graphvizGrapher.setOut(out); + graphvizGrapher.setRankdir("TB"); + graphvizGrapher.graph(p.getInjector()); + } } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java index cb81a836d2..9ccbcf3423 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java @@ -99,7 +99,7 @@ public class NpcIndicatorsPluginTest when(npcIndicatorsConfig.getNpcToHighlight()).thenReturn("goblin"); when(npcIndicatorsConfig.deadNpcMenuColor()).thenReturn(Color.RED); - npcIndicatorsPlugin.rebuildAllNpcs(); + npcIndicatorsPlugin.rebuild(); NPC npc = mock(NPC.class); when(npc.getName()).thenReturn("Goblin"); @@ -124,7 +124,7 @@ public class NpcIndicatorsPluginTest when(npcIndicatorsConfig.highlightMenuNames()).thenReturn(true); when(npcIndicatorsConfig.getHighlightColor()).thenReturn(Color.BLUE); - npcIndicatorsPlugin.rebuildAllNpcs(); + npcIndicatorsPlugin.rebuild(); NPC npc = mock(NPC.class); when(npc.getName()).thenReturn("Goblin"); @@ -146,7 +146,7 @@ public class NpcIndicatorsPluginTest { when(npcIndicatorsConfig.getNpcToHighlight()).thenReturn("Joseph"); - npcIndicatorsPlugin.rebuildAllNpcs(); + npcIndicatorsPlugin.rebuild(); NPC npc = mock(NPC.class); when(npc.getName()).thenReturn("Joseph"); @@ -165,7 +165,7 @@ public class NpcIndicatorsPluginTest { when(npcIndicatorsConfig.getNpcToHighlight()).thenReturn("Werewolf"); - npcIndicatorsPlugin.rebuildAllNpcs(); + npcIndicatorsPlugin.rebuild(); NPC npc = mock(NPC.class); when(npc.getName()).thenReturn("Joseph"); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index 6785721349..d28aefd7c2 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; +import javax.inject.Named; import net.runelite.api.ChatMessageType; import static net.runelite.api.ChatMessageType.GAMEMESSAGE; import net.runelite.api.Client; @@ -55,6 +56,7 @@ import net.runelite.client.chat.ChatCommandManager; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; +import net.runelite.client.plugins.npchighlight.NpcIndicatorsService; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.http.api.chat.ChatClient; @@ -168,6 +170,14 @@ public class SlayerPluginTest @Bind ChatClient chatClient; + @Bind + @Named("developerMode") + boolean developerMode; + + @Mock + @Bind + NpcIndicatorsService npcIndicatorsService; + @Inject SlayerPlugin slayerPlugin; @@ -871,14 +881,13 @@ public class SlayerPluginTest slayerPlugin.onStatChanged(statChanged); NPCComposition npcComposition = mock(NPCComposition.class); + when(npcComposition.getName()).thenReturn("Suqah"); when(npcComposition.getActions()).thenReturn(new String[]{"Attack"}); NPC npc1 = mock(NPC.class); - when(npc1.getName()).thenReturn("Suqah"); when(npc1.getTransformedComposition()).thenReturn(npcComposition); NPC npc2 = mock(NPC.class); - when(npc2.getName()).thenReturn("Suqah"); when(npc2.getTransformedComposition()).thenReturn(npcComposition); when(client.getNpcs()).thenReturn(Arrays.asList(npc1, npc2));