diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index a02a6f442..ae698b8f9 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -91,7 +91,6 @@ public class GuiCraftingMonitor extends GuiBase { .replace("{missing_items}", t("gui.refinedstorage:crafting_monitor.missing_items")) .replace("{items_crafting}", t("gui.refinedstorage:crafting_monitor.items_crafting")) .replace("{items_processing}", t("gui.refinedstorage:crafting_monitor.items_processing")) - .replace("{missing_machine}", t("gui.refinedstorage:crafting_monitor.missing_machine")) .replace("{none}", t("misc.refinedstorage:none"))); } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 5f9b4b96c..3491e998c 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -65,6 +65,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor private List patterns = new ArrayList(); private List craftingTasks = new ArrayList(); private List craftingTasksToAdd = new ArrayList(); + private List craftingTasksToCancel = new ArrayList(); private Set visited = new HashSet(); @@ -174,6 +175,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor } } + for (ICraftingTask taskToCancel : craftingTasksToCancel) { + taskToCancel.onCancelled(this); + } + + craftingTasks.removeAll(craftingTasksToCancel); + craftingTasksToCancel.clear(); + craftingTasks.addAll(craftingTasksToAdd); craftingTasksToAdd.clear(); @@ -269,6 +277,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor } } + public void cancelCraftingTask(ICraftingTask task) { + craftingTasksToCancel.add(task); + } + public int getCraftingTaskCount(CraftingPattern pattern, int flags) { int amount = 0; diff --git a/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java b/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java index f28dc4c49..2e0b4fcc4 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/autocrafting/TileCrafter.java @@ -9,6 +9,7 @@ import net.minecraft.util.text.ITextComponent; import refinedstorage.container.ContainerCrafter; import refinedstorage.inventory.InventorySimple; import refinedstorage.tile.TileMachine; +import refinedstorage.tile.autocrafting.task.ICraftingTask; import refinedstorage.util.InventoryUtils; public class TileCrafter extends TileMachine implements IInventory { @@ -30,6 +31,17 @@ public class TileCrafter extends TileMachine implements IInventory { return ContainerCrafter.class; } + @Override + public void onDisconnected() { + for (ICraftingTask task : controller.getCraftingTasks()) { + if (task.getPattern().getCrafter() == this) { + controller.cancelCraftingTask(task); + } + } + + super.onDisconnected(); + } + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index 5240116d5..8ac440001 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -5,14 +5,20 @@ import net.minecraft.util.text.TextFormatting; import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; +import java.util.ArrayList; +import java.util.List; + public class BasicCraftingTask implements ICraftingTask { private CraftingPattern pattern; private boolean satisfied[]; + private boolean checked[]; private boolean childTasks[]; + private List itemsTook = new ArrayList(); public BasicCraftingTask(CraftingPattern pattern) { this.pattern = pattern; this.satisfied = new boolean[pattern.getInputs().length]; + this.checked = new boolean[pattern.getInputs().length]; this.childTasks = new boolean[pattern.getInputs().length]; } @@ -24,6 +30,8 @@ public class BasicCraftingTask implements ICraftingTask { boolean done = true; for (int i = 0; i < pattern.getInputs().length; ++i) { + checked[i] = true; + ItemStack input = pattern.getInputs()[i]; if (!satisfied[i]) { @@ -32,6 +40,8 @@ public class BasicCraftingTask implements ICraftingTask { ItemStack took = controller.take(input.copy()); if (took != null) { + itemsTook.add(took); + satisfied[i] = true; } else if (!childTasks[i]) { CraftingPattern pattern = controller.getPattern(input); @@ -59,6 +69,13 @@ public class BasicCraftingTask implements ICraftingTask { } } + @Override + public void onCancelled(TileController controller) { + for (ItemStack took : itemsTook) { + controller.push(took); + } + } + @Override public String getInfo() { StringBuilder builder = new StringBuilder(); @@ -70,7 +87,7 @@ public class BasicCraftingTask implements ICraftingTask { for (int i = 0; i < pattern.getInputs().length; ++i) { ItemStack input = pattern.getInputs()[i]; - if (!satisfied[i] && !childTasks[i]) { + if (checked[i] && !satisfied[i] && !childTasks[i]) { builder.append("- ").append(input.getDisplayName()).append("\n"); missingItems++; @@ -88,7 +105,7 @@ public class BasicCraftingTask implements ICraftingTask { for (int i = 0; i < pattern.getInputs().length; ++i) { ItemStack input = pattern.getInputs()[i]; - if (childTasks[i]) { + if (!satisfied[i] && childTasks[i]) { builder.append("- ").append(input.getDisplayName()).append("\n"); itemsCrafting++; diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java index fc9a4140c..eb1bf5f5c 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java @@ -10,5 +10,7 @@ public interface ICraftingTask { void onDone(TileController controller); + void onCancelled(TileController controller); + String getInfo(); } diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java index cad398c67..063c2ffd7 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java @@ -15,7 +15,6 @@ public class ProcessingCraftingTask implements ICraftingTask { private boolean inserted[]; private boolean missing[]; private boolean satisfied[]; - private boolean missingMachine; public ProcessingCraftingTask(CraftingPattern pattern) { this.pattern = pattern; @@ -35,8 +34,6 @@ public class ProcessingCraftingTask implements ICraftingTask { TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection())); if (crafterFacing instanceof IInventory) { - missingMachine = false; - for (int i = 0; i < inserted.length; ++i) { if (!inserted[i]) { ItemStack input = pattern.getInputs()[i]; @@ -50,7 +47,7 @@ public class ProcessingCraftingTask implements ICraftingTask { if (remaining == null) { inserted[i] = true; } else { - controller.push(input); + controller.push(took); } } else { missing[i] = true; @@ -58,7 +55,7 @@ public class ProcessingCraftingTask implements ICraftingTask { } } } else { - missingMachine = true; + return true; } for (int i = 0; i < satisfied.length; ++i) { @@ -78,6 +75,7 @@ public class ProcessingCraftingTask implements ICraftingTask { return true; } } + return false; } @@ -86,14 +84,15 @@ public class ProcessingCraftingTask implements ICraftingTask { // NO OP } + @Override + public void onCancelled(TileController controller) { + // NO OP + } + @Override public String getInfo() { StringBuilder builder = new StringBuilder(); - if (missingMachine) { - builder.append(TextFormatting.RED).append("{missing_machine}").append(TextFormatting.RESET).append("\n"); - } - builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n"); int missingItems = 0; diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 9e66c289d..ce35d3917 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -24,7 +24,6 @@ gui.refinedstorage:crafting_monitor=Crafting Monitor gui.refinedstorage:crafting_monitor.missing_items=Missing items: gui.refinedstorage:crafting_monitor.items_crafting=Items crafting: gui.refinedstorage:crafting_monitor.items_processing=Items processing: -gui.refinedstorage:crafting_monitor.missing_machine=Missing machine! gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:wireless_transmitter.distance=%d blocks gui.refinedstorage:crafter=Crafter diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index b303e9897..cb659db2d 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -24,7 +24,6 @@ gui.refinedstorage:crafting_monitor=Crafting Monitor gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items: gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften: gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken: -gui.refinedstorage:crafting_monitor.missing_machine=Ontbrekende machine! gui.refinedstorage:wireless_transmitter=Draadloze Zender gui.refinedstorage:wireless_transmitter.distance=%d blokken gui.refinedstorage:crafter=Crafter