FYI it was breaking because you're calling getInventory() before the inventory is available. Most API functions should be saved for your onLoop() as they require the game to be loaded / an account logged in to work correctly.
Thanks! Maybe, maybe not. It probably helps. Botting times were random, sometimes 8-12 hours, sometimes less than 5.
But I was doing other skills in between, mainly farming runs. I’ve also achieved 99 woodcutting and cooking with similar script.
Look at using the stored rocks position and writing a condition that finds the same rock on that position and checks if it doesn’t have ore, rather than checking the referenced rock.
private boolean checkRockHasOreAtPosition(Position p){
RS2Object rock = getObjects().getAll()
.stream()
.filter(obj -> obj.getPosition().equals(p) && Rock.CLAY.hasOre(obj))
.findFirst()
.orElse(null);
return rock != null;
}
Something like that
Is the NPC mage already set by the time you reach the condition? In the Boolean function call
NPC mage = getNpcs().closest(“mage”);
before returning. That may help...
inventory#contains will check if any item in the provided array is in the inventory.
There's probably a better way, but I use a separate function
private boolean inventoryContainsAllItems(String... items){
for( String item : items ){
if ( !getInventory().contains(item) )
return false;
}
return true;
}
Ah I’m not really, I just wondered if there was a way. Again, theoretically dealing with a large area feels like it should be handled by region checking.
But I can stick with areas, thanks for your thoughts and @Eliot
Yeah... well that’s one option.
The area I need to check is huge (the size of the region, basically 104x104). My logic is if it’s already defined as a region and I could check that then it makes more sense then defining a massive area.
But if there’s not really a better way then areas will have to do.