package buildcraft.core.recipes;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import buildcraft.api.recipes.IFlexibleCrafter;
/**
* Use this class for simulated crafts.
*/
public class FakeFlexibleCrafter implements IFlexibleCrafter {
private final IFlexibleCrafter original;
private int[] usedItems, usedFluids;
public FakeFlexibleCrafter(IFlexibleCrafter original) {
this.original = original;
this.usedFluids = new int[original.getCraftingFluidStackSize()];
this.usedItems = new int[original.getCraftingItemStackSize()];
}
@Override
public ItemStack getCraftingItemStack(int slotId) {
ItemStack output = original.getCraftingItemStack(slotId);
if (usedItems[slotId] == 0) {
return output;
} else if (output.stackSize <= usedItems[slotId]) {
return null;
}
output = output.copy();
output.stackSize -= usedItems[slotId];
return output;
}
@Override
public ItemStack decrCraftingItemStack(int slotId, int amount) {
ItemStack output = original.getCraftingItemStack(slotId);
int result = Math.min(output.stackSize - usedItems[slotId], amount);
usedItems[slotId] += result;
if (result == 0) {
return null;
}
ItemStack decrOut = output.copy();
decrOut.stackSize = result;
return decrOut;
}
@Override
public int getCraftingItemStackSize() {
return this.usedItems.length;
}
@Override
public FluidStack getCraftingFluidStack(int slotId) {
FluidStack output = original.getCraftingFluidStack(slotId);
if (usedFluids[slotId] == 0) {
return output;
} else if (output.amount <= usedFluids[slotId]) {
return null;
}
output = output.copy();
output.amount -= usedFluids[slotId];
return output;
}
@Override
public FluidStack decrCraftingFluidStack(int slotId, int amount) {
FluidStack output = original.getCraftingFluidStack(slotId);
int result = Math.min(output.amount - usedFluids[slotId], amount);
usedFluids[slotId] += result;
if (result == 0) {
return null;
}
FluidStack decrOut = output.copy();
decrOut.amount = result;
return decrOut;
}
@Override
public int getCraftingFluidStackSize() {
return this.usedFluids.length;
}
}