diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaConfig.java index 99084a9172..b13901a4cc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaConfig.java @@ -103,4 +103,15 @@ public interface NpcAggroAreaConfig extends Config { return false; } + + @ConfigItem( + keyName = "notifyExpire", + name = "Notify Expiration", + description = "Send a notifcation when the unaggressive timer expires", + position = 7 + ) + default boolean notifyExpire() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java index f7d96bd59b..1053ae0a5d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npcunaggroarea/NpcAggroAreaPlugin.java @@ -52,6 +52,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcSpawned; import net.runelite.api.geometry.Geometry; +import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; @@ -110,6 +111,9 @@ public class NpcAggroAreaPlugin extends Plugin @Inject private ConfigManager configManager; + @Inject + private Notifier notifier; + @Getter private final WorldPoint[] safeCenters = new WorldPoint[2]; @@ -125,6 +129,8 @@ public class NpcAggroAreaPlugin extends Plugin private WorldPoint lastPlayerLocation; private WorldPoint previousUnknownCenter; private boolean loggingIn; + private boolean notifyOnce; + private List npcNamePatterns; @Provides @@ -223,6 +229,7 @@ public class NpcAggroAreaPlugin extends Plugin { infoBoxManager.removeInfoBox(currentTimer); currentTimer = null; + notifyOnce = false; } private void createTimer(Duration duration) @@ -231,6 +238,7 @@ public class NpcAggroAreaPlugin extends Plugin BufferedImage image = itemManager.getImage(ItemID.ENSOULED_DEMON_HEAD); currentTimer = new AggressionTimer(duration, image, this, active && config.showTimer()); infoBoxManager.addInfoBox(currentTimer); + notifyOnce = true; } private void resetTimer() @@ -317,6 +325,17 @@ public class NpcAggroAreaPlugin extends Plugin public void onGameTick(GameTick event) { WorldPoint newLocation = client.getLocalPlayer().getWorldLocation(); + + if (active && currentTimer != null && currentTimer.cull() && notifyOnce) + { + if (config.notifyExpire()) + { + notifier.notify("NPC agression has expired!"); + } + + notifyOnce = false; + } + if (lastPlayerLocation != null) { if (safeCenters[1] == null && newLocation.distanceTo2D(lastPlayerLocation) > SAFE_AREA_RADIUS * 4)