fixed loading of picker robot, for #1921
This commit is contained in:
parent
e9eafbc342
commit
59c22235bd
2 changed files with 32 additions and 6 deletions
|
@ -23,13 +23,15 @@ import buildcraft.core.robots.boards.BoardRobotPicker;
|
|||
public class AIRobotFetchItem extends AIRobot {
|
||||
|
||||
public EntityItem target;
|
||||
public boolean noItemPicked = false;
|
||||
public boolean itemPickupCancelled = false;
|
||||
|
||||
private float maxRange;
|
||||
private IStackFilter stackFilter;
|
||||
private int pickTime = -1;
|
||||
private IBox box;
|
||||
|
||||
private int targetToLoad = -1;
|
||||
|
||||
public AIRobotFetchItem(EntityRobotBase iRobot) {
|
||||
super(iRobot);
|
||||
}
|
||||
|
@ -45,7 +47,7 @@ public class AIRobotFetchItem extends AIRobot {
|
|||
@Override
|
||||
public void preempt(AIRobot ai) {
|
||||
if (target != null && target.isDead) {
|
||||
noItemPicked = true;
|
||||
itemPickupCancelled = true;
|
||||
terminate();
|
||||
}
|
||||
}
|
||||
|
@ -76,10 +78,20 @@ public class AIRobotFetchItem extends AIRobot {
|
|||
@Override
|
||||
public void delegateAIEnded(AIRobot ai) {
|
||||
if (ai instanceof AIRobotGotoBlock) {
|
||||
if (target == null) {
|
||||
// This would happen after a load. As we reached the item
|
||||
// location already, just consider that the item is not there
|
||||
// anymore and allow user to try to find another one.
|
||||
itemPickupCancelled = true;
|
||||
terminate();
|
||||
return;
|
||||
}
|
||||
|
||||
if (((AIRobotGotoBlock) ai).unreachable) {
|
||||
robot.unreachableEntityDetected(target);
|
||||
noItemPicked = true;
|
||||
itemPickupCancelled = true;
|
||||
terminate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -140,7 +152,6 @@ public class AIRobotFetchItem extends AIRobot {
|
|||
|
||||
} else {
|
||||
// No item was found, terminate this AI
|
||||
noItemPicked = true;
|
||||
terminate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,8 +56,9 @@ public class BoardRobotPicker extends RedstoneBoardRobot {
|
|||
if (ai instanceof AIRobotFetchItem) {
|
||||
AIRobotFetchItem fetching = (AIRobotFetchItem) ai;
|
||||
|
||||
if (!fetching.noItemPicked && fetching.target != null) {
|
||||
// if we could get an item, let's try to get another one
|
||||
if (fetching.itemPickupCancelled || fetching.target != null) {
|
||||
// if we find an item - that may have been cancelled.
|
||||
// let's try to get another one
|
||||
startDelegateAI(new AIRobotFetchItem(robot, range, ActionRobotFilter.getGateFilter(robot
|
||||
.getLinkedStation()), robot.getAreaToWork()));
|
||||
} else if (robot.containsItems()) {
|
||||
|
@ -80,4 +81,18 @@ public class BoardRobotPicker extends RedstoneBoardRobot {
|
|||
public RedstoneBoardRobotNBT getNBTHandler() {
|
||||
return BoardRobotPickerNBT.instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeSelfToNBT(NBTTagCompound nbt) {
|
||||
super.writeSelfToNBT(nbt);
|
||||
|
||||
nbt.setInteger("range", range);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadSelfFromNBT(NBTTagCompound nbt) {
|
||||
super.loadSelfFromNBT(nbt);
|
||||
|
||||
range = nbt.getInteger("range");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue