From 7e1c211005af24e03ed7057920100996ff211500 Mon Sep 17 00:00:00 2001 From: Ganom Date: Thu, 16 Jan 2020 09:01:32 -0500 Subject: [PATCH] entityhider: add blacklist for hiding dead npcs. (#2231) --- .../main/java/net/runelite/api/Client.java | 8 ++++++ .../main/java/net/runelite/api/util/Text.java | 2 +- .../entityhider/EntityHiderConfig.java | 26 ++++++++++++++----- .../entityhider/EntityHiderPlugin.java | 18 +++++++++++++ .../mixins/EntityHiderBridgeMixin.java | 12 +++++++++ .../net/runelite/mixins/EntityHiderMixin.java | 6 ++++- 6 files changed, 64 insertions(+), 8 deletions(-) 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 b1043492f3..98f24a749a 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1596,6 +1596,14 @@ public interface Client extends GameShell */ void setDeadNPCsHidden(boolean state); + /** + * The provided ids will not be hidden when the + * entity-hider attempts to hide dead {@link NPC}'s. + * + * @param blacklist set of npc ids. + */ + void setBlacklistDeadNpcs(Set blacklist); + /** * Gets an array of tile collision data. *

diff --git a/runelite-api/src/main/java/net/runelite/api/util/Text.java b/runelite-api/src/main/java/net/runelite/api/util/Text.java index 6cc05a9c9d..4da45a0a64 100644 --- a/runelite-api/src/main/java/net/runelite/api/util/Text.java +++ b/runelite-api/src/main/java/net/runelite/api/util/Text.java @@ -38,7 +38,7 @@ public class Text { private static final StringBuilder SB = new StringBuilder(64); - private static final Splitter COMMA_SPLITTER = Splitter + public static final Splitter COMMA_SPLITTER = Splitter .on(",") .omitEmptyStrings() .trimResults(); 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 dc82354a4e..8acf35f881 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 @@ -235,10 +235,24 @@ public interface EntityHiderConfig extends Config } @ConfigItem( - position = 18, - keyName = "hidePets", - name = "Hide Pets", - description = "Configures whether or not other player pets are hidden" + position = 18, + keyName = "blacklistDeadNpcs", + name = "Hide on Death Blacklist", + description = "Configures which NPCs NOT to hide when they die", + titleSection = "npcsTitle", + hidden = true, + unhide = "hideDeadNPCs" + ) + default String blacklistDeadNpcs() + { + return ""; + } + + @ConfigItem( + position = 19, + keyName = "hidePets", + name = "Hide Pets", + description = "Configures whether or not other player pets are hidden" ) default boolean hidePets() { @@ -249,7 +263,7 @@ public interface EntityHiderConfig extends Config keyName = "miscTitle", name = "Miscellaneous", description = "", - position = 19 + position = 20 ) default Title miscTitle() { @@ -257,7 +271,7 @@ public interface EntityHiderConfig extends Config } @ConfigItem( - position = 20, + position = 21, keyName = "hideProjectiles", name = "Hide Projectiles", description = "Configures whether or not projectiles are hidden", 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 e0b202c434..5d316bf130 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 @@ -28,7 +28,9 @@ package net.runelite.client.plugins.entityhider; import com.google.inject.Provides; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; @@ -83,6 +85,22 @@ public class EntityHiderPlugin extends Plugin { updateConfig(); + final Set blacklist = new HashSet<>(); + + for (String s : Text.COMMA_SPLITTER.split(config.blacklistDeadNpcs())) + { + try + { + blacklist.add(Integer.parseInt(s)); + } + catch (NumberFormatException ignored) + { + } + + } + + client.setBlacklistDeadNpcs(blacklist); + if (event.getOldValue() == null || event.getNewValue() == null) { return; 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 566e6cdd2e..a647a6d1ca 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java @@ -27,7 +27,9 @@ package net.runelite.mixins; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Set; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.rs.api.RSClient; @@ -83,6 +85,9 @@ public abstract class EntityHiderBridgeMixin implements RSClient @Inject public static List hideSpecificPlayers = new ArrayList<>(); + @Inject + public static Set blacklistDeadNpcs = new HashSet<>(); + @Inject @Override public void setIsHidingEntities(boolean state) @@ -225,6 +230,13 @@ public abstract class EntityHiderBridgeMixin implements RSClient hideSpecificPlayers = players; } + @Inject + @Override + public void setBlacklistDeadNpcs(Set blacklist) + { + blacklistDeadNpcs = blacklist; + } + @Inject @Override public void setPetsHidden(boolean 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 afb41862e5..f6b3b6c763 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -27,6 +27,7 @@ package net.runelite.mixins; import java.util.HashMap; import java.util.List; +import java.util.Set; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; @@ -80,6 +81,9 @@ public abstract class EntityHiderMixin implements RSScene @Shadow("hideSpecificPlayers") private static List hideSpecificPlayers; + @Shadow("blacklistDeadNpcs") + private static Set blacklistDeadNpcs; + @Shadow("hideNPCs2D") private static boolean hideNPCs2D; @@ -199,7 +203,7 @@ public abstract class EntityHiderMixin implements RSScene } } - if (hideDeadNPCs && npc.getHealthRatio() == 0) + if (hideDeadNPCs && npc.getHealthRatio() == 0 && !blacklistDeadNpcs.contains(npc.getId())) { return false; }