Add HiScore lookup to right click menus

This commit is contained in:
Kamiel
2018-04-08 00:51:34 +02:00
committed by Adam
parent acf3233d4a
commit d30cbbfa53
4 changed files with 86 additions and 1 deletions

View File

@@ -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;

View File

@@ -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),

View File

@@ -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;
}
}

View File

@@ -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<String> BEFORE_OPTIONS = ImmutableList.of("Add friend", "Remove friend", KICK_OPTION);
private static final ImmutableList<String> 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
});
}
}
}