diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java index 3efa158a4..867b03ab5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java @@ -80,20 +80,6 @@ public abstract class CraftingStep implements ICraftingStep { return pattern.getInputs().stream().filter(Objects::nonNull).collect(Collectors.toList()); } - @Override - public boolean canStartProcessing(IItemStackList items, IFluidStackList fluids) { - for (ItemStack stack : getToInsert()) { - ItemStack actualStack = items.get(stack, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT | (pattern.isOredict() ? IComparer.COMPARE_OREDICT : 0)); - - if (actualStack == null || actualStack.stackSize == 0 || !items.trackedRemove(actualStack, stack.stackSize, true)) { - items.undo(); - return false; - } - } - items.undo(); - return true; - } - @Override public void setStartedProcessing() { startedProcessing = true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java index 2d6116f60..5cfc3813c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepProcess.java @@ -3,6 +3,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.api.util.IFluidStackList; +import com.raoulvdberge.refinedstorage.api.util.IItemStackList; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; @@ -22,12 +24,32 @@ public class CraftingStepProcess extends CraftingStep { super(network); } + @Override + public boolean canStartProcessing(IItemStackList items, IFluidStackList fluids) { + IItemHandler inventory = getPattern().getContainer().getFacingInventory(); + if (inventory != null) { + for (ItemStack stack : getToInsert()) { + ItemStack actualStack = items.get(stack, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT | (pattern.isOredict() ? IComparer.COMPARE_OREDICT : 0)); + + boolean canInsert = ItemHandlerHelper.insertItem(inventory, ItemHandlerHelper.copyStackWithSize(actualStack, stack.stackSize), true) == null; + if (actualStack == null || actualStack.stackSize == 0 || !items.trackedRemove(actualStack, stack.stackSize, true) && canInsert) { + items.undo(); + return false; + } + } + items.undo(); + return true; + } + return false; + } + @Override public void execute(Deque toInsertItems, Deque toInsertFluids) { // @TODO: fluid handling IItemHandler inventory = getPattern().getContainer().getFacingInventory(); + int compare = CraftingTask.DEFAULT_COMPARE | (getPattern().isOredict() ? IComparer.COMPARE_OREDICT : 0); for (ItemStack insertStack : getToInsert()) { - ItemStack tookStack = network.extractItem(insertStack, insertStack.stackSize, CraftingTask.DEFAULT_COMPARE | (getPattern().isOredict() ? IComparer.COMPARE_OREDICT : 0)); + ItemStack tookStack = network.extractItem(insertStack, insertStack.stackSize, compare); ItemHandlerHelper.insertItem(inventory, tookStack, false); } }