diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 5b63162958..ae78f52aa2 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1616,6 +1616,20 @@ public interface Client extends GameShell */ void forciblyUnhideNpcName(String name); + /** + * Get the list of NPC indices that are currently hidden + * + * @return all of the current hidden NPC Indices + */ + List getHiddenNpcIndices(); + + /** + * If an NPC index is in this List then do not render it + * + * @param npcIndices the npc indices to hide + */ + void setHiddenNpcIndices(List npcIndices); + /** * Increments the counter for how many times this npc has been selected to be hidden on death * diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java index 23097e1a80..4d15ae5cf8 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java @@ -88,6 +88,9 @@ public abstract class EntityHiderBridgeMixin implements RSClient @Inject public static Set blacklistDeadNpcs = new HashSet<>(); + @Inject + public static List hiddenNpcIndices = new ArrayList<>(); + @Inject @Override public void setIsHidingEntities(boolean state) @@ -264,4 +267,18 @@ public abstract class EntityHiderBridgeMixin implements RSClient { hideDeadNPCs = state; } + + @Inject + @Override + public void setHiddenNpcIndices(List npcIndices) + { + hiddenNpcIndices = npcIndices; + } + + @Inject + @Override + public List getHiddenNpcIndices() + { + return hiddenNpcIndices; + } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java index 4734e790b4..fc30ebb953 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -99,6 +99,9 @@ public abstract class EntityHiderMixin implements RSScene @Shadow("hideDeadNPCs") private static boolean hideDeadNPCs; + @Shadow("hiddenNpcIndices") + private static List hiddenNpcIndices; + @Copy("newGameObject") @Replace("newGameObject") boolean copy$addEntityMarker(int var1, int var2, int var3, int var4, int var5, int x, int y, int var8, RSRenderable entity, int var10, boolean var11, long var12, int var13) @@ -213,6 +216,14 @@ public abstract class EntityHiderMixin implements RSScene return false; } + for (Integer index : hiddenNpcIndices) + { + if (index != null && npc.getIndex() == index) + { + return false; + } + } + return drawingUI ? !hideNPCs2D : !hideNPCs; } else if (entity instanceof RSProjectile)