diff --git a/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusPlugin.java b/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusPlugin.java index b9b3279915..7cacaa75e8 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusPlugin.java +++ b/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusPlugin.java @@ -32,7 +32,7 @@ ) @Slf4j public class ScurriusPlugin extends Plugin { - public static final String version = "1.0.3"; + public static final String version = "1.0.4"; @Inject private ScurriusConfig config; @Provides diff --git a/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScript.java b/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScript.java index 03cb0ca51a..2753c16f8c 100644 --- a/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScript.java +++ b/src/main/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScript.java @@ -190,8 +190,7 @@ public boolean run(ScurriusConfig config) { } Rs2NpcModel giantRatModel = Microbot.getRs2NpcCache().query() - .where(n -> n.getName() != null && n.getName().toLowerCase().contains("giant rat") - && !n.getNpc().isDead()) + .where(ScurriusScript::isLiveGiantRat) .nearest(); if (giantRatModel != null) { boolean didWeAttackAGiantRat = scurrius != null && config.prioritizeRats() && giantRatModel.click("Attack"); @@ -275,6 +274,11 @@ static boolean isInArea(WorldArea area, WorldPoint location) { return location != null && area.contains(location); } + static boolean isLiveGiantRat(Rs2NpcModel npc) { + String name = npc.getName(); + return name != null && name.toLowerCase().contains("giant rat") && !npc.getNpc().isDead(); + } + static int randomThreshold(int first, int second) { int low = Math.min(first, second); int high = Math.max(first, second); diff --git a/src/test/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScriptTest.java b/src/test/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScriptTest.java index e4432ab7e2..ff5515d902 100644 --- a/src/test/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScriptTest.java +++ b/src/test/java/net/runelite/client/plugins/microbot/scurrius/ScurriusScriptTest.java @@ -1,12 +1,17 @@ package net.runelite.client.plugins.microbot.scurrius; import net.runelite.api.coords.WorldArea; +import net.runelite.api.NPC; import net.runelite.api.coords.WorldPoint; +import net.runelite.client.plugins.microbot.api.npc.models.Rs2NpcModel; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; class ScurriusScriptTest { @@ -43,4 +48,38 @@ void locationInsideFightRoomIsDetected() { assertTrue(ScurriusScript.isInArea(fightRoom, new WorldPoint(3295, 9865, 0))); assertFalse(ScurriusScript.isInArea(fightRoom, new WorldPoint(3279, 9869, 0))); } + + @Test + void giantRatNameIsReadOnceSoALaterNullCannotThrow() { + Rs2NpcModel rat = mock(Rs2NpcModel.class); + NPC npc = mock(NPC.class); + when(rat.getName()).thenReturn("Giant rat", (String) null); + when(rat.getNpc()).thenReturn(npc); + when(npc.isDead()).thenReturn(false); + + assertTrue(ScurriusScript.isLiveGiantRat(rat)); + verify(rat).getName(); + } + + @Test + void nullNameIsNotAGiantRat() { + Rs2NpcModel npc = mock(Rs2NpcModel.class); + when(npc.getName()).thenReturn(null); + + assertFalse(ScurriusScript.isLiveGiantRat(npc)); + } + + @Test + void deadOrOtherNpcsAreNotLiveGiantRats() { + Rs2NpcModel deadRat = mock(Rs2NpcModel.class); + NPC deadNpc = mock(NPC.class); + when(deadRat.getName()).thenReturn("Giant rat"); + when(deadRat.getNpc()).thenReturn(deadNpc); + when(deadNpc.isDead()).thenReturn(true); + assertFalse(ScurriusScript.isLiveGiantRat(deadRat)); + + Rs2NpcModel scurrius = mock(Rs2NpcModel.class); + when(scurrius.getName()).thenReturn("Scurrius"); + assertFalse(ScurriusScript.isLiveGiantRat(scurrius)); + } }