improve canStartProcessing for CraftingStepProcess, #507
This commit is contained in:
@@ -80,20 +80,6 @@ public abstract class CraftingStep implements ICraftingStep {
|
|||||||
return pattern.getInputs().stream().filter(Objects::nonNull).collect(Collectors.toList());
|
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
|
@Override
|
||||||
public void setStartedProcessing() {
|
public void setStartedProcessing() {
|
||||||
startedProcessing = true;
|
startedProcessing = true;
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task;
|
|||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
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.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
@@ -22,12 +24,32 @@ public class CraftingStepProcess extends CraftingStep {
|
|||||||
super(network);
|
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
|
@Override
|
||||||
public void execute(Deque<ItemStack> toInsertItems, Deque<FluidStack> toInsertFluids) {
|
public void execute(Deque<ItemStack> toInsertItems, Deque<FluidStack> toInsertFluids) {
|
||||||
// @TODO: fluid handling
|
// @TODO: fluid handling
|
||||||
IItemHandler inventory = getPattern().getContainer().getFacingInventory();
|
IItemHandler inventory = getPattern().getContainer().getFacingInventory();
|
||||||
|
int compare = CraftingTask.DEFAULT_COMPARE | (getPattern().isOredict() ? IComparer.COMPARE_OREDICT : 0);
|
||||||
for (ItemStack insertStack : getToInsert()) {
|
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);
|
ItemHandlerHelper.insertItem(inventory, tookStack, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user