diff --git a/api/buildcraft/api/boards/RedstoneBoardRobot.java b/api/buildcraft/api/boards/RedstoneBoardRobot.java index 7c2ea3092f..e7930cd32c 100755 --- a/api/buildcraft/api/boards/RedstoneBoardRobot.java +++ b/api/buildcraft/api/boards/RedstoneBoardRobot.java @@ -18,8 +18,8 @@ public abstract class RedstoneBoardRobot extends AIRobot implements IRedstoneBoa public static HashSet reservedBlocks = new HashSet(); - public RedstoneBoardRobot(EntityRobotBase iRobot) { - super(iRobot); + public RedstoneBoardRobot(EntityRobotBase iRobot, int updateLatency) { + super(iRobot, 0, updateLatency); } @Override diff --git a/api/buildcraft/api/gates/ActionState.java b/api/buildcraft/api/gates/ActionState.java new file mode 100755 index 0000000000..5befd272a4 --- /dev/null +++ b/api/buildcraft/api/gates/ActionState.java @@ -0,0 +1,13 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.api.gates; + +public class ActionState { + +} diff --git a/api/buildcraft/api/robots/AIRobot.java b/api/buildcraft/api/robots/AIRobot.java index 461f2bbc16..7ab452ace1 100755 --- a/api/buildcraft/api/robots/AIRobot.java +++ b/api/buildcraft/api/robots/AIRobot.java @@ -1,21 +1,23 @@ package buildcraft.api.robots; +import buildcraft.api.core.SafeTimeTracker; + public class AIRobot { public EntityRobotBase robot; private AIRobot delegateAI; private AIRobot parentAI; private double energyCost; + private SafeTimeTracker updateTracker; - public AIRobot(EntityRobotBase iRobot, double iEnergyCost) { + public AIRobot(EntityRobotBase iRobot, double iEnergyCost, int updateLatency) { robot = iRobot; energyCost = iEnergyCost; - } - public AIRobot(EntityRobotBase iRobot) { - robot = iRobot; - energyCost = 0; + if (updateLatency > 1) { + updateTracker = new SafeTimeTracker(updateLatency, updateLatency / 5); + } } public void start() { @@ -54,8 +56,10 @@ public final void cycle() { if (delegateAI != null) { delegateAI.cycle(); } else { - robot.setEnergy(robot.getEnergy() - energyCost); - update(); + if (updateTracker == null || updateTracker.markTimeIfDelay(robot.worldObj)) { + robot.setEnergy(robot.getEnergy() - energyCost); + update(); + } } } diff --git a/common/buildcraft/core/robots/AIRobotGoAndLinkToDock.java b/common/buildcraft/core/robots/AIRobotGoAndLinkToDock.java index fb7e9d5a82..ae650022d0 100755 --- a/common/buildcraft/core/robots/AIRobotGoAndLinkToDock.java +++ b/common/buildcraft/core/robots/AIRobotGoAndLinkToDock.java @@ -16,7 +16,7 @@ public class AIRobotGoAndLinkToDock extends AIRobot { public DockingStation station; public AIRobotGoAndLinkToDock(EntityRobotBase iRobot, DockingStation iStation) { - super(iRobot); + super(iRobot, 0, 1); station = iStation; } diff --git a/common/buildcraft/core/robots/AIRobotGoToDock.java b/common/buildcraft/core/robots/AIRobotGoToDock.java index c83fbbc217..064779d5d9 100755 --- a/common/buildcraft/core/robots/AIRobotGoToDock.java +++ b/common/buildcraft/core/robots/AIRobotGoToDock.java @@ -16,7 +16,7 @@ public class AIRobotGoToDock extends AIRobot { private DockingStation station; public AIRobotGoToDock(EntityRobotBase iRobot, DockingStation iStation) { - super(iRobot); + super(iRobot, 0, 1); station = iStation; } diff --git a/common/buildcraft/core/robots/AIRobotLookForStation.java b/common/buildcraft/core/robots/AIRobotLookForStation.java index 1e3862f9c5..ef0959dcdd 100755 --- a/common/buildcraft/core/robots/AIRobotLookForStation.java +++ b/common/buildcraft/core/robots/AIRobotLookForStation.java @@ -15,11 +15,11 @@ public class AIRobotLookForStation extends AIRobot { - private DockingStation axeDocking = null; + public DockingStation targetStation; private IStationFilter filter; public AIRobotLookForStation(EntityRobotBase iRobot, IStationFilter iFilter) { - super(iRobot); + super(iRobot, 0, 1); filter = iFilter; } @@ -56,6 +56,7 @@ public void start() { } if (potentialStation != null) { + targetStation = potentialStation; startDelegateAI(new AIRobotGoToDock(robot, potentialStation)); } else { terminate(); diff --git a/common/buildcraft/core/robots/AIRobotMain.java b/common/buildcraft/core/robots/AIRobotMain.java index 37497dfc9a..5d54f6bd28 100755 --- a/common/buildcraft/core/robots/AIRobotMain.java +++ b/common/buildcraft/core/robots/AIRobotMain.java @@ -16,7 +16,7 @@ public class AIRobotMain extends AIRobot { private AIRobot overridingAI; public AIRobotMain(EntityRobotBase iRobot) { - super(iRobot); + super(iRobot, 0, 1); } @Override diff --git a/common/buildcraft/core/robots/AIRobotMove.java b/common/buildcraft/core/robots/AIRobotMove.java index 23b10c8d0f..00ad3871a9 100755 --- a/common/buildcraft/core/robots/AIRobotMove.java +++ b/common/buildcraft/core/robots/AIRobotMove.java @@ -17,7 +17,7 @@ public abstract class AIRobotMove extends AIRobot { protected double dirX, dirY, dirZ; public AIRobotMove(EntityRobotBase iRobot) { - super(iRobot, 1); + super(iRobot, 1, 1); } protected void setDestination(EntityRobotBase robot, float x, float y, float z) { diff --git a/common/buildcraft/core/robots/AIRobotRecharge.java b/common/buildcraft/core/robots/AIRobotRecharge.java index 8e37e5b3a5..f67d9f3f19 100755 --- a/common/buildcraft/core/robots/AIRobotRecharge.java +++ b/common/buildcraft/core/robots/AIRobotRecharge.java @@ -18,7 +18,7 @@ public class AIRobotRecharge extends AIRobot { private DockingStation axeDocking = null; public AIRobotRecharge(EntityRobotBase iRobot) { - super(iRobot); + super(iRobot, 0, 1); } @Override diff --git a/common/buildcraft/core/robots/boards/AIRobotBreakWithTool.java b/common/buildcraft/core/robots/boards/AIRobotBreakWithTool.java index 802f05b32b..fbf9ad9be3 100755 --- a/common/buildcraft/core/robots/boards/AIRobotBreakWithTool.java +++ b/common/buildcraft/core/robots/boards/AIRobotBreakWithTool.java @@ -32,7 +32,7 @@ public class AIRobotBreakWithTool extends AIRobot { private float speed; public AIRobotBreakWithTool(EntityRobotBase iRobot, BlockIndex iBlockToBreak) { - super(iRobot, 2); + super(iRobot, 2, 1); blockToBreak = iBlockToBreak; } diff --git a/common/buildcraft/core/robots/boards/AIRobotFetchItem.java b/common/buildcraft/core/robots/boards/AIRobotFetchItem.java index ac46b70c09..e78a014a86 100755 --- a/common/buildcraft/core/robots/boards/AIRobotFetchItem.java +++ b/common/buildcraft/core/robots/boards/AIRobotFetchItem.java @@ -28,7 +28,7 @@ public class AIRobotFetchItem extends AIRobot { private int pickTime = -1; public AIRobotFetchItem(EntityRobotBase iRobot, float iMaxRange, IStackFilter iStackFilter) { - super(iRobot); + super(iRobot, 0, 1); maxRange = iMaxRange; stackFilter = iStackFilter; diff --git a/common/buildcraft/core/robots/boards/AIRobotFetchItemStack.java b/common/buildcraft/core/robots/boards/AIRobotFetchItemStack.java index e7b95a9a0f..8b05e851d7 100755 --- a/common/buildcraft/core/robots/boards/AIRobotFetchItemStack.java +++ b/common/buildcraft/core/robots/boards/AIRobotFetchItemStack.java @@ -30,7 +30,7 @@ public class AIRobotFetchItemStack extends AIRobot { private IStackFilter filter; public AIRobotFetchItemStack(EntityRobotBase iRobot, IStackFilter iFilter) { - super(iRobot); + super(iRobot, 0, 1); filter = iFilter; } diff --git a/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java b/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java index 07370aafe2..821e6c650d 100755 --- a/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java +++ b/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java @@ -31,7 +31,7 @@ public class AIRobotGoToRandomDirt extends AIRobot { private PathFindingJob pathFindingJob; public AIRobotGoToRandomDirt(EntityRobotBase iRobot, int iRange) { - super(iRobot, 2); + super(iRobot, 2, 1); range = iRange; } diff --git a/common/buildcraft/core/robots/boards/AIRobotPlantSaple.java b/common/buildcraft/core/robots/boards/AIRobotPlantSaple.java index 96ab3187d8..f1ba3adfcc 100755 --- a/common/buildcraft/core/robots/boards/AIRobotPlantSaple.java +++ b/common/buildcraft/core/robots/boards/AIRobotPlantSaple.java @@ -22,7 +22,7 @@ public class AIRobotPlantSaple extends AIRobot { private int plantCycles = 0; public AIRobotPlantSaple(EntityRobotBase iRobot, BlockIndex index) { - super(iRobot, 2); + super(iRobot, 2, 1); toPlant = index; } diff --git a/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java b/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java index bc4dee8080..17a010fc70 100755 --- a/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java +++ b/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java @@ -26,7 +26,7 @@ public class AIRobotSearchBlock extends AIRobot { private IPathFound pathFound; public AIRobotSearchBlock(EntityRobotBase iRobot, IPathFound iPathFound) { - super(iRobot, 2); + super(iRobot, 2, 1); pathFound = iPathFound; } diff --git a/common/buildcraft/core/robots/boards/BoardRobotGenericBreakBlock.java b/common/buildcraft/core/robots/boards/BoardRobotGenericBreakBlock.java index 509a104207..6cabed9bf5 100755 --- a/common/buildcraft/core/robots/boards/BoardRobotGenericBreakBlock.java +++ b/common/buildcraft/core/robots/boards/BoardRobotGenericBreakBlock.java @@ -21,7 +21,7 @@ public abstract class BoardRobotGenericBreakBlock extends RedstoneBoardRobot { public BoardRobotGenericBreakBlock(EntityRobotBase iRobot) { - super(iRobot); + super(iRobot, 1); } public abstract boolean isExpectedTool(ItemStack stack); diff --git a/common/buildcraft/core/robots/boards/BoardRobotPicker.java b/common/buildcraft/core/robots/boards/BoardRobotPicker.java index bab26d3230..0233d5beb6 100755 --- a/common/buildcraft/core/robots/boards/BoardRobotPicker.java +++ b/common/buildcraft/core/robots/boards/BoardRobotPicker.java @@ -24,7 +24,6 @@ import buildcraft.api.boards.RedstoneBoardRegistry; import buildcraft.api.boards.RedstoneBoardRobot; import buildcraft.api.boards.RedstoneBoardRobotNBT; -import buildcraft.api.core.SafeTimeTracker; import buildcraft.api.robots.AIRobot; import buildcraft.api.robots.EntityRobotBase; import buildcraft.core.inventory.ITransactor; @@ -42,8 +41,6 @@ public class BoardRobotPicker extends RedstoneBoardRobot { // TODO: Clean this when world unloaded public static Set targettedItems = new HashSet(); - private SafeTimeTracker scanTracker = new SafeTimeTracker(40, 10); - private NBTTagCompound data; private RedstoneBoardNBT board; private IBoardParameter[] params; @@ -51,7 +48,7 @@ public class BoardRobotPicker extends RedstoneBoardRobot { private IStackFilter stackFilter; public BoardRobotPicker(EntityRobotBase robot, NBTTagCompound nbt) { - super(robot); + super(robot, 40); data = nbt; board = RedstoneBoardRegistry.instance.getRedstoneBoard(nbt); @@ -75,9 +72,7 @@ public BoardRobotPicker(EntityRobotBase robot, NBTTagCompound nbt) { @Override public void update() { - if (scanTracker.markTimeIfDelay(robot.worldObj)) { - startDelegateAI(new AIRobotFetchItem(robot, range, stackFilter)); - } + startDelegateAI(new AIRobotFetchItem(robot, range, stackFilter)); } @Override @@ -108,6 +103,10 @@ private void emptyContainerInInventory() { boolean found = false; ItemStack stackToAdd = robot.getStackInSlot(i); + if (stackToAdd == null) { + continue; + } + for (Object s : pipe.getActionStates()) { if (s instanceof StateStationRequestItems) { if (((StateStationRequestItems) s).matches(new ArrayStackFilter(stackToAdd))) { @@ -154,6 +153,10 @@ public boolean matches(DockingStation station) { boolean found = false; ItemStack stackToAdd = robot.getStackInSlot(i); + if (stackToAdd == null) { + continue; + } + for (Object s : pipe.getActionStates()) { if (s instanceof StateStationRequestItems) { if (((StateStationRequestItems) s).matches(new ArrayStackFilter(stackToAdd))) { diff --git a/common/buildcraft/core/robots/boards/BoardRobotPlanter.java b/common/buildcraft/core/robots/boards/BoardRobotPlanter.java index 544dd32453..293569b191 100755 --- a/common/buildcraft/core/robots/boards/BoardRobotPlanter.java +++ b/common/buildcraft/core/robots/boards/BoardRobotPlanter.java @@ -17,7 +17,7 @@ public class BoardRobotPlanter extends RedstoneBoardRobot { public BoardRobotPlanter(EntityRobotBase iRobot) { - super(iRobot); + super(iRobot, 1); } @Override