From af06c44b1ed1daa896ec4167a7562af5e5a51125 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 5 Oct 2016 22:44:10 +0200 Subject: [PATCH] Detect when inserted for processing patterns --- .../api/autocrafting/task/IProcessable.java | 10 ++-- .../autocrafting/task/CraftingTaskNormal.java | 17 ++---- .../autocrafting/task/Processable.java | 51 ++++++++++++++---- .../refinedstorage/tile/TileController.java | 15 ++++-- .../textures/gui/crafting_monitor.png | Bin 1877 -> 2024 bytes 5 files changed, 63 insertions(+), 30 deletions(-) diff --git a/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java b/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java index afdd8df8b..8910ca648 100755 --- a/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java +++ b/src/main/java/refinedstorage/api/autocrafting/task/IProcessable.java @@ -3,10 +3,14 @@ package refinedstorage.api.autocrafting.task; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; -import java.util.Deque; - public interface IProcessable { ICraftingPattern getPattern(); - Deque getToInsert(); + ItemStack getStackToInsert(); + + void nextStack(); + + boolean hasReceivedOutputs(); + + boolean onReceiveOutput(ItemStack stack); } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index 4ec7f41f1..e56c92a9f 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -41,19 +41,12 @@ public class CraftingTaskNormal implements ICraftingTask { @Override public void onCancelled() { - } private void calculate(IGroupedItemStorage storage, ICraftingPattern pattern, boolean basePattern) { for (int i = 0; i < quantity; ++i) { if (pattern.isProcessing()) { - IProcessable processable = new Processable(pattern); - - for (int j = pattern.getInputs().size() - 1; j >= 0; --j) { - processable.getToInsert().push(pattern.getInputs().get(j).copy()); - } - - toProcess.add(processable); + toProcess.add(new Processable(pattern)); } for (ItemStack input : pattern.getInputs()) { @@ -102,13 +95,13 @@ public class CraftingTaskNormal implements ICraftingTask { public boolean update() { for (IProcessable processable : toProcess) { - if (processable.getPattern().getContainer().getFacingInventory() != null && !processable.getToInsert().isEmpty()) { - ItemStack toInsert = NetworkUtils.extractItem(network, processable.getToInsert().peek(), 1); + if (processable.getPattern().getContainer().getFacingInventory() != null && processable.getStackToInsert() != null) { + ItemStack toInsert = NetworkUtils.extractItem(network, processable.getStackToInsert(), 1); if (ItemHandlerHelper.insertItem(processable.getPattern().getContainer().getFacingInventory(), toInsert, true) == null) { ItemHandlerHelper.insertItem(processable.getPattern().getContainer().getFacingInventory(), toInsert, false); - processable.getToInsert().pop(); + processable.nextStack(); } } } @@ -121,7 +114,7 @@ public class CraftingTaskNormal implements ICraftingTask { } } - if (toTake.isEmpty() && missing.isEmpty()) { + if (toTake.isEmpty() && missing.isEmpty() && toProcess.stream().allMatch(IProcessable::hasReceivedOutputs)) { for (ItemStack output : pattern.getOutputs()) { // @TODO: Handle remainder network.insertItem(output, output.stackSize, false); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java index 3acd1b0ab..0b3098708 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/Processable.java @@ -3,16 +3,16 @@ package refinedstorage.apiimpl.autocrafting.task; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.task.IProcessable; - -import java.util.ArrayDeque; -import java.util.Deque; +import refinedstorage.api.storage.CompareUtils; public class Processable implements IProcessable { private ICraftingPattern pattern; - private Deque toInsert = new ArrayDeque<>(); + private int pos; + private boolean satisfied[]; public Processable(ICraftingPattern pattern) { this.pattern = pattern; + this.satisfied = new boolean[pattern.getOutputs().size()]; } @Override @@ -21,15 +21,44 @@ public class Processable implements IProcessable { } @Override - public Deque getToInsert() { - return toInsert; + public void nextStack() { + ++pos; } @Override - public String toString() { - return "ProcessablePattern{" + - "pattern=" + pattern + - ", toInsert=" + toInsert + - '}'; + public ItemStack getStackToInsert() { + if (pos > pattern.getInputs().size() - 1) { + return null; + } + + return pattern.getInputs().get(pos); + } + + @Override + public boolean hasReceivedOutputs() { + for (boolean item : satisfied) { + if (!item) { + return false; + } + } + + return true; + } + + @Override + public boolean onReceiveOutput(ItemStack stack) { + for (int i = 0; i < pattern.getOutputs().size(); ++i) { + if (!satisfied[i]) { + ItemStack item = pattern.getOutputs().get(i); + + if (CompareUtils.compareStackNoQuantity(stack, item)) { + satisfied[i] = true; + + return true; + } + } + } + + return false; } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 9fefc257d..b37ddd2d1 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -23,6 +23,7 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.task.ICraftingTask; +import refinedstorage.api.autocrafting.task.IProcessable; import refinedstorage.api.network.*; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IItemGridHandler; @@ -530,17 +531,23 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (!simulate && inserted > 0) { itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); - /*for (int i = 0; i < inserted; ++i) { + for (int i = 0; i < inserted; ++i) { for (ICraftingTask task : craftingTasks) { if (inserted == 0) { break; } - if (onInserted(stack, task)) { - inserted--; + for (IProcessable processable : task.getToProcess()) { + if (inserted == 0) { + break; + } + + if (processable.onReceiveOutput(stack)) { + inserted--; + } } } - }*/ + } } return remainder; diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_monitor.png index 6274b6a16c0ceeb2fe5b862cdfe8ff35143d2514..357562a5a6eff9a2ee9ec245f198c65e37ec7947 100755 GIT binary patch delta 884 zcmcc0_kw>z2n*L%1_r*ZjLC&FPE3wtF|IdqX32iTz`$(f>Eakt5%>0PW7cg0k+zF# zytnWB&z=76&*?aENw15&+C_G3Y%6bsw>unM^Q35Z?6a3<`%b_8WaiJxG=1i||KF_Q z9_Sx`vxHSLHxn-`q=kk@58lT+wT{u zfAIbIwWF`?OY7IH`S+O-sCZ{PD@fDc$&4@f7#JM3oo2pJYX{YC(lB4%n(0JYWj}jI z&1(*Y+fNx^*vSJWp*CHxmTY(jIuBIk@Jvn& zsEOf=AKLO(6}(>9qaC= zZY|$`G_q&;R{ySQq1`d#UR` z-1S>mJwIwC+X?mD)gKQ3*(wTFgYYtl>u`7WoIvfP43+OUh5yJ?zrNRhZ3y#|$=gDI zB>ua_1=Rp^5s16so$t97Q)43YH`ybR<>)gNQ!L(vl zh5KLcMop`;T~XSwnR!C<_GwGcgx|9|aFg-G!RXUL&$RPpAG~3B@?dSM=I5!~`3lMy ziauQ1G$r=usc3c!YX-}T?8s9!PuDWfk!_IKvsEW`-=}Mg=lC4>?nO;Aim!alkj}2a zp0DdYbNwEm`Jdf1t}o|xSm!U@5Ho+9I{S{h{}@u$nfvu`b$tN2+tbz0Wt~$(698pJ BU77#@ delta 736 zcmaFCf0b`T2n*LX1_r)ujOR}5Tsk?9#kk&JEf?1T1_q|(o-U3d6>)FxUhKMUAkY?Q zes){se{nzQ=l6F^m@VM;s$)(+YqQ>xj|Vp>M3wE1+g`fs+V%GeZiH3+KOMgJ z0N;nLUdw}b9^h5jtuMg9z+hA!2_zXN+!f~lQZsk!0LeED_OnXsq+V?^5_(X+{+;vO z`u{JtF)=VSoQV|!DF%ZEnLDaLh7a41o2!2^Onff{5uQ+fpBchpNO`vj$SSbcHaCo& z#V_zvj}anK`P~+(!r_@7H<0;#bCK}nrFaafC&rZDkVsU{Bp>P_!0 z_TDZEQUe4q%^>!JpZm|2MoaQcsGh#KvD~^+ZtoT&DTVl3iyP%XS8Ib*00DBi9oR8@ z&Z?;g8FrRiN>yy1{QRP~_F~3QOKqio81CN=bQu_&xRVMED+Y$1-6vPpM@jN*a05yK zC2E+>1l+*|kuuHD(7gIS!QFE}!{|@!!9c_oBDl z81C$A3f;vYd$U3JI@f{qaj9!68BZLHJr(hpX+rbvDI1@$DzKMpCZFYY@Z@_JbZnM5 zFv^$qnCdfF?(mk(j$