package modtweaker.mods.randomthings.handlers;
import lumien.randomthings.recipes.imbuing.ImbuingRecipe;
import lumien.randomthings.recipes.imbuing.ImbuingRecipeHandler;
import minetweaker.MineTweakerAPI;
import minetweaker.api.item.IItemStack;
import com.blamejared.mtlib.helpers.InputHelper;
import com.blamejared.mtlib.helpers.LogHelper;
import com.blamejared.mtlib.utils.BaseListAddition;
import com.blamejared.mtlib.utils.BaseListRemoval;
import net.minecraft.item.ItemStack;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenMethod;
/**
* Created by Jared on 7/16/2016.
*/
@ZenClass("mods.randomthings.ImbuingStation")
public class ImbuingStation {
@ZenMethod
public static void add(IItemStack output, IItemStack input, IItemStack ingredient1, IItemStack ingredient2, IItemStack ingredient3) {
MineTweakerAPI.apply(new Add(new ImbuingRecipe(InputHelper.toStack(input), InputHelper.toStack(output), InputHelper.toStack(ingredient1), InputHelper.toStack(ingredient2), InputHelper.toStack(ingredient3))));
}
@ZenMethod
public static void remove(IItemStack output) {
MineTweakerAPI.apply(new Remove(new ImbuingRecipe(null, InputHelper.toStack(output), null, null, null)));
}
private static class Add extends BaseListAddition<ImbuingRecipe> {
protected Add(ImbuingRecipe recipe) {
super("ImbuingStation", ImbuingRecipeHandler.imbuingRecipes);
this.recipes.add(recipe);
}
@Override
protected String getRecipeInfo(ImbuingRecipe recipe) {
StringBuilder build = new StringBuilder();
build.append(LogHelper.getStackDescription(recipe.getResult()));
build.append(LogHelper.getStackDescription(recipe.toImbue()));
for (ItemStack stack : recipe.getIngredients()) {
build.append(LogHelper.getStackDescription(stack));
}
return build.toString();
}
@Override
public void undo() {
if (this.successful.isEmpty()) {
return;
}
for (ImbuingRecipe recipe : this.successful) {
if (recipe != null) {
ImbuingRecipe toRemove = null;
for (ImbuingRecipe r : ImbuingRecipeHandler.imbuingRecipes) {
if (r.getResult().isItemEqual(recipe.getResult())) {
toRemove = r;
}
}
if (toRemove != null)
if (ImbuingRecipeHandler.imbuingRecipes.remove(toRemove)) {
} else {
LogHelper.logError(String.format("Error removing %s Recipe for %s", name, getRecipeInfo(recipe)));
}
} else {
LogHelper.logError(String.format("Error removing %s Recipe: null object", name));
}
}
}
}
private static class Remove extends BaseListRemoval<ImbuingRecipe> {
protected Remove(ImbuingRecipe recipe) {
super("ImbuingStation", ImbuingRecipeHandler.imbuingRecipes);
this.recipes.add(recipe);
}
@Override
public void apply() {
if (recipes.isEmpty()) {
return;
}
for (ImbuingRecipe recipe : this.recipes) {
if (recipe != null) {
ImbuingRecipe toRemove = null;
for (ImbuingRecipe r : ImbuingRecipeHandler.imbuingRecipes) {
if (r.getResult().isItemEqual(recipe.getResult())) {
toRemove = r;
}
}
if (toRemove != null)
if (ImbuingRecipeHandler.imbuingRecipes.remove(toRemove)) {
successful.add(recipe);
} else {
LogHelper.logError(String.format("Error removing %s Recipe for %s", name, getRecipeInfo(recipe)));
}
} else {
LogHelper.logError(String.format("Error removing %s Recipe: null object", name));
}
}
}
@Override
protected String getRecipeInfo(ImbuingRecipe recipe) {
StringBuilder build = new StringBuilder();
build.append(LogHelper.getStackDescription(recipe.getResult()) + ", ");
for (ItemStack stack : recipe.getIngredients()) {
build.append(LogHelper.getStackDescription(stack) + " ");
}
return build.toString();
}
}
}