From e45ffa908e84304ea074d957ce8169e9087f2059 Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Tue, 25 Oct 2016 20:00:48 +0200 Subject: [PATCH 1/3] improve canStartProcessing for CraftingStepProcess, #507 --- .../autocrafting/task/CraftingStep.java | 14 ----------- .../task/CraftingStepProcess.java | 24 ++++++++++++++++++- 2 files changed, 23 insertions(+), 15 deletions(-) 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); } } From 8699bd6dd67064b17ff6e5909cd36d14d3e5a4ce Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Tue, 25 Oct 2016 20:12:59 +0200 Subject: [PATCH 2/3] actually use buckets when crafting, fixes #510 --- .../apiimpl/autocrafting/task/CraftingStepCraft.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java index 91e69caaa..f8b33f776 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; @@ -36,7 +37,8 @@ public class CraftingStepCraft extends CraftingStep { if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) { FluidStack fluidStack = fluids.get(fluidInItem, compare); - if (fluidStack != null && fluids.trackedRemove(fluidStack, fluidInItem.amount, true)) { + ItemStack bucket = items.get(RSUtils.EMPTY_BUCKET, compare); + if (bucket != null && fluidStack != null && fluids.trackedRemove(fluidStack, fluidInItem.amount, true) && items.remove(bucket, 1, true)) { continue; } } @@ -58,6 +60,7 @@ public class CraftingStepCraft extends CraftingStep { FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true); if (fluidInItem != null) { network.extractFluid(fluidInItem, fluidInItem.amount, compare); + network.extractItem(RSUtils.EMPTY_BUCKET, 1, compare); actualInputs.add(insertStack.copy()); } else { actualInputs.add(network.extractItem(insertStack, insertStack.stackSize, compare)); From 30e2a7afebdf9ad5d731e60db776deb0b94cfd5f Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Tue, 25 Oct 2016 20:19:43 +0200 Subject: [PATCH 3/3] null check outputs, fixes #513 --- .../apiimpl/autocrafting/task/CraftingStepCraft.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java index f8b33f776..8079293a0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java @@ -79,11 +79,15 @@ public class CraftingStepCraft extends CraftingStep { } for (ItemStack byproduct : (pattern.isOredict()? pattern.getByproducts(took) : pattern.getByproducts())) { - toInsertItems.add(byproduct.copy()); + if(byproduct != null) { + toInsertItems.add(byproduct.copy()); + } } for (ItemStack output : (pattern.isOredict() ? pattern.getOutputs(took) : pattern.getOutputs())) { - toInsertItems.add(output.copy()); + if(output != null) { + toInsertItems.add(output.copy()); + } } }