Files
ModTweaker/src/main/java/modtweaker2/mods/factorization/handlers/Crystallizer.java
T
2015-07-07 14:17:47 +02:00

84 lines
3.1 KiB
Java

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<Object> {
@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<Object> recipes = new LinkedList<Object>();
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<Object> {
@SuppressWarnings("unchecked")
public Remove(List<Object> recipes) {
super(Crystallizer.name, FactorizationHelper.crystallizer, recipes);
}
@Override
public String getRecipeInfo(Object recipe) {
return InputHelper.getStackDescription((ItemStack)ReflectionHelper.getObject(recipe, "output"));
}
}
}