diff --git a/runelite-api/src/main/java/net/runelite/api/MenuEntry.java b/runelite-api/src/main/java/net/runelite/api/MenuEntry.java index c15a44f359..6d9cc751f4 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuEntry.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuEntry.java @@ -59,5 +59,11 @@ public class MenuEntry * A second additional parameter for the action. */ private int param1; - + /** + * If this field is true and you have single mouse button on and this entry is + * the top entry the right click menu will not be opened when you left click + * + * This is used for shift click + */ + private boolean forceLeftClick; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java index 03cf7f2d1a..e7e12580cd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java @@ -29,6 +29,7 @@ import java.awt.Dimension; import java.awt.Graphics2D; import javax.inject.Inject; import net.runelite.api.Client; +import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; import net.runelite.api.VarClientInt; import net.runelite.api.widgets.Widget; @@ -72,6 +73,13 @@ class MouseHighlightOverlay extends Overlay MenuEntry menuEntry = menuEntries[last]; String target = menuEntry.getTarget(); String option = menuEntry.getOption(); + int type = menuEntry.getType(); + + if (type == MenuAction.RUNELITE_OVERLAY.getId() || type == MenuAction.EXAMINE_ITEM_BANK_EQ.getId()) + { + // These are always right click only + return null; + } if (Strings.isNullOrEmpty(option)) { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 991f9a3a43..0c99443490 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -546,6 +546,7 @@ public abstract class RSClientMixin implements RSClient int[] menuTypes = getMenuTypes(); int[] params0 = getMenuActionParams0(); int[] params1 = getMenuActionParams1(); + boolean[] leftClick = getMenuForceLeftClick(); MenuEntry[] entries = new MenuEntry[count]; for (int i = 0; i < count; ++i) @@ -557,6 +558,7 @@ public abstract class RSClientMixin implements RSClient entry.setType(menuTypes[i]); entry.setParam0(params0[i]); entry.setParam1(params1[i]); + entry.setForceLeftClick(leftClick[i]); } return entries; } @@ -572,6 +574,7 @@ public abstract class RSClientMixin implements RSClient int[] menuTypes = getMenuTypes(); int[] params0 = getMenuActionParams0(); int[] params1 = getMenuActionParams1(); + boolean[] leftClick = getMenuForceLeftClick(); for (MenuEntry entry : entries) { @@ -581,6 +584,7 @@ public abstract class RSClientMixin implements RSClient menuTypes[count] = entry.getType(); params0[count] = entry.getParam0(); params1[count] = entry.getParam1(); + leftClick[count] = entry.isForceLeftClick(); ++count; } @@ -1406,4 +1410,28 @@ public abstract class RSClientMixin implements RSClient { client.getCallbacks().post(new ClientTick()); } + + @Copy("shouldLeftClickOpenMenu") + boolean rs$shouldLeftClickOpenMenu() + { + throw new RuntimeException(); + } + + @Replace("shouldLeftClickOpenMenu") + boolean rl$shouldLeftClickOpenMenu() + { + if (rs$shouldLeftClickOpenMenu()) + { + return true; + } + + int len = getMenuOptionCount(); + if (len > 0) + { + int type = getMenuTypes()[len - 1]; + return type == MenuAction.RUNELITE_OVERLAY.getId(); + } + + return false; + } } \ No newline at end of file diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index 2799198296..04ac90d398 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -307,6 +307,9 @@ public interface RSClient extends RSGameEngine, Client @Import("menuActionParams1") int[] getMenuActionParams1(); + @Import("menuForceLeftClick") + boolean[] getMenuForceLeftClick(); + @Import("worldList") @Override RSWorld[] getWorldList();