Got this trying to bank at Al-Kharid. Started the bot at the entrance of the Al-Kharid mine, thinking the bot would mine the two iron right at the entrance. Instead, it went to the 2 iron ore deep in the mine, skipping the ones at the entrance. Nobody was mining the iron at the entrance; they were available.
Once it had a full inventory of iron, it ran out of the mine and got this error not too long after exiting the mine. Using rune pickaxe in inventory (not equipped).
Code:
java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1353)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.allMatch(ReferencePipeline.java:454)
at nul.iIIiiiiIIiiiI.false(ynb:78)
at nul.iiIIIiiIIiIIi.try(tnb:60)
at com.runemate.game.api.hybrid.region.Region.getCollisionFlags(gt:54)
at robot.IIIiIIIIiI.run(i:205)
at com.runemate.game.api.script.framework.core.LoopingThread.run(zab:12)
Patched this in the last update.
When attempting to mine iron ore at Ardougne South on RS3, it manages to get to the mine perfectly fine and then proceeds to stand near the rocks, and then randomly wander away, then return to the mining area, and wander away again, and the cycle just repeated endlessly. Changing the settings to use a different mine resulted in a smooth transition where it navigated to the newly selected mine and started mining and banking perfectly
I suggest that you pause the timer you're using to calculate profit, ores, and experience per hour when onPause is called and having it be resumed when onResume is called, that way time that passes while the user has the bot paused won't affect the accuracy of the per hour statistics.
Another suggestion I have is that when banking, if the game object or npc is visible but interaction fails more than a couple times, rotate the camera and retry, applying slight deviations to the angle and pitch if there are repeated failures, until you're able to successfully interact with the banker/bank booth. I recommend this because it's possible that isVisible is returning true when it's hidden behind an interface like the inventory on rs3's modern interface mode. This isn't as much of a problem on osrs but on both game modes their are quite a few interfaces that aren't taken into account when determining if something is visible for performance reasons. It's also possible that interaction could fail because only a small triangle is actually visible on screen, in which case you could use getVisibility() (which is a much heavier call if the entity is actually on screen) which returns a double representing the percentage of triangles that were projected which are visible (using the same definition of visible as isVisible(), in other words not all interfaces are accounted for when determining the value of getVisibility() either). This is useful for detecting if the entity if only 10% or so of the model is on the screen which, depending on the size of the model, could make interaction difficult (note that when I said 10%, I was just picking a low random number).