From c08c6d80e8ba41d3743208b4bdf6dfe7e19608c8 Mon Sep 17 00:00:00 2001 From: pwatts6060 Date: Tue, 21 Sep 2021 00:55:34 -0700 Subject: [PATCH] api: Add contains methods to WorldPoint and WorldArea --- .../net/runelite/api/coords/WorldArea.java | 20 +++++++++++ .../net/runelite/api/coords/WorldPoint.java | 36 +++++++++++++++++++ .../npcunaggroarea/NpcAggroAreaPlugin.java | 2 +- 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/runelite-api/src/main/java/net/runelite/api/coords/WorldArea.java b/runelite-api/src/main/java/net/runelite/api/coords/WorldArea.java index 3e34427459..e0ae129a44 100644 --- a/runelite-api/src/main/java/net/runelite/api/coords/WorldArea.java +++ b/runelite-api/src/main/java/net/runelite/api/coords/WorldArea.java @@ -160,6 +160,26 @@ public class WorldArea return distanceTo2D(new WorldArea(other, 1, 1)); } + /** + * Checks whether a tile is contained within the area and in the same plane. + * + * @return {@code true} if the tile is contained within the bounds of this area, {@code false} otherwise. + */ + public boolean contains(WorldPoint worldPoint) + { + return distanceTo(worldPoint) == 0; + } + + /** + * Checks whether a tile is contained within the area while ignoring the plane. + * + * @return {@code true} if the tile is contained within the bounds of this area regardless of plane, {@code false} otherwise. + */ + public boolean contains2D(WorldPoint worldPoint) + { + return distanceTo2D(worldPoint) == 0; + } + /** * Checks whether this area is within melee distance of another. *

diff --git a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java index 88520c6de0..d24174feab 100644 --- a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java +++ b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java @@ -557,4 +557,40 @@ public class WorldPoint } return worldPoint; } + + /** + * Checks whether this tile is located within any of the given areas. + * + * @param worldAreas areas to check within + * @return {@code true} if any area contains this point, {@code false} otherwise. + */ + public boolean isInArea(WorldArea... worldAreas) + { + for (WorldArea area : worldAreas) + { + if (area.contains(this)) + { + return true; + } + } + return false; + } + + /** + * Checks whether this tile is located within any of the given areas, disregarding any plane differences. + * + * @param worldAreas areas to check within + * @return {@code true} if any area contains this point, {@code false} otherwise. + */ + public boolean isInArea2D(WorldArea... worldAreas) + { + for (WorldArea area : worldAreas) + { + if (area.contains2D(this)) + { + return true; + } + } + 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 cf4830ebd7..148876e631 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 @@ -248,7 +248,7 @@ public class NpcAggroAreaPlugin extends Plugin private static boolean isInWilderness(WorldPoint location) { - return WILDERNESS_ABOVE_GROUND.distanceTo2D(location) == 0 || WILDERNESS_UNDERGROUND.distanceTo2D(location) == 0; + return location.isInArea2D(WILDERNESS_ABOVE_GROUND, WILDERNESS_UNDERGROUND); } private boolean isNpcMatch(NPC npc)