package modtweaker.mods.embers.handlers; import com.blamejared.mtlib.helpers.LogHelper; import com.blamejared.mtlib.utils.*; import minetweaker.MineTweakerAPI; import minetweaker.api.liquid.ILiquidStack; import net.minecraftforge.fluids.FluidStack; import stanhebben.zenscript.annotations.*; import teamroots.embers.compat.jei.MixingRecipeWrapper; import teamroots.embers.recipe.*; import java.util.*; import static com.blamejared.mtlib.helpers.InputHelper.toFluid; @ZenClass("mods.embers.Mixer") public class Mixer { public static String name = "Embers Mixer"; @ZenMethod public static void addRecipe(ILiquidStack input1, ILiquidStack input2, ILiquidStack input3, ILiquidStack input4, ILiquidStack output) { ArrayList<FluidStack> fluids = new ArrayList<>(); if(input1 != null) { fluids.add(toFluid(input1)); } if(input2 != null) { fluids.add(toFluid(input2)); } if(input3 != null) { fluids.add(toFluid(input3)); } if(input4 != null) { fluids.add(toFluid(input4)); } MineTweakerAPI.apply(new Add(new FluidMixingRecipe(fluids.toArray(new FluidStack[fluids.size()]), toFluid(output)))); } @ZenMethod public static void remove(ILiquidStack output) { List<FluidMixingRecipe> recipes = new ArrayList<>(); for(int i = 0; i < RecipeRegistry.mixingRecipes.size(); i++) { if(RecipeRegistry.mixingRecipes.get(i).output.getFluid().getName().equals(toFluid(output).getFluid().getName())) { recipes.add(RecipeRegistry.mixingRecipes.get(i)); } } if(!recipes.isEmpty()) { for(int i = 0; i < recipes.size(); i++) { MineTweakerAPI.apply(new Remove(recipes.get(i))); } } else { LogHelper.logWarning(String.format("No %s Recipe found for output %s. Command ignored!", Mixer.name, output.toString())); } } private static class Add extends BaseListAddition<FluidMixingRecipe> { public Add(FluidMixingRecipe recipe) { super(Mixer.name, RecipeRegistry.mixingRecipes); this.recipes.add(recipe); } @Override public void apply() { super.apply(); successful.forEach(rec ->{ MineTweakerAPI.getIjeiRecipeRegistry().addRecipe(new MixingRecipeWrapper(rec)); }); } @Override public void undo() { super.undo(); successful.forEach(rec ->{ MineTweakerAPI.getIjeiRecipeRegistry().removeRecipe(new MixingRecipeWrapper(rec)); }); } @Override protected String getRecipeInfo(FluidMixingRecipe arg0) { return LogHelper.getStackDescription(arg0.output); } } private static class Remove extends BaseListRemoval<FluidMixingRecipe> { public Remove(FluidMixingRecipe recipe) { super(Mixer.name, RecipeRegistry.mixingRecipes); this.recipes.remove(recipe); } @Override public void apply() { super.apply(); successful.forEach(rec ->{ MineTweakerAPI.getIjeiRecipeRegistry().removeRecipe(new MixingRecipeWrapper(rec)); }); } @Override public void undo() { super.undo(); successful.forEach(rec ->{ MineTweakerAPI.getIjeiRecipeRegistry().addRecipe(new MixingRecipeWrapper(rec)); }); } @Override protected String getRecipeInfo(FluidMixingRecipe arg0) { return LogHelper.getStackDescription(arg0.output); } } }