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 d12de2454d..c667680326 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1561,6 +1561,13 @@ public interface Client extends GameShell */ void setNPCsHidden2D(boolean state); + /** + * Sets whether Pets from other players are hidden. + * + * @param state new pet hidden state + */ + void setPetsHidden(boolean state); + /** * Sets whether attacking players or NPCs are hidden. * diff --git a/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java b/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java index 7486cc1068..d0cafa8b58 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java +++ b/runelite-api/src/main/java/net/runelite/api/NPCDefinition.java @@ -48,6 +48,8 @@ public interface NPCDefinition boolean isClickable(); + boolean isFollower(); + /** * Gets whether the NPC is visible on the mini-map. */ 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 7ca7cd85fc..dc82354a4e 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 @@ -234,11 +234,22 @@ public interface EntityHiderConfig extends Config return ""; } + @ConfigItem( + position = 18, + keyName = "hidePets", + name = "Hide Pets", + description = "Configures whether or not other player pets are hidden" + ) + default boolean hidePets() + { + return false; + } + @ConfigTitleSection( keyName = "miscTitle", name = "Miscellaneous", description = "", - position = 18 + position = 19 ) default Title miscTitle() { @@ -246,7 +257,7 @@ public interface EntityHiderConfig extends Config } @ConfigItem( - position = 19, + position = 20, 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 40c51b24d0..e89ac5a252 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 @@ -140,6 +140,8 @@ public class EntityHiderPlugin extends Plugin //client.setNPCsNames(Text.fromCSV(config.hideNPCsNames())); //client.setNPCsHiddenOnDeath(Text.fromCSV(config.hideNPCsOnDeath())); + client.setPetsHidden(config.hidePets()); + client.setAttackersHidden(config.hideAttackers()); client.setProjectilesHidden(config.hideProjectiles()); @@ -164,6 +166,8 @@ public class EntityHiderPlugin extends Plugin client.setNPCsHidden(false); client.setNPCsHidden2D(false); + client.setPetsHidden(false); + client.setAttackersHidden(false); client.setProjectilesHidden(false); 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 f7f78593cc..566e6cdd2e 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderBridgeMixin.java @@ -62,6 +62,9 @@ public abstract class EntityHiderBridgeMixin implements RSClient @Inject public static boolean hideNPCs2D; + @Inject + public static boolean hidePets; + @Inject public static boolean hideAttackers; @@ -222,6 +225,13 @@ public abstract class EntityHiderBridgeMixin implements RSClient hideSpecificPlayers = players; } + @Inject + @Override + public void setPetsHidden(boolean state) + { + hidePets = state; + } + @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 3daf94d9ba..afb41862e5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/EntityHiderMixin.java @@ -83,6 +83,9 @@ public abstract class EntityHiderMixin implements RSScene @Shadow("hideNPCs2D") private static boolean hideNPCs2D; + @Shadow("hidePets") + private static boolean hidePets; + @Shadow("hideAttackers") private static boolean hideAttackers; @@ -188,6 +191,14 @@ public abstract class EntityHiderMixin implements RSScene } } + if (hidePets) + { + if (npc.getDefinition().isFollower()) + { + return false; + } + } + if (hideDeadNPCs && npc.getHealthRatio() == 0) { return false; diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java index 7e6fd4ba16..8378f01757 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNPCDefinition.java @@ -21,6 +21,10 @@ public interface RSNPCDefinition extends NPCDefinition @Override boolean isClickable(); + @Import("isFollower") + @Override + boolean isFollower(); + @Import("drawMapDot") @Override boolean isMinimapVisible();