package mekanism.common.recipe.machines; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; import mekanism.api.gas.GasTank; import mekanism.common.recipe.inputs.AdvancedMachineInput; import mekanism.common.recipe.outputs.ItemStackOutput; import net.minecraft.item.ItemStack; public abstract class AdvancedMachineRecipe<RECIPE extends AdvancedMachineRecipe<RECIPE>> extends MachineRecipe<AdvancedMachineInput, ItemStackOutput, RECIPE> { public AdvancedMachineRecipe(AdvancedMachineInput input, ItemStackOutput output) { super(input, output); } public AdvancedMachineRecipe(ItemStack input, String gasName, ItemStack output) { this(new AdvancedMachineInput(input, GasRegistry.getGas(gasName)), new ItemStackOutput(output)); } public AdvancedMachineRecipe(ItemStack input, Gas gas, ItemStack output) { this(new AdvancedMachineInput(input, gas), new ItemStackOutput(output)); } public boolean canOperate(ItemStack[] inventory, int inputIndex, int outputIndex, GasTank gasTank, int amount) { return getInput().useItem(inventory, inputIndex, false) && getInput().useSecondary(gasTank, amount, false) && getOutput().applyOutputs(inventory, outputIndex, false); } public void operate(ItemStack[] inventory, int inputIndex, int outputIndex, GasTank gasTank, int needed) { if(getInput().useItem(inventory, inputIndex, true) && getInput().useSecondary(gasTank, needed, true)) { getOutput().applyOutputs(inventory, outputIndex, true); } } }