From 659bfe889c69aec4a89ff585407949b1238d46ed Mon Sep 17 00:00:00 2001 From: kecleon Date: Tue, 30 Jul 2019 07:17:39 -0700 Subject: [PATCH] hide dead NPCs for EntityHider (#1197) --- .../src/main/java/net/runelite/api/Client.java | 7 +++++++ .../client/plugins/entityhider/EntityHiderConfig.java | 11 +++++++++++ .../client/plugins/entityhider/EntityHiderPlugin.java | 4 ++++ .../net/runelite/mixins/EntityHiderBridgeMixin.java | 10 ++++++++++ .../java/net/runelite/mixins/EntityHiderMixin.java | 8 ++++++++ 5 files changed, 40 insertions(+) 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 d0f106a1c8..aaab126da8 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1478,6 +1478,13 @@ public interface Client extends GameShell */ void setProjectilesHidden(boolean state); + /** + * Sets whether dead NPCs are hidden. + * + * @param state new NPC hidden state + */ + void setDeadNPCsHidden(boolean state); + /** * Gets an array of tile collision data. *

diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java index 154258d2d6..e9c9e6b48e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java @@ -153,4 +153,15 @@ public interface EntityHiderConfig extends Config return false; } + @ConfigItem( + position = 12, + keyName = "hideDeadNPCs", + name = "Hide Dead NPCs", + description = "Configures whether or not NPCs that just died are hidden" + ) + default boolean hideDeadNPCs() + { + return false; + } + } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java index 73263e4877..591dffb5ce 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java @@ -112,6 +112,8 @@ public class EntityHiderPlugin extends Plugin client.setAttackersHidden(config.hideAttackers()); client.setProjectilesHidden(config.hideProjectiles()); + + client.setDeadNPCsHidden(config.hideDeadNPCs()); } @Override @@ -136,6 +138,8 @@ public class EntityHiderPlugin extends Plugin client.setAttackersHidden(false); client.setProjectilesHidden(false); + + client.setDeadNPCsHidden(false); } private boolean isPlayerRegionAllowed() 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 f9e9a175f2..33803cc5ae 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java @@ -64,6 +64,9 @@ public abstract class EntityHiderBridgeMixin implements RSClient @Inject public static boolean hideProjectiles; + @Inject + public static boolean hideDeadNPCs; + @Inject public static String hideNPCsNames; @@ -151,4 +154,11 @@ public abstract class EntityHiderBridgeMixin implements RSClient { hideProjectiles = state; } + + @Inject + @Override + public void setDeadNPCsHidden(boolean state) + { + hideDeadNPCs = state; + } } 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 8f84b9d917..0d07ba7ad4 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -79,6 +79,9 @@ public abstract class EntityHiderMixin implements RSScene @Shadow("hideProjectiles") private static boolean hideProjectiles; + @Shadow("hideDeadNPCs") + private static boolean hideDeadNPCs; + @Copy("newGameObject") abstract boolean addEntityMarker(int var1, int var2, int var3, int var4, int var5, int x, int y, int var8, RSEntity renderable, int var10, boolean var11, long var12, int var13); @@ -164,6 +167,11 @@ public abstract class EntityHiderMixin implements RSScene } } + if (hideDeadNPCs && npc.getHealthRatio() == 0) + { + return false; + } + for (String name : names) { if (name != null && !name.equals(""))