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 ec130a3e82..59406e2781 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -1196,6 +1196,18 @@ public abstract class RSClientMixin implements RSClient client.getCallbacks().post(CanvasSizeChanged.class, CanvasSizeChanged.INSTANCE); } + @FieldHook("hintArrowPlayerIndex") + @Inject + public static void hintPlayerChanged(int ignored) + { + // Setting the localInteractingIndex (aka player target index, it only applies to players) + // causes that player to get priority over others when rendering/menus are added + if (client.getVar(VarPlayer.ATTACKING_PLAYER) == -1) + { + client.setLocalInteractingIndex(client.getHintArrowPlayerTargetIdx() & 2047); + } + } + @Inject @Override public boolean hasHintArrow() @@ -1247,6 +1259,7 @@ public abstract class RSClientMixin implements RSClient { client.setHintArrowTargetType(HintArrowType.PLAYER.getValue()); client.setHintArrowPlayerTargetIdx(((RSPlayer) player).getPlayerId()); + hintPlayerChanged(-1); } @Inject 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 e49cc5fc46..df02ac9afa 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 @@ -234,6 +234,9 @@ public interface RSClient extends RSGameShell, Client @Import("combatTargetPlayerIndex") int getLocalInteractingIndex(); + @Import("combatTargetPlayerIndex") + void setLocalInteractingIndex(int idx); + @Import("groundItems") RSNodeDeque[][][] getGroundItemDeque();