package modtweaker2.mods.factorization.handlers; import static modtweaker2.helpers.InputHelper.toIItemStack; import static modtweaker2.helpers.InputHelper.toStack; import static modtweaker2.helpers.StackHelper.matches; import java.util.LinkedList; import java.util.List; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; import modtweaker2.helpers.InputHelper; import modtweaker2.helpers.LogHelper; import modtweaker2.helpers.ReflectionHelper; import modtweaker2.mods.factorization.FactorizationHelper; import modtweaker2.utils.BaseListAddition; import modtweaker2.utils.BaseListRemoval; import net.minecraft.item.ItemStack; import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenMethod; @ZenClass("mods.factorization.Crystallizer") public class Crystallizer { public static final String name = "Factorization Crystallizer"; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @ZenMethod public static void addRecipe(IItemStack input, IItemStack output, IItemStack solution, double output_count) { Object recipe = FactorizationHelper.getCrystallizerRecipe(toStack(input), toStack(output), toStack(solution), (float) output_count); MineTweakerAPI.apply(new Add(recipe)); } private static class Add extends BaseListAddition { @SuppressWarnings("unchecked") public Add(Object recipe) { super(Crystallizer.name, FactorizationHelper.crystallizer); recipes.add(recipe); } @Override public String getRecipeInfo(Object recipe) { return InputHelper.getStackDescription((ItemStack)ReflectionHelper.getObject(recipe, "output")); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @ZenMethod public static void removeRecipe(IIngredient output) { List recipes = new LinkedList(); for (Object r : FactorizationHelper.crystallizer) { if (r != null) { ItemStack out = (ItemStack) ReflectionHelper.getObject(r, "output");; if (out != null && matches(output, toIItemStack(out))) { recipes.add(r); } } } if(!recipes.isEmpty()) { MineTweakerAPI.apply(new Remove(recipes)); } else { LogHelper.logWarning(String.format("No %s Recipe found for %s. Command ignored!", Crystallizer.name, output.toString())); } } private static class Remove extends BaseListRemoval { @SuppressWarnings("unchecked") public Remove(List recipes) { super(Crystallizer.name, FactorizationHelper.crystallizer, recipes); } @Override public String getRecipeInfo(Object recipe) { return InputHelper.getStackDescription((ItemStack)ReflectionHelper.getObject(recipe, "output")); } } }