From 5a429b70706935fff12cd48a2aa2bb53cceb43a4 Mon Sep 17 00:00:00 2001 From: Ganom Date: Sun, 1 Sep 2019 12:39:54 -0400 Subject: [PATCH] entityhider: Allow hiding of specific players. (#1507) --- .../src/main/java/net/runelite/api/Client.java | 7 +++++++ .../plugins/entityhider/EntityHiderConfig.java | 11 +++++++++++ .../plugins/entityhider/EntityHiderPlugin.java | 3 ++- .../mixins/EntityHiderBridgeMixin.java | 10 ++++++++++ .../net/runelite/mixins/EntityHiderMixin.java | 18 ++++++++++++++++-- 5 files changed, 46 insertions(+), 3 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 58422353d9..5cc4563b16 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1492,6 +1492,13 @@ public interface Client extends GameShell */ void setAttackersHidden(boolean state); + /** + * Hides players input here. + * + * @param names the names of the players + */ + void setHideSpecificPlayers(List names); + /** * Sets whether projectiles are hidden. * 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 e817546a98..6fddfc5b4b 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 @@ -166,6 +166,17 @@ public interface EntityHiderConfig extends Config @ConfigItem( position = 13, + keyName = "hideSpecificPlayers", + name = "Hide Specific Players", + description = "Hides players you never wish to see." + ) + default String hideSpecificPlayers() + { + return ""; + } + + @ConfigItem( + position = 14, 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 31974cfdff..8eaebc94fe 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 @@ -34,11 +34,11 @@ import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.util.Text; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.api.util.Text; @PluginDescriptor( name = "Entity Hider", @@ -99,6 +99,7 @@ public class EntityHiderPlugin extends Plugin client.setPlayersHidden(config.hidePlayers()); client.setPlayersHidden2D(config.hidePlayers2D()); + client.setHideSpecificPlayers(Text.fromCSV(config.hideSpecificPlayers())); client.setFriendsHidden(config.hideFriends()); client.setClanMatesHidden(config.hideClanMates()); 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 81c60a8c12..53fd640c46 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java @@ -74,6 +74,9 @@ public abstract class EntityHiderBridgeMixin implements RSClient @Inject public static List hideNPCsOnDeath; + @Inject + public static List hideSpecificPlayers; + @Inject @Override public void setIsHidingEntities(boolean state) @@ -151,6 +154,13 @@ public abstract class EntityHiderBridgeMixin implements RSClient hideNPCsOnDeath = NPCs; } + @Inject + @Override + public void setHideSpecificPlayers(List players) + { + hideSpecificPlayers = players; + } + @Inject @Override public void setAttackersHidden(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 b307e00400..900d4c7e4d 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -32,6 +32,7 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; +import net.runelite.api.util.Text; import net.runelite.rs.api.RSActor; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSEntity; @@ -82,6 +83,9 @@ public abstract class EntityHiderMixin implements RSScene @Shadow("hideNPCsOnDeath") private static List hideNPCsOnDeath; + @Shadow("hideSpecificPlayers") + private static List hideSpecificPlayers; + @Shadow("hideNPCs2D") private static boolean hideNPCs2D; @@ -144,11 +148,21 @@ public abstract class EntityHiderMixin implements RSScene boolean local = drawingUI ? hideLocalPlayer2D : hideLocalPlayer; boolean other = drawingUI ? hidePlayers2D : hidePlayers; boolean isLocalPlayer = entity == client.getLocalPlayer(); + RSPlayer player = (RSPlayer) entity; + + for (String name : hideSpecificPlayers) + { + if (name != null && !name.equals("")) + { + if (Text.standardize(player.getName()).equals(name)) + { + return false; + } + } + } if (isLocalPlayer ? local : other) { - RSPlayer player = (RSPlayer) entity; - if (!hideAttackers) { if (player.getInteracting() == client.getLocalPlayer())