Merge remote-tracking branch 'origin/mc1.10' into mc1.10

This commit is contained in:
Raoul Van den Berge
2016-10-25 21:17:00 +02:00
3 changed files with 33 additions and 18 deletions

View File

@@ -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;

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
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;
@@ -36,7 +37,8 @@ public class CraftingStepCraft extends CraftingStep {
if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) { if (fluidInItem != null && RSUtils.hasFluidBucket(fluidInItem)) {
FluidStack fluidStack = fluids.get(fluidInItem, compare); 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; continue;
} }
} }
@@ -58,6 +60,7 @@ public class CraftingStepCraft extends CraftingStep {
FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true); FluidStack fluidInItem = RSUtils.getFluidFromStack(insertStack, true);
if (fluidInItem != null) { if (fluidInItem != null) {
network.extractFluid(fluidInItem, fluidInItem.amount, compare); network.extractFluid(fluidInItem, fluidInItem.amount, compare);
network.extractItem(RSUtils.EMPTY_BUCKET, 1, compare);
actualInputs.add(insertStack.copy()); actualInputs.add(insertStack.copy());
} else { } else {
actualInputs.add(network.extractItem(insertStack, insertStack.stackSize, compare)); actualInputs.add(network.extractItem(insertStack, insertStack.stackSize, compare));
@@ -76,11 +79,15 @@ public class CraftingStepCraft extends CraftingStep {
} }
for (ItemStack byproduct : (pattern.isOredict()? pattern.getByproducts(took) : pattern.getByproducts())) { 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())) { for (ItemStack output : (pattern.isOredict() ? pattern.getOutputs(took) : pattern.getOutputs())) {
toInsertItems.add(output.copy()); if(output != null) {
toInsertItems.add(output.copy());
}
} }
} }

View File

@@ -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);
} }
} }