From d30cbbfa53c32d4656574f73d295f4403576d295 Mon Sep 17 00:00:00 2001 From: Kamiel Date: Sun, 8 Apr 2018 00:51:34 +0200 Subject: [PATCH] Add HiScore lookup to right click menus --- .../net/runelite/api/widgets/WidgetID.java | 2 + .../net/runelite/api/widgets/WidgetInfo.java | 3 + .../client/plugins/hiscore/HiscoreConfig.java | 11 +++ .../client/plugins/hiscore/HiscorePlugin.java | 71 ++++++++++++++++++- 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index d1b3a34b05..6178c117b7 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -32,6 +32,8 @@ public class WidgetID public static final int GRAND_EXCHANGE_INVENTORY_GROUP_ID = 467; public static final int DEPOSIT_BOX_GROUP_ID = 192; public static final int INVENTORY_GROUP_ID = 149; + public static final int FRIENDS_LIST_GROUP_ID = 429; + public static final int RAIDING_PARTY_GROUP_ID = 500; public static final int EQUIPMENT_GROUP_ID = 387; public static final int EQUIPMENT_INVENTORY_GROUP_ID = 85; public static final int EMOTES_GROUP_ID = 216; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index d40c6680b5..b1f4aed8a9 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -29,6 +29,9 @@ public enum WidgetInfo LOGOUT_BUTTON(WidgetID.LOGOUT_PANEL_ID, WidgetID.LogoutPanel.LOGOUT_BUTTON), INVENTORY(WidgetID.INVENTORY_GROUP_ID, 0), + FRIENDS_LIST(WidgetID.FRIENDS_LIST_GROUP_ID, 0), + CLAN_CHAT(WidgetID.CLAN_CHAT_GROUP_ID, 0), + RAIDING_PARTY(WidgetID.RAIDING_PARTY_GROUP_ID, 0), WORLD_MAP(WidgetID.WORLD_MAP_MENU_GROUP_ID, WidgetID.WorldMap.OPTION), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java index dae2fc859e..4fe5a89025 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java @@ -45,4 +45,15 @@ public interface HiscoreConfig extends Config { return true; } + + @ConfigItem( + position = 2, + keyName = "menuOption", + name = "Menu option", + description = "Show Lookup option in menus" + ) + default boolean menuOption() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java index a6bdfd20e2..c4d2c61756 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java @@ -24,22 +24,31 @@ */ package net.runelite.client.plugins.hiscore; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ObjectArrays; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.lang.reflect.InvocationTargetException; import java.util.concurrent.ScheduledExecutorService; +import javax.annotation.Nullable; import javax.imageio.ImageIO; import javax.inject.Inject; import javax.swing.SwingUtilities; +import net.runelite.api.Client; +import net.runelite.api.MenuAction; +import net.runelite.api.MenuEntry; import net.runelite.api.events.ConfigChanged; +import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.PlayerMenuOptionClicked; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.NavigationButton; import net.runelite.client.ui.PluginToolbar; +import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "HiScore", @@ -48,6 +57,13 @@ import net.runelite.client.ui.PluginToolbar; public class HiscorePlugin extends Plugin { private static final String LOOKUP = "Lookup"; + private static final String KICK_OPTION = "Kick"; + private static final ImmutableList BEFORE_OPTIONS = ImmutableList.of("Add friend", "Remove friend", KICK_OPTION); + private static final ImmutableList AFTER_OPTIONS = ImmutableList.of("Message"); + + @Inject + @Nullable + private Client client; @Inject private PluginToolbar pluginToolbar; @@ -116,6 +132,60 @@ public class HiscorePlugin extends Plugin } } + @Subscribe + public void onMenuEntryAdded(MenuEntryAdded event) + { + if (!config.menuOption()) + { + return; + } + + int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); + String option = event.getOption(); + + if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.CLAN_CHAT.getGroupId() || + groupId == WidgetInfo.CHATBOX.getGroupId() && !KICK_OPTION.equals(option) || //prevent from adding for Kick option (interferes with the raiding party one) + groupId == WidgetInfo.RAIDING_PARTY.getGroupId() || groupId == WidgetInfo.PRIVATE_CHAT_MESSAGE.getGroupId()) + { + boolean after; + + if (AFTER_OPTIONS.contains(option)) + { + after = true; + } + else if (BEFORE_OPTIONS.contains(option)) + { + after = false; + } + else + { + return; + } + + final MenuEntry lookup = new MenuEntry(); + lookup.setOption(LOOKUP); + lookup.setTarget(event.getTarget()); + lookup.setType(MenuAction.RUNELITE.getId()); + lookup.setParam0(event.getActionParam0()); + lookup.setParam1(event.getActionParam1()); + + insertMenuEntry(lookup, client.getMenuEntries(), after); + } + } + + private void insertMenuEntry(MenuEntry newEntry, MenuEntry[] entries, boolean after) + { + MenuEntry[] newMenu = ObjectArrays.concat(entries, newEntry); + + if (after) + { + int menuEntryCount = newMenu.length; + ArrayUtils.swap(newMenu, menuEntryCount - 1, menuEntryCount - 2); + } + + client.setMenuEntries(newMenu); + } + @Subscribe public void onLookupMenuClicked(PlayerMenuOptionClicked event) { @@ -142,5 +212,4 @@ public class HiscorePlugin extends Plugin }); } } - }