fixed loading of picker robot, for #1921

This commit is contained in:
SpaceToad 2014-07-01 08:52:01 +02:00
parent e9eafbc342
commit 59c22235bd
2 changed files with 32 additions and 6 deletions

View file

@ -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();
}
}

View file

@ -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");
}
}