diff --git a/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrPlugin.java b/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrPlugin.java index 3f38de67f0..a14c925fe8 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrPlugin.java +++ b/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrPlugin.java @@ -41,7 +41,7 @@ ) @Slf4j public class GotrPlugin extends Plugin { - public static final String version = "1.5.10"; + public static final String version = "1.5.11"; @Inject private GotrConfig config; diff --git a/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrScript.java b/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrScript.java index dff9f6b40c..83fbb05d39 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/gotr/GotrScript.java @@ -126,6 +126,7 @@ public boolean run(GotrConfig config) { try { if (!Microbot.isLoggedIn()) return; if (!super.run()) return; + if (!isPlayerLocationKnown()) return; long startTime = System.currentTimeMillis(); if (!initCheck) { @@ -662,20 +663,26 @@ public void shutdown() { public static boolean isOutsideBarrier() { int outsideBarrierY = 9482; - return Rs2Player.getWorldLocation().getY() <= outsideBarrierY - && Rs2Player.getWorldLocation().getRegionID() == 14484; + WorldPoint location = Rs2Player.getWorldLocation(); + return location != null + && location.getY() <= outsideBarrierY + && location.getRegionID() == 14484; } public static boolean isInLargeMine() { int largeMineX = 3637; - return Rs2Player.getWorldLocation().getRegionID() == 14484 - && Microbot.getClientThread().invoke(() -> Microbot.getClient().getLocalPlayer().getWorldLocation().getX()) >= largeMineX; + WorldPoint location = Rs2Player.getWorldLocation(); + return location != null + && location.getRegionID() == 14484 + && location.getX() >= largeMineX; } public boolean isInHugeMine() { int hugeMineX = 3594; - return Rs2Player.getWorldLocation().getRegionID() == 14484 - && Microbot.getClientThread().invoke(() -> Microbot.getClient().getLocalPlayer().getWorldLocation().getX()) <= hugeMineX; + WorldPoint location = Rs2Player.getWorldLocation(); + return location != null + && location.getRegionID() == 14484 + && location.getX() <= hugeMineX; } static boolean isActiveAltarRenderable(Renderable renderable) { @@ -700,8 +707,13 @@ public boolean isInMiniGame() { return elementalRuneWidget != null; } + static boolean isPlayerLocationKnown() { + return Rs2Player.getWorldLocation() != null; + } + public static boolean isInMainRegion() { - return Rs2Player.getWorldLocation().getRegionID() == 14484; + WorldPoint location = Rs2Player.getWorldLocation(); + return location != null && location.getRegionID() == 14484; } public static int getStartTimer() { diff --git a/src/test/java/net/runelite/client/plugins/microbot/gotr/GotrRegionCheckTest.java b/src/test/java/net/runelite/client/plugins/microbot/gotr/GotrRegionCheckTest.java new file mode 100644 index 0000000000..1e2a2b46b7 --- /dev/null +++ b/src/test/java/net/runelite/client/plugins/microbot/gotr/GotrRegionCheckTest.java @@ -0,0 +1,92 @@ +package net.runelite.client.plugins.microbot.gotr; + +import net.runelite.api.coords.WorldPoint; +import net.runelite.client.plugins.microbot.util.player.Rs2Player; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mockStatic; + +class GotrRegionCheckTest +{ + private final GotrScript script = new GotrScript(); + + @Test + void unknownLocationIsInNoArea() + { + try (MockedStatic player = mockStatic(Rs2Player.class)) + { + player.when(Rs2Player::getWorldLocation).thenReturn(null); + + assertFalse(script.isInHugeMine()); + assertFalse(GotrScript.isInLargeMine()); + assertFalse(GotrScript.isOutsideBarrier()); + assertFalse(GotrScript.isInMainRegion()); + assertFalse(GotrScript.isPlayerLocationKnown()); + } + } + + @Test + void knownLocationLetsLoopDecide() + { + try (MockedStatic player = mockStatic(Rs2Player.class)) + { + player.when(Rs2Player::getWorldLocation).thenReturn(new WorldPoint(3222, 3218, 0)); + + assertTrue(GotrScript.isPlayerLocationKnown()); + } + } + + @Test + void hugeMineIsDetected() + { + try (MockedStatic player = mockStatic(Rs2Player.class)) + { + player.when(Rs2Player::getWorldLocation).thenReturn(new WorldPoint(3590, 9500, 0)); + + assertTrue(script.isInHugeMine()); + assertFalse(GotrScript.isInLargeMine()); + assertTrue(GotrScript.isInMainRegion()); + } + } + + @Test + void largeMineIsDetected() + { + try (MockedStatic player = mockStatic(Rs2Player.class)) + { + player.when(Rs2Player::getWorldLocation).thenReturn(new WorldPoint(3640, 9500, 0)); + + assertTrue(GotrScript.isInLargeMine()); + assertFalse(script.isInHugeMine()); + } + } + + @Test + void outsideBarrierIsDetected() + { + try (MockedStatic player = mockStatic(Rs2Player.class)) + { + player.when(Rs2Player::getWorldLocation).thenReturn(new WorldPoint(3615, 9480, 0)); + + assertTrue(GotrScript.isOutsideBarrier()); + assertTrue(GotrScript.isInMainRegion()); + } + } + + @Test + void otherRegionIsInNoArea() + { + try (MockedStatic player = mockStatic(Rs2Player.class)) + { + player.when(Rs2Player::getWorldLocation).thenReturn(new WorldPoint(3222, 3218, 0)); + + assertFalse(script.isInHugeMine()); + assertFalse(GotrScript.isInLargeMine()); + assertFalse(GotrScript.isOutsideBarrier()); + assertFalse(GotrScript.isInMainRegion()); + } + } +}