diff --git a/runelite-api/src/main/java/net/runelite/api/Player.java b/runelite-api/src/main/java/net/runelite/api/Player.java index 6ea285b3d1..26943e4a08 100644 --- a/runelite-api/src/main/java/net/runelite/api/Player.java +++ b/runelite-api/src/main/java/net/runelite/api/Player.java @@ -40,4 +40,6 @@ public interface Player extends Actor boolean isClanMember(); boolean isFriend(); + + int getIndex(); } 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 a30822d80a..71efb4aae0 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -84,6 +84,7 @@ import net.runelite.rs.api.RSIndexedSprite; import net.runelite.rs.api.RSItemContainer; import net.runelite.rs.api.RSNPC; import net.runelite.rs.api.RSName; +import net.runelite.rs.api.RSPlayer; import net.runelite.rs.api.RSWidget; @Mixin(RSClient.class) @@ -616,6 +617,23 @@ public abstract class RSClientMixin implements RSClient } } + @FieldHook("cachedPlayers") + @Inject + public static void cachedPlayersChanged(int idx) + { + RSPlayer[] cachedPlayers = client.getCachedPlayers(); + if (idx < 0 || idx >= cachedPlayers.length) + { + return; + } + + RSPlayer player = cachedPlayers[idx]; + if (player != null) + { + player.setIndex(idx); + } + } + @Inject @FieldHook("grandExchangeOffers") public static void onGrandExchangeOffersChanged(int idx) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java index 4981d760f5..69a33d0674 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -45,6 +45,9 @@ public abstract class RSPlayerMixin implements RSPlayer @Shadow("clientInstance") private static RSClient client; + @Inject + private int playerIndex; + @Inject @Override public String getName() @@ -141,4 +144,18 @@ public abstract class RSPlayerMixin implements RSPlayer } return rotatedTriangles; } + + @Inject + @Override + public int getIndex() + { + return playerIndex; + } + + @Inject + @Override + public void setIndex(int index) + { + this.playerIndex = index; + } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java index 1bdf085e49..8e8d5a9d9f 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java @@ -54,4 +54,9 @@ public interface RSPlayer extends RSActor, Player @Import("isFriend") @Override boolean isFriend(); + + @Override + int getIndex(); + + void setIndex(int id); }