|  | package ic2.api.recipe; | 
|  |  | 
|  | import java.util.Map; | 
|  |  | 
|  | import net.minecraft.item.ItemStack; | 
|  |  | 
|  | import net.minecraftforge.fluids.FluidStack; | 
|  |  | 
|  | public interface ICannerEnrichRecipeManager { | 
|  | /** | 
|  | * Adds a recipe to the machine. | 
|  | * | 
|  | * @param input Fluid input | 
|  | * @param additive Item to enrich the fluid with | 
|  | * @param output Output fluid | 
|  | */ | 
|  | public void addRecipe(FluidStack input, IRecipeInput additive, FluidStack output); | 
|  |  | 
|  | /** | 
|  | * Gets the recipe output for the given input. | 
|  | * | 
|  | * @param input Fluid input | 
|  | * @param additive Item to enrich the fluid with | 
|  | * @param adjustInput modify the input according to the recipe's requirements | 
|  | * @param acceptTest allow input or additive to be null to see if either of them is part of a recipe | 
|  | * @return Recipe output, or null if none, output fluid in nbt | 
|  | */ | 
|  | public RecipeOutput getOutputFor(FluidStack input, ItemStack additive, boolean adjustInput, boolean acceptTest); | 
|  |  | 
|  | /** | 
|  | * Gets a list of recipes. | 
|  | * | 
|  | * You're a mad evil scientist if you ever modify this. | 
|  | * | 
|  | * @return List of recipes | 
|  | */ | 
|  | public Map<Input, FluidStack> getRecipes(); | 
|  |  | 
|  |  | 
|  | public static class Input { | 
|  | public Input(FluidStack fluid, IRecipeInput additive) { | 
|  | this.fluid = fluid; | 
|  | this.additive = additive; | 
|  | } | 
|  |  | 
|  | public boolean matches(FluidStack fluid, ItemStack additive) { | 
|  | return (this.fluid == null || this.fluid.isFluidEqual(fluid)) && | 
|  | this.additive.matches(additive); | 
|  | } | 
|  |  | 
|  | public final FluidStack fluid; | 
|  | public final IRecipeInput additive; | 
|  | } | 
|  | } |