package modtweaker.mods.refinedstorage.handlers; 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 com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe; import com.raoulvdberge.refinedstorage.apiimpl.API; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IItemStack; import net.minecraft.item.ItemStack; import stanhebben.zenscript.annotations.Optional; import stanhebben.zenscript.annotations.ZenClass; import stanhebben.zenscript.annotations.ZenMethod; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; @ZenClass("mods.refinedstorage.Solderer") public class Solderer { @ZenMethod public static void add(IItemStack output, int time, IItemStack row2) { add(output, time, null, row2, null); } @ZenMethod public static void add(IItemStack output, int time, IItemStack row1, IItemStack row2, @Optional IItemStack row3) { MineTweakerAPI.apply(new Add(createISoldererRecipe(InputHelper.toStack(output), time, InputHelper.toStack(row1), InputHelper.toStack(row2), InputHelper.toStack(row3)))); } @ZenMethod public static void remove(IItemStack output) { MineTweakerAPI.apply(new Remove(new SoldererRemovalRecipe(InputHelper.toStack(output)))); } private static ISoldererRecipe createISoldererRecipe(ItemStack output, int time, ItemStack... rows) { return API.instance().getSoldererRegistry().createSimpleRecipe(output, time, rows); } private static class Add extends BaseListAddition<ISoldererRecipe> { protected Add(ISoldererRecipe recipe) { super("Solderer", API.instance().getSoldererRegistry().getRecipes()); this.recipes.add(recipe); } @Override protected String getRecipeInfo(ISoldererRecipe recipe) { StringBuilder build = new StringBuilder(); build.append("ISoldererRecipe"); build.append(LogHelper.getStackDescription(recipe.getResult())).append("; "); build.append("duration:").append(recipe.getDuration()).append("; "); for (int i = 0; i < 3; i++) { build.append(LogHelper.getStackDescription(recipe.getRow(i))).append(", "); } build.setLength(build.length() - 2); return build.toString(); } @Override public void undo() { for (ISoldererRecipe recipe : this.successful) { if (recipe != null) { if (API.instance().getSoldererRegistry().removeRecipe(recipe.getResult(), recipe.getRow(0), recipe.getRow(1), recipe.getRow(2)).size() > 0) { } 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<ISoldererRecipe> { protected Remove(ISoldererRecipe recipe) { super("Solderer", API.instance().getSoldererRegistry().getRecipes()); this.recipes.add(recipe); } @Override public void apply() { if (recipes.isEmpty()) { return; } for (ISoldererRecipe recipe : this.recipes) { if (recipe != null) { List<ISoldererRecipe> removed = API.instance().getSoldererRegistry().removeRecipe(recipe.getResult()); if (removed.size() > 0) { successful.addAll(removed); } 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(ISoldererRecipe recipe) { return "SoldererRemovalRecipe:" + LogHelper.getStackDescription(recipe.getResult()); } } private static class SoldererRemovalRecipe implements ISoldererRecipe { private ItemStack output; protected SoldererRemovalRecipe(ItemStack output) { this.output = output; } @Nullable @Override public ItemStack getRow(int i) { return null; } @Nonnull @Override public ItemStack getResult() { return this.output; } @Override public int getDuration() { return 0; } } }