diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java index f5b7ac6757..1ef10c50d8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsConfig.java @@ -89,6 +89,17 @@ public interface NpcIndicatorsConfig extends Config @ConfigItem( position = 5, + keyName = "highlightMenuNames", + name = "Highlight menu names", + description = "Highlight NPC names in right click menu" + ) + default boolean highlightMenuNames() + { + return false; + } + + @ConfigItem( + position = 6, keyName = "showRespawnTimer", name = "Show respawn timer", description = "Show respawn timer of tagged NPCs") 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 7e84798d2a..183272586d 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 @@ -26,7 +26,7 @@ package net.runelite.client.plugins.npchighlight; import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; import java.time.Instant; import java.util.ArrayList; @@ -47,6 +47,7 @@ import net.runelite.api.GameState; import net.runelite.api.GraphicID; import net.runelite.api.GraphicsObject; import net.runelite.api.MenuAction; +import static net.runelite.api.MenuAction.MENU_ACTION_DEPRIORITIZE_OFFSET; import net.runelite.api.MenuEntry; import net.runelite.api.NPC; import net.runelite.api.coords.WorldPoint; @@ -66,6 +67,7 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.client.util.ColorUtil; import net.runelite.client.util.Text; import net.runelite.client.util.WildcardMatcher; @@ -82,7 +84,7 @@ public class NpcIndicatorsPlugin extends Plugin // Option added to NPC menu private static final String TAG = "Tag"; - private static final List NPC_MENU_ACTIONS = ImmutableList.of(MenuAction.NPC_FIRST_OPTION, MenuAction.NPC_SECOND_OPTION, + private static final Set NPC_MENU_ACTIONS = ImmutableSet.of(MenuAction.NPC_FIRST_OPTION, MenuAction.NPC_SECOND_OPTION, MenuAction.NPC_THIRD_OPTION, MenuAction.NPC_FOURTH_OPTION, MenuAction.NPC_FIFTH_OPTION); @Inject @@ -248,21 +250,37 @@ public class NpcIndicatorsPlugin extends Plugin @Subscribe public void onMenuEntryAdded(MenuEntryAdded event) { - if (!hotKeyPressed || event.getType() != MenuAction.EXAMINE_NPC.getId()) + int type = event.getType(); + + if (type >= MENU_ACTION_DEPRIORITIZE_OFFSET) { - return; + type -= MENU_ACTION_DEPRIORITIZE_OFFSET; } - MenuEntry[] menuEntries = client.getMenuEntries(); - menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1); - MenuEntry menuEntry = menuEntries[menuEntries.length - 1] = new MenuEntry(); - menuEntry.setOption(TAG); - menuEntry.setTarget(event.getTarget()); - menuEntry.setParam0(event.getActionParam0()); - menuEntry.setParam1(event.getActionParam1()); - menuEntry.setIdentifier(event.getIdentifier()); - menuEntry.setType(MenuAction.RUNELITE.getId()); - client.setMenuEntries(menuEntries); + if (config.highlightMenuNames() && + NPC_MENU_ACTIONS.contains(MenuAction.of(type)) && + highlightedNpcs.stream().anyMatch(npc -> npc.getIndex() == event.getIdentifier())) + { + MenuEntry[] menuEntries = client.getMenuEntries(); + final MenuEntry menuEntry = menuEntries[menuEntries.length - 1]; + final String target = ColorUtil.prependColorTag(Text.removeTags(event.getTarget()), config.getHighlightColor()); + menuEntry.setTarget(target); + client.setMenuEntries(menuEntries); + } + else if (hotKeyPressed && type == MenuAction.EXAMINE_NPC.getId()) + { + // Add tag option + MenuEntry[] menuEntries = client.getMenuEntries(); + menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1); + final MenuEntry tagEntry = menuEntries[menuEntries.length - 1] = new MenuEntry(); + tagEntry.setOption(TAG); + tagEntry.setTarget(event.getTarget()); + tagEntry.setParam0(event.getActionParam0()); + tagEntry.setParam1(event.getActionParam1()); + tagEntry.setIdentifier(event.getIdentifier()); + tagEntry.setType(MenuAction.RUNELITE.getId()); + client.setMenuEntries(menuEntries); + } } @Subscribe