diff --git a/common/buildcraft/core/robots/AIRobotMoveToBlock.java b/common/buildcraft/core/robots/AIRobotMoveToBlock.java index c1a5c0f9..83b52a77 100755 --- a/common/buildcraft/core/robots/AIRobotMoveToBlock.java +++ b/common/buildcraft/core/robots/AIRobotMoveToBlock.java @@ -95,4 +95,11 @@ public class AIRobotMoveToBlock extends AIRobotMove { prevDistance = Double.MAX_VALUE; } } + + @Override + public void end() { + if (pathSearchJob != null) { + pathSearchJob.terminate(); + } + } } diff --git a/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java b/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java index 821e6c65..691cc415 100755 --- a/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java +++ b/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java @@ -74,4 +74,10 @@ public class AIRobotGoToRandomDirt extends AIRobot { } } + @Override + public void end() { + if (pathFindingJob != null) { + pathFindingJob.terminate(); + } + } } diff --git a/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java b/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java index 17a010fc..b15df529 100755 --- a/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java +++ b/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java @@ -55,4 +55,11 @@ public class AIRobotSearchBlock extends AIRobot { terminate(); } } + + @Override + public void end() { + if (blockScannerJob != null) { + blockScannerJob.terminate(); + } + } } diff --git a/common/buildcraft/core/utils/PathFindingJob.java b/common/buildcraft/core/utils/PathFindingJob.java index c140b828..891b5e1f 100755 --- a/common/buildcraft/core/utils/PathFindingJob.java +++ b/common/buildcraft/core/utils/PathFindingJob.java @@ -12,6 +12,8 @@ public class PathFindingJob extends Thread { private PathFinding pathFinding; + private boolean stop = false; + public PathFindingJob(PathFinding iPathFinding) { super("Path Finding"); pathFinding = iPathFinding; @@ -19,9 +21,17 @@ public class PathFindingJob extends Thread { @Override public void run() { - while (!pathFinding.isDone()) { + while (!isTerminated() && !pathFinding.isDone()) { pathFinding.iterate(); } } + public synchronized void terminate() { + stop = true; + } + + public synchronized boolean isTerminated() { + return stop; + } + }