So basically I have recently started to write scripts (yesterday). I have implemented the Node system and I wonder how I can
sleep
while something is finished.
Let's say that I am chopping down a tree, how can I stop it from clicking while I am chopping?
Here is a preview of my code:
@ScriptManifest(author = "Ruzi", info = "WoodCutting", name = "WoodCutting", version = 1, logo = "")
public class Main extends Script {
private final int DELAY = 100;
private List<Node> nodes = new ArrayList<>();
@Override
public void onStart() {
Area treeArea = new Area(3086, 3275, 3074, 3263);
WalkToTreeArea walkToTreeArea = new WalkToTreeArea(this, treeArea);
nodes.add(walkToTreeArea);
ChopDown chopDown = new ChopDown(this, treeArea);
nodes.add(chopDown);
}
@Override
public int onLoop() throws InterruptedException {
nodes.forEach(node -> {
if(node.validate())
node.execute();
});
return DELAY;
}
@Override
public void onExit() {
}
}
public class ChopDown implements Node {
private final int TREE_ID = 1276;
private Script script;
private Area treeArea;
private Player player;
private RS2Object tree;
public ChopDown(Script script, Area treeArea) {
this.script = script;
this.treeArea = treeArea;
this.player = script.myPlayer();
}
@Override
public void execute() {
chopDown();
}
private void chopDown() {
tree = script.getObjects().closest(TREE_ID);
if(tree != null){
tree.interact("Chop down");
}
}
@Override
public boolean validate() {
return !inventoryIsFull() && isAtTreeArea();
}
private boolean inventoryIsFull() {
return script.getInventory().isFull();
}
private boolean isAtTreeArea() {
return treeArea.contains(player);
}
}
Thanks!