From 7320a4f61a75ccba0d2bb681649a70190b8b2767 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 10 Mar 2018 09:54:47 -0500 Subject: [PATCH] runelite-api: add ability to get npc index --- .../src/main/java/net/runelite/api/NPC.java | 1 + .../net/runelite/mixins/RSClientMixin.java | 19 +++++++++++++++++++ .../java/net/runelite/mixins/RSNPCMixin.java | 17 +++++++++++++++++ .../main/java/net/runelite/rs/api/RSNPC.java | 5 +++++ 4 files changed, 42 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/NPC.java b/runelite-api/src/main/java/net/runelite/api/NPC.java index 9fcf4ff919..10497c7a4e 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPC.java +++ b/runelite-api/src/main/java/net/runelite/api/NPC.java @@ -34,4 +34,5 @@ public interface NPC extends Actor @Override int getCombatLevel(); + 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 94cd998160..70eadca682 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -65,6 +65,7 @@ import net.runelite.rs.api.RSDeque; import net.runelite.rs.api.RSHashTable; 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.RSWidget; @@ -494,6 +495,24 @@ public abstract class RSClientMixin implements RSClient eventBus.post(gameStateChange); } + + @FieldHook("cachedNPCs") + @Inject + public static void cachedNPCsChanged(int idx) + { + RSNPC[] cachedNPCs = client.getCachedNPCs(); + if (idx < 0 || idx >= cachedNPCs.length) + { + return; + } + + RSNPC npc = cachedNPCs[idx]; + if (npc != null) + { + npc.setIndex(idx); + } + } + @Inject @FieldHook("grandExchangeOffers") public static void onGrandExchangeOffersChanged(int idx) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java index 0b08a1cc7d..d052b8c6e2 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java @@ -32,6 +32,9 @@ import net.runelite.rs.api.RSNPCComposition; @Mixin(RSNPC.class) public abstract class RSNPCMixin implements RSNPC { + @Inject + private int npcIndex; + @Inject @Override public int getId() @@ -55,4 +58,18 @@ public abstract class RSNPCMixin implements RSNPC RSNPCComposition composition = getComposition(); return composition == null ? -1 : composition.getCombatLevel(); } + + @Inject + @Override + public int getIndex() + { + return npcIndex; + } + + @Inject + @Override + public void setIndex(int id) + { + npcIndex = id; + } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java index 9419850d27..a401cf3cf5 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java @@ -31,4 +31,9 @@ public interface RSNPC extends RSActor, NPC { @Import("composition") RSNPCComposition getComposition(); + + @Override + int getIndex(); + + void setIndex(int id); }