From 92d820c16fe0aaf8a961aae20163b06acc90b67c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 29 Sep 2016 21:56:37 +0200 Subject: [PATCH] Fixed autocrafting getting stuck with processing patterns #389 --- CHANGELOG.md | 1 + .../api/autocrafting/task/ICraftingTask.java | 3 +- .../autocrafting/task/CraftingTaskNormal.java | 2 +- .../task/CraftingTaskProcessing.java | 50 +++++++++---------- .../tile/ClientCraftingTask.java | 11 ++-- .../tile/TileCraftingMonitor.java | 7 +-- 6 files changed, 34 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb6035394..ea5059f5b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.1.2 - It is now possible to start a crafting task even if the crafting preview says you can't (raoulvdberge) - Fixed crash when changing screens in autocrafting (raoulvdberge) +- Fixed autocrafting getting stuck with processing patterns (raoulvdberge) ### 1.1.1 - Fixed crash on servers (raoulvdberge) diff --git a/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java b/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java index aa1f648ed..775103a24 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/ICraftingTask.java @@ -52,9 +52,10 @@ public interface ICraftingTask { /** * Returns the status of this crafting task that is used for the tooltip in the crafting monitor. * + * @param network the network * @return the status */ - String getStatus(); + String getStatus(INetworkMaster network); /** * @return the progress for display in the crafting monitor, or -1 to not display any progress diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index 9644942a2..a674b07a0 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -54,7 +54,7 @@ public class CraftingTaskNormal extends CraftingTask { } @Override - public String getStatus() { + public String getStatus(INetworkMaster network) { StringBuilder builder = new StringBuilder(); boolean missingItems = false; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java index 60bf17389..c8d4b75a0 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskProcessing.java @@ -20,8 +20,6 @@ public class CraftingTaskProcessing extends CraftingTask { private boolean satisfiedInsertion[]; private BlockPos tileInUse; - private boolean waitingOnTileInUse; - public CraftingTaskProcessing(ICraftingPattern pattern, int depth) { super(pattern, depth); @@ -64,18 +62,10 @@ public class CraftingTaskProcessing extends CraftingTask { ICraftingPatternContainer container = pattern.getContainer(); - if (container.getFacingTile() == null) { - tileInUse = null; - - waitingOnTileInUse = false; - } - - if (!took.isEmpty() && container.getFacingTile() != null) { - waitingOnTileInUse = isTileInUse(network); - - if (!waitingOnTileInUse) { - tileInUse = pattern.getContainer().getFacingTile().getPos(); + if (container.getFacingTile() != null && !isTileInUse(network)) { + tileInUse = pattern.getContainer().getFacingTile().getPos(); + if (!took.isEmpty()) { ItemStack toInsert = took.get(0); if (ItemHandlerHelper.insertItem(container.getFacingInventory(), toInsert, true) == null) { @@ -84,6 +74,8 @@ public class CraftingTaskProcessing extends CraftingTask { took.remove(0); } } + } else { + tileInUse = null; } return isReady(); @@ -110,9 +102,11 @@ public class CraftingTaskProcessing extends CraftingTask { } private boolean isTileInUse(INetworkMaster network) { - for (ICraftingTask task : network.getCraftingTasks()) { - if (isTileInUse(task)) { - return true; + if (tileInUse == null) { + for (ICraftingTask task : network.getCraftingTasks()) { + if (isTileInUse(task)) { + return true; + } } } @@ -120,17 +114,19 @@ public class CraftingTaskProcessing extends CraftingTask { } private boolean isTileInUse(ICraftingTask task) { - if (task != this) { - if (task.getChild() != null) { - return isTileInUse(task.getChild()); - } + if (task == this) { + return false; + } - if (task instanceof CraftingTaskProcessing) { - CraftingTaskProcessing other = (CraftingTaskProcessing) task; + if (task.getChild() != null) { + return isTileInUse(task.getChild()); + } - if (other.tileInUse != null && other.tileInUse.equals(pattern.getContainer().getFacingTile().getPos()) && !other.pattern.equals(pattern)) { - return true; - } + if (task instanceof CraftingTaskProcessing) { + CraftingTaskProcessing other = (CraftingTaskProcessing) task; + + if (other.tileInUse != null && other.tileInUse.equals(pattern.getContainer().getFacingTile().getPos()) && !other.pattern.equals(pattern)) { + return true; } } @@ -175,7 +171,7 @@ public class CraftingTaskProcessing extends CraftingTask { } @Override - public String getStatus() { + public String getStatus(INetworkMaster network) { StringBuilder builder = new StringBuilder(); boolean missingItems = false; @@ -219,7 +215,7 @@ public class CraftingTaskProcessing extends CraftingTask { if (pattern.getContainer().getFacingTile() == null) { builder.append("B=gui.refinedstorage:crafting_monitor.machine_none"); - } else if (waitingOnTileInUse) { + } else if (isTileInUse(network)) { builder.append("B=gui.refinedstorage:crafting_monitor.machine_in_use"); } } diff --git a/src/main/java/refinedstorage/tile/ClientCraftingTask.java b/src/main/java/refinedstorage/tile/ClientCraftingTask.java index 21a6870b3..a59f52c68 100755 --- a/src/main/java/refinedstorage/tile/ClientCraftingTask.java +++ b/src/main/java/refinedstorage/tile/ClientCraftingTask.java @@ -2,6 +2,7 @@ package refinedstorage.tile; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.task.ICraftingTask; +import refinedstorage.api.network.INetworkMaster; import java.util.List; @@ -26,11 +27,11 @@ public class ClientCraftingTask { this.progress = progress; } - public ClientCraftingTask(String status, List outputs, int progress, ICraftingTask child) { - this.status = status; - this.outputs = outputs; - this.progress = progress; - this.child = child != null ? new ClientCraftingTask(child.getStatus(), child.getPattern().getOutputs(), child.getProgress(), child.getChild()) : null; + public ClientCraftingTask(INetworkMaster network, ICraftingTask task) { + this.status = task.getStatus(network); + this.outputs = task.getPattern().getOutputs(); + this.progress = task.getProgress(); + this.child = task.getChild() != null ? new ClientCraftingTask(network, task.getChild()) : null; } public ItemStack getOutput() { diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index 3373f1d78..2a0bc582e 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -15,12 +15,7 @@ public class TileCraftingMonitor extends TileNode { @Override public List getValue(TileCraftingMonitor tile) { if (tile.connected) { - return tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask( - t.getStatus(), - t.getPattern().getOutputs(), - t.getProgress(), - t.getChild() - )).collect(Collectors.toList()); + return tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask(tile.network, t)).collect(Collectors.toList()); } else { return Collections.emptyList(); }