package modtweaker.mods.extrautils.handlers; import com.blamejared.mtlib.helpers.*; import com.blamejared.mtlib.utils.*; import com.rwtema.extrautils2.tile.TileResonator; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IItemStack; import net.minecraft.item.ItemStack; import stanhebben.zenscript.annotations.*; import java.util.*; @ZenClass("mods.extrautils.Resonator") public class Resonator { @ZenMethod public static void add(IItemStack output, IItemStack input, int energy, boolean addOwnerTag) { MineTweakerAPI.apply(new Add(new TileResonator.ResonatorRecipe(InputHelper.toStack(input), InputHelper.toStack(output), energy, addOwnerTag))); } @ZenMethod public static void remove(IItemStack output) { List<TileResonator.ResonatorRecipe> removed = new ArrayList<>(); TileResonator.resonatorRecipes.forEach(i -> { if(i.output.isItemEqual(InputHelper.toStack(output))) { removed.add(i); } }); if(!removed.isEmpty()) { MineTweakerAPI.apply(new Remove(removed)); } else { LogHelper.logWarning(String.format("No %s Recipe found for %s. Command ignored!", "Resonator", output.toString())); } } private static class Add extends BaseListAddition<TileResonator.ResonatorRecipe> { protected Add(TileResonator.ResonatorRecipe recipe) { super("Resonator", TileResonator.resonatorRecipes, Arrays.asList(recipe)); } @Override public void apply() { super.apply(); successful.forEach(i -> { if(i.input.getItemDamage() != 32767 && i.input.getHasSubtypes()) { TileResonator.ResonatorRecipe.SpecificItems.add(new ItemStack(i.input.getItem(), 1, i.input.getItemDamage())); } else { TileResonator.ResonatorRecipe.WildCardItems.add(i.input.getItem()); } }); } @Override public void undo() { super.undo(); successful.forEach(i -> { if(i.input.getItemDamage() != 32767 && i.input.getHasSubtypes()) { TileResonator.ResonatorRecipe.SpecificItems.remove(new ItemStack(i.input.getItem(), 1, i.input.getItemDamage())); } else { TileResonator.ResonatorRecipe.WildCardItems.remove(i.input.getItem()); } }); } @Override protected String getRecipeInfo(TileResonator.ResonatorRecipe recipe) { return recipe.toString(); } } private static class Remove extends BaseListRemoval<TileResonator.ResonatorRecipe> { protected Remove(List<TileResonator.ResonatorRecipe> recipes) { super("Resonator", TileResonator.resonatorRecipes, recipes); } @Override public void apply() { super.apply(); successful.forEach(i -> { if(i.input.getItemDamage() != 32767 && i.input.getHasSubtypes()) { TileResonator.ResonatorRecipe.SpecificItems.remove(new ItemStack(i.input.getItem(), 1, i.input.getItemDamage())); } else { TileResonator.ResonatorRecipe.WildCardItems.remove(i.input.getItem()); } }); } @Override public void undo() { super.undo(); successful.forEach(i -> { if(i.input.getItemDamage() != 32767 && i.input.getHasSubtypes()) { TileResonator.ResonatorRecipe.SpecificItems.add(new ItemStack(i.input.getItem(), 1, i.input.getItemDamage())); } else { TileResonator.ResonatorRecipe.WildCardItems.add(i.input.getItem()); } }); } @Override protected String getRecipeInfo(TileResonator.ResonatorRecipe recipe) { return recipe.toString(); } } }