diff --git a/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java b/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java index b6943cf2d..c00acb8cb 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/CraftingTask.java @@ -78,16 +78,6 @@ public abstract class CraftingTask implements ICraftingTask { this.satisfied = satisfied; } - protected boolean hasReceivedInputs() { - for (boolean item : satisfied) { - if (!item) { - return false; - } - } - - return true; - } - public boolean[] getChecked() { return checked; } @@ -108,11 +98,6 @@ public abstract class CraftingTask implements ICraftingTask { } } - @Override - public boolean isFinished() { - return hasReceivedInputs(); - } - @Override @Nullable public ICraftingTask getChild() { diff --git a/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java b/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java index a40847357..775103a24 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java @@ -32,12 +32,7 @@ public interface ICraftingTask { * @param network the network * @return true if the crafting task is done, false otherwise */ - void update(World world, INetworkMaster network); - - /** - * @return whether this crafting task is finished - */ - boolean isFinished(); + boolean update(World world, INetworkMaster network); /** * Gets called when the crafting task is cancelled. diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index e32801263..a674b07a0 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -13,7 +13,7 @@ public class CraftingTaskNormal extends CraftingTask { } @Override - public void update(World world, INetworkMaster network) { + public boolean update(World world, INetworkMaster network) { for (int i = 0; i < pattern.getInputs().size(); ++i) { checked[i] = true; @@ -34,8 +34,10 @@ public class CraftingTaskNormal extends CraftingTask { } } - if (!hasReceivedInputs()) { - return; + for (boolean item : satisfied) { + if (!item) { + return false; + } } for (ItemStack output : pattern.getOutputs()) { @@ -47,6 +49,8 @@ public class CraftingTaskNormal extends CraftingTask { // @TODO: Handle remainder network.insertItem(byproduct, byproduct.stackSize, false); } + + return true; } @Override diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java index 85413a0e6..1fb4e6229 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java @@ -35,7 +35,7 @@ public class CraftingTaskProcessing extends CraftingTask { } @Override - public void update(World world, INetworkMaster network) { + public boolean update(World world, INetworkMaster network) { for (int i = 0; i < pattern.getInputs().size(); ++i) { checked[i] = true; @@ -56,8 +56,8 @@ public class CraftingTaskProcessing extends CraftingTask { } } - if (!hasReceivedInputs()) { - return; + if (!hasTakenInputs()) { + return false; } ICraftingPatternContainer container = pattern.getContainer(); @@ -77,11 +77,8 @@ public class CraftingTaskProcessing extends CraftingTask { } else { tileInUse = null; } - } - @Override - public boolean isFinished() { - return super.isFinished() && hasReceivedOutputs(); + return hasReceivedOutputs(); } private boolean hasReceivedOutputs() { @@ -94,6 +91,16 @@ public class CraftingTaskProcessing extends CraftingTask { return true; } + private boolean hasTakenInputs() { + for (boolean item : satisfied) { + if (!item) { + return false; + } + } + + return true; + } + private boolean isTileInUse(INetworkMaster network) { for (ICraftingTask task : network.getCraftingTasks()) { if (isTileInUse(task)) { @@ -125,7 +132,7 @@ public class CraftingTaskProcessing extends CraftingTask { } public boolean onInserted(ItemStack stack) { - if (!hasReceivedOutputs() && hasReceivedInputs()) { + if (!hasReceivedOutputs() && hasTakenInputs()) { for (int i = 0; i < pattern.getOutputs().size(); ++i) { ItemStack output = pattern.getOutputs().get(i); @@ -191,7 +198,7 @@ public class CraftingTaskProcessing extends CraftingTask { } } - if (hasReceivedInputs()) { + if (hasTakenInputs()) { builder.append("I=gui.refinedstorage:crafting_monitor.items_processing\n"); for (int i = 0; i < pattern.getInputs().size(); ++i) { diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index a8b52f0ed..c2276797d 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -106,9 +106,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR IBlockState state = tile.worldObj.getBlockState(node.getPosition()); ClientNode clientNode = new ClientNode( - new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)), - 1, - node.getEnergyUsage() + new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)), + 1, + node.getEnergyUsage() ); if (clientNode.getStack().getItem() != null) { @@ -275,12 +275,22 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR craftingTasksToAdd.clear(); - updateCraftingTasks(CraftingTaskUpdateType.NORMAL); + Iterator craftingTaskIterator = craftingTasks.iterator(); + + while (craftingTaskIterator.hasNext()) { + ICraftingTask task = craftingTaskIterator.next(); + + if (updateCraftingTask(task)) { + craftingTaskIterator.remove(); + + craftingTasksChanged = true; + } + } if (!craftingTasks.isEmpty() || craftingTasksChanged) { markDirty(); - updateCraftingMonitors(); + updateCraftingTasks(); } } @@ -314,26 +324,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR super.update(); } - enum CraftingTaskUpdateType { - NORMAL, - DELETION - } - - private void updateCraftingTasks(CraftingTaskUpdateType type) { - Iterator craftingTaskIterator = craftingTasks.iterator(); - - while (craftingTaskIterator.hasNext()) { - ICraftingTask task = craftingTaskIterator.next(); - - if (updateCraftingTask(task, type)) { - craftingTaskIterator.remove(); - } - } - } - - private boolean updateCraftingTask(ICraftingTask task, CraftingTaskUpdateType type) { + private boolean updateCraftingTask(ICraftingTask task) { if (task.getChild() != null) { - if (updateCraftingTask(task.getChild(), type)) { + if (updateCraftingTask(task.getChild())) { task.setChild(null); } @@ -342,18 +335,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ICraftingPatternContainer container = task.getPattern().getContainer(); - if (container != null && (ticks % container.getSpeed() == 0 || type == CraftingTaskUpdateType.DELETION)) { - if (type == CraftingTaskUpdateType.NORMAL) { - task.update(worldObj, this); - } - - return task.isFinished(); - } - - return false; + return container != null && ticks % container.getSpeed() == 0 && task.update(worldObj, this); } - private void updateCraftingMonitors() { + public void updateCraftingTasks() { for (INetworkNode node : nodeGraph.all()) { if (node instanceof TileCraftingMonitor) { ((TileCraftingMonitor) node).dataManager.sendParameterToWatchers(TileCraftingMonitor.TASKS); @@ -489,8 +474,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendItemStorageToClient() { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) - .forEach(this::sendItemStorageToClient); + .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) + .forEach(this::sendItemStorageToClient); } @Override @@ -501,15 +486,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendItemStorageDeltaToClient(ItemStack stack, int delta) { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) - .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridItemDelta(this, stack, delta), player)); + .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridItemDelta(this, stack, delta), player)); } @Override public void sendFluidStorageToClient() { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) - .forEach(this::sendFluidStorageToClient); + .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) + .forEach(this::sendFluidStorageToClient); } @Override @@ -520,8 +505,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendFluidStorageDeltaToClient(FluidStack stack, int delta) { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) - .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridFluidDelta(stack, delta), player)); + .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridFluidDelta(stack, delta), player)); } private boolean isWatchingGrid(EntityPlayer player, EnumGridType... types) { @@ -566,17 +551,13 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); for (int i = 0; i < inserted; ++i) { - for (int j = 0; j < craftingTasks.size(); ++j) { - ICraftingTask task = craftingTasks.get(j); - + for (ICraftingTask task : craftingTasks) { if (inserted == 0) { break; } if (onInserted(stack, task)) { inserted--; - - updateCraftingTasks(CraftingTaskUpdateType.DELETION); } } } @@ -856,7 +837,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public boolean hasCapability(Capability capability, EnumFacing facing) { return capability == CapabilityEnergy.ENERGY - || (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) - || super.hasCapability(capability, facing); + || (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) + || super.hasCapability(capability, facing); } }