package crazypants.enderio.machine.recipe;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import crazypants.enderio.machine.MachineRecipeInput;
import crazypants.util.EE3Util;
public class BasicManyToOneRecipe implements IManyToOneRecipe {
private final int energyRequired;
private final ItemStack output;
private final RecipeBonusType bonusType;
private final Recipe recipe;
public BasicManyToOneRecipe(Recipe recipe) {
this.recipe = recipe;
this.output = recipe.getOutputs()[0].getOutput().copy();
energyRequired = recipe.getEnergyRequired();
bonusType = recipe.getBonusType();
EE3Util.registerBasicToManyRecipe(recipe);
}
@Override
public boolean isValidRecipeComponents(ItemStack... items) {
List<RecipeInput> inputs = new ArrayList<RecipeInput>(Arrays.asList(recipe.getInputs()));
for (ItemStack is : items) {
if(is != null) {
RecipeInput remove = null;
for (RecipeInput ri : inputs) {
if(ri.isInput(is)) {
remove = ri;
break;
}
}
if(remove != null) {
inputs.remove(remove);
} else {
return false;
}
}
}
return true;
}
@Override
public ItemStack getOutput() {
return output;
}
@Override
public boolean isValidInput(int slot, ItemStack input) {
if(input == null) {
return false;
}
return getRecipeComponentFromInput(input) != null;
}
@Override
public boolean isValidInput(FluidStack fluid) {
return false;
}
@Override
public boolean isValid() {
return recipe != null && recipe.isValid();
}
@Override
public int getEnergyRequired() {
return energyRequired;
}
@Override
public RecipeBonusType getBonusType() {
return bonusType;
}
@Override
public RecipeOutput[] getOutputs() {
return recipe.getOutputs();
}
@Override
public List<ItemStack> getInputStacks() {
return recipe.getInputStacks();
}
@Override
public boolean isInputForRecipe(MachineRecipeInput... inputs) {
if(inputs == null) {
return false;
}
return recipe.isInputForRecipe(inputs);
}
@Override
public RecipeInput[] getInputs() {
return recipe.getInputs();
}
@Override
public List<FluidStack> getInputFluidStacks() {
return Collections.emptyList();
}
private ItemStack getRecipeComponentFromInput(ItemStack input) {
if(input == null) {
return null;
}
for (RecipeInput ri : recipe.getInputs()) {
if(ri.isInput(input)) {
return ri.getInput();
}
}
return null;
}
}