From 73eacfe8cadc15f469ef94c62586a0fbd2bd1b6d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 30 Aug 2016 00:10:25 +0200 Subject: [PATCH] More autocrafting behavior fixes --- .../registry/CraftingTaskFactoryNormal.java | 1 + .../autocrafting/task/CraftingTaskNormal.java | 18 +++++++++++++---- .../apiimpl/network/grid/ItemGridHandler.java | 20 +++++-------------- .../refinedstorage/tile/TileController.java | 4 ++++ 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java index f76437eda..13c7cdee6 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactoryNormal.java @@ -25,6 +25,7 @@ public class CraftingTaskFactoryNormal implements ICraftingTaskFactory { if (tag != null) { task.setChildrenCreated(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_CHILDREN)); task.setSatisfied(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_SATISFIED)); + task.setChecked(CraftingTaskNormal.readBooleanArray(tag, CraftingTaskNormal.NBT_CHECKED)); List took = new ArrayList<>(); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index 441dafaf5..4a784dd7e 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -16,16 +16,19 @@ public class CraftingTaskNormal extends CraftingTask { public static final String NBT_TOOK = "Took"; public static final String NBT_SATISFIED = "Satisfied"; public static final String NBT_CHILDREN = "Children"; + public static final String NBT_CHECKED = "Checked"; private ICraftingPattern pattern; private List took = new ArrayList<>(); private boolean satisfied[]; private boolean childrenCreated[]; + private boolean checked[]; public CraftingTaskNormal(ICraftingPattern pattern) { this.pattern = pattern; this.satisfied = new boolean[pattern.getInputs().length]; this.childrenCreated = new boolean[pattern.getInputs().length]; + this.checked = new boolean[pattern.getInputs().length]; } public void setTook(List took) { @@ -40,6 +43,10 @@ public class CraftingTaskNormal extends CraftingTask { this.childrenCreated = childrenCreated; } + public void setChecked(boolean[] checked) { + this.checked = checked; + } + @Override public ICraftingPattern getPattern() { return pattern; @@ -48,6 +55,8 @@ public class CraftingTaskNormal extends CraftingTask { @Override public boolean update(World world, INetworkMaster network) { for (int i = 0; i < pattern.getInputs().length; ++i) { + checked[i] = true; + ItemStack input = pattern.getInputs()[i]; if (!satisfied[i]) { @@ -68,10 +77,10 @@ public class CraftingTaskNormal extends CraftingTask { childrenCreated[i] = true; network.updateCraftingTasks(); - - break; } } + + break; } } @@ -112,6 +121,7 @@ public class CraftingTaskNormal extends CraftingTask { writeBooleanArray(tag, NBT_SATISFIED, satisfied); writeBooleanArray(tag, NBT_CHILDREN, childrenCreated); + writeBooleanArray(tag, NBT_CHECKED, checked); NBTTagList took = new NBTTagList(); @@ -133,7 +143,7 @@ public class CraftingTaskNormal extends CraftingTask { for (int i = 0; i < pattern.getInputs().length; ++i) { ItemStack input = pattern.getInputs()[i]; - if (!satisfied[i] && !childrenCreated[i]) { + if (!satisfied[i] && !childrenCreated[i] && checked[i]) { if (!missingItems) { builder.append("I=gui.refinedstorage:crafting_monitor.missing_items\n"); @@ -149,7 +159,7 @@ public class CraftingTaskNormal extends CraftingTask { for (int i = 0; i < pattern.getInputs().length; ++i) { ItemStack input = pattern.getInputs()[i]; - if (!satisfied[i] && childrenCreated[i]) { + if (!satisfied[i] && childrenCreated[i] && checked[i]) { if (!itemsCrafting) { builder.append("I=gui.refinedstorage:crafting_monitor.items_crafting\n"); diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index 449bc2b77..8f87b4d4c 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -149,7 +149,7 @@ public class ItemGridHandler implements IItemGridHandler { if (depth == 0) { network.cancelCraftingTask(task); } else { - for (int i = 0; i < depth; ++i) { + for (int i = 0; i < depth - 1; ++i) { if (task == null) { break; } @@ -158,10 +158,11 @@ public class ItemGridHandler implements IItemGridHandler { } if (task != null) { - cancelCraftingTask(task); - } + task.getChild().onCancelled(network); + task.setChild(null); - network.updateCraftingTasks(); + network.updateCraftingTasks(); + } } } else if (id == -1) { for (ICraftingTask task : network.getCraftingTasks()) { @@ -169,15 +170,4 @@ public class ItemGridHandler implements IItemGridHandler { } } } - - // @TODO: Broken! - private void cancelCraftingTask(ICraftingTask task) { - task.onCancelled(network); - - if (task.getChild() != null) { - cancelCraftingTask(task.getChild()); - - task.setChild(null); - } - } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index a5d25f3cd..6492e6726 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -258,6 +258,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR craftingTasksToAdd.clear(); + if (!craftingTasks.isEmpty()) { + markDirty(); + } + Iterator craftingTaskIterator = craftingTasks.iterator(); while (craftingTaskIterator.hasNext()) {