diff --git a/src/main/java/modtweaker2/helpers/StackHelper.java b/src/main/java/modtweaker2/helpers/StackHelper.java index 9304d21..b4bca6e 100644 --- a/src/main/java/modtweaker2/helpers/StackHelper.java +++ b/src/main/java/modtweaker2/helpers/StackHelper.java @@ -7,6 +7,7 @@ import minetweaker.api.liquid.ILiquidStack; import modtweaker2.mods.botania.Botania; import modtweaker2.utils.TweakerPlugin; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; public class StackHelper { /** @@ -22,6 +23,14 @@ public class StackHelper { } } + public static boolean areEqual(FluidStack stack1, FluidStack stack2) { + if(stack1 == null || stack2 == null) { + return false; + } + + return stack1.isFluidEqual(stack2); + } + /** * Compares two ItemStack instances if they reference the same object or * are both null. If false, the method areEqual() is called to check if the @@ -36,6 +45,15 @@ public class StackHelper { return(areEqual(stack1, stack2)); } + public static boolean areEqualOrNull(FluidStack stack1, FluidStack stack2) { + // Check if they reference the same object or are are both null + if(stack1 == stack2) { + return true; + } + + return(areEqual(stack1, stack2)); + } + /** * Adds extra check to IIngredient matches() for Botania special flowers */ diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/ThermalHelper.java b/src/main/java/modtweaker2/mods/thermalexpansion/ThermalHelper.java index 70a9e02..d383efe 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/ThermalHelper.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/ThermalHelper.java @@ -1,6 +1,7 @@ package modtweaker2.mods.thermalexpansion; import static modtweaker2.helpers.ReflectionHelper.getConstructor; +import static modtweaker2.helpers.StackHelper.areEqualOrNull; import java.lang.reflect.Constructor; @@ -32,4 +33,187 @@ public class ThermalHelper { transposerRecipe = getConstructor(RecipeTransposer.class, ItemStack.class, ItemStack.class, FluidStack.class, int.class, int.class); } catch (Exception e) { LogHelper.logError("Exception getting constructor for Thermal Expansion recipes!", e); } } + + public static boolean equals(RecipeCrucible r1, RecipeCrucible r2) { + if(r1 == r2) { + return true; + } + + if(r1 == null || r2 == null) { + return false; + } + + if(!areEqualOrNull(r1.getInput(), r2.getInput())) { + return false; + } + + if(r1.getEnergy() != r2.getEnergy()) { + return false; + } + + if(!areEqualOrNull(r1.getOutput(), r2.getOutput())) { + return false; + } + + return true; + } + + public static boolean equals(RecipeFurnace r1, RecipeFurnace r2) { + if(r1 == r2) { + return true; + } + + if(r1 == null || r2 == null) { + return false; + } + + if(!areEqualOrNull(r1.getInput(), r2.getInput())) { + return false; + } + + if(r1.getEnergy() != r2.getEnergy()) { + return false; + } + + if(!areEqualOrNull(r1.getOutput(), r2.getOutput())) { + return false; + } + + return true; + } + + public static boolean equals(RecipePulverizer r1, RecipePulverizer r2) { + if(r1 == r2) { + return true; + } + + if(r1 == null || r2 == null) { + return false; + } + + if(!areEqualOrNull(r1.getInput(), r2.getInput())) { + return false; + } + + if(r1.getEnergy() != r2.getEnergy()) { + return false; + } + + if(!areEqualOrNull(r1.getPrimaryOutput(), r2.getPrimaryOutput())) { + return false; + } + + if(!areEqualOrNull(r1.getSecondaryOutput(), r2.getSecondaryOutput())) { + return false; + } + + if(r1.getSecondaryOutput() != null && r2.getSecondaryOutput() != null && + r1.getSecondaryOutputChance() != r2.getSecondaryOutputChance()) { + return false; + } + + return true; + } + + public static boolean equals(RecipeSawmill r1, RecipeSawmill r2) { + if(r1 == r2) { + return true; + } + + if(r1 == null || r2 == null) { + return false; + } + + if(!areEqualOrNull(r1.getInput(), r2.getInput())) { + return false; + } + + if(r1.getEnergy() != r2.getEnergy()) { + return false; + } + + if(!areEqualOrNull(r1.getPrimaryOutput(), r2.getPrimaryOutput())) { + return false; + } + + if(!areEqualOrNull(r1.getSecondaryOutput(), r2.getSecondaryOutput())) { + return false; + } + + if(r1.getSecondaryOutput() != null && r2.getSecondaryOutput() != null && + r1.getSecondaryOutputChance() != r2.getSecondaryOutputChance()) { + return false; + } + + return true; + } + + public static boolean equals(RecipeSmelter r1, RecipeSmelter r2) { + if(r1 == r2) { + return true; + } + + if(r1 == null || r2 == null) { + return false; + } + + if(!areEqualOrNull(r1.getPrimaryInput(), r2.getPrimaryInput())) { + return false; + } + + if(!areEqualOrNull(r1.getSecondaryInput(), r2.getSecondaryInput())) { + return false; + } + + if(r1.getEnergy() != r2.getEnergy()) { + return false; + } + + if(!areEqualOrNull(r1.getPrimaryOutput(), r2.getPrimaryOutput())) { + return false; + } + + if(!areEqualOrNull(r1.getSecondaryOutput(), r2.getSecondaryOutput())) { + return false; + } + + if(r1.getSecondaryOutput() != null && r2.getSecondaryOutput() != null && + r1.getSecondaryOutputChance() != r2.getSecondaryOutputChance()) { + return false; + } + + return true; + } + + public static boolean equals(RecipeTransposer r1, RecipeTransposer r2) { + if(r1 == r2) { + return true; + } + + if(r1 == null || r2 == null) { + return false; + } + + if(!areEqualOrNull(r1.getInput(), r2.getInput())) { + return false; + } + + if(r1.getEnergy() != r2.getEnergy()) { + return false; + } + + if(!areEqualOrNull(r1.getOutput(), r2.getOutput())) { + return false; + } + + if(!areEqualOrNull(r1.getFluid(), r2.getFluid())) { + return false; + } + + if(r1.getChance() != r2.getChance()) { + return false; + } + + return true; + } } diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Crucible.java b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Crucible.java index 941bfeb..ce494cf 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Crucible.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Crucible.java @@ -8,6 +8,7 @@ import static modtweaker2.helpers.StackHelper.matches; import java.util.LinkedList; import java.util.List; +import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; @@ -69,13 +70,18 @@ public class Crucible { } } + @Override + protected boolean equals(RecipeCrucible recipe, RecipeCrucible otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } + @Override protected String getRecipeInfo(RecipeCrucible recipe) { return InputHelper.getStackDescription(recipe.getInput()); } } - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @ZenMethod public static void removeRecipe(IIngredient input) { @@ -119,9 +125,47 @@ public class Crucible { } } + @Override + protected boolean equals(RecipeCrucible recipe, RecipeCrucible otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } + @Override protected String getRecipeInfo(RecipeCrucible recipe) { return InputHelper.getStackDescription(recipe.getInput()); } } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @ZenMethod + public static void refreshRecipes() { + MineTweakerAPI.apply(new Refresh()); + } + + private static class Refresh implements IUndoableAction { + + public void apply() { + CrucibleManager.refreshRecipes(); + } + + public boolean canUndo() { + return true; + } + + public String describe() { + return "Refreshing " + Crucible.name + " recipes"; + } + + public void undo() { + } + + public String describeUndo() { + return "Ignoring undo of " + Crucible.name + " recipe refresh"; + } + + public Object getOverrideKey() { + return null; + } + } } diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Furnace.java b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Furnace.java index f25e7f6..253e9c2 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Furnace.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Furnace.java @@ -71,6 +71,11 @@ public class Furnace { } } + + @Override + protected boolean equals(RecipeFurnace recipe, RecipeFurnace otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } @Override protected String getRecipeInfo(RecipeFurnace recipe) { @@ -121,6 +126,11 @@ public class Furnace { false); } } + + @Override + protected boolean equals(RecipeFurnace recipe, RecipeFurnace otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } @Override protected String getRecipeInfo(RecipeFurnace recipe) { @@ -138,22 +148,22 @@ public class Furnace { private static class Refresh implements IUndoableAction { public void apply() { - FurnaceManager.loadRecipes(); + FurnaceManager.refreshRecipes(); } public boolean canUndo() { - return false; + return true; } public String describe() { - return "Refreshing Redstone Furnace Recipes"; + return "Refreshing " + Furnace.name + " recipes"; } public void undo() { } public String describeUndo() { - return "Can't Undo Redstone Furnace Refresh"; + return "Ignoring undo of " + Furnace.name + " recipe refresh"; } public Object getOverrideKey() { diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Pulverizer.java b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Pulverizer.java index 82da909..8dfbba9 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Pulverizer.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Pulverizer.java @@ -7,6 +7,7 @@ import static modtweaker2.helpers.StackHelper.matches; import java.util.LinkedList; import java.util.List; +import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; @@ -74,6 +75,11 @@ public class Pulverizer { PulverizerManager.removeRecipe(recipe.getInput()); } } + + @Override + protected boolean equals(RecipePulverizer recipe, RecipePulverizer otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } @Override protected String getRecipeInfo(RecipePulverizer recipe) { @@ -127,10 +133,48 @@ public class Pulverizer { recipe.getSecondaryOutputChance()); } } + + @Override + protected boolean equals(RecipePulverizer recipe, RecipePulverizer otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } @Override protected String getRecipeInfo(RecipePulverizer recipe) { return InputHelper.getStackDescription(recipe.getInput()); } } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @ZenMethod + public static void refreshRecipes() { + MineTweakerAPI.apply(new Refresh()); + } + + private static class Refresh implements IUndoableAction { + + public void apply() { + PulverizerManager.refreshRecipes(); + } + + public boolean canUndo() { + return true; + } + + public String describe() { + return "Refreshing " + Pulverizer.name + " recipes"; + } + + public void undo() { + } + + public String describeUndo() { + return "Ignoring undo of " + Pulverizer.name + " recipe refresh"; + } + + public Object getOverrideKey() { + return null; + } + } } diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Sawmill.java b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Sawmill.java index 56ac348..efbcf14 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Sawmill.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Sawmill.java @@ -7,6 +7,7 @@ import static modtweaker2.helpers.StackHelper.matches; import java.util.LinkedList; import java.util.List; +import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; @@ -75,7 +76,11 @@ public class Sawmill { for(RecipeSawmill recipe : successful) { SawmillManager.removeRecipe(recipe.getInput()); } - + } + + @Override + protected boolean equals(RecipeSawmill recipe, RecipeSawmill otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); } @Override @@ -131,9 +136,47 @@ public class Sawmill { } } + @Override + protected boolean equals(RecipeSawmill recipe, RecipeSawmill otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } + @Override protected String getRecipeInfo(RecipeSawmill recipe) { return InputHelper.getStackDescription(recipe.getInput()); } } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @ZenMethod + public static void refreshRecipes() { + MineTweakerAPI.apply(new Refresh()); + } + + private static class Refresh implements IUndoableAction { + + public void apply() { + SawmillManager.refreshRecipes(); + } + + public boolean canUndo() { + return true; + } + + public String describe() { + return "Refreshing " + Sawmill.name + " recipes"; + } + + public void undo() { + } + + public String describeUndo() { + return "Ignoring undo of " + Sawmill.name + " recipe refresh"; + } + + public Object getOverrideKey() { + return null; + } + } } diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Smelter.java b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Smelter.java index 4fc110c..fab59a5 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Smelter.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Smelter.java @@ -7,6 +7,7 @@ import static modtweaker2.helpers.StackHelper.matches; import java.util.LinkedList; import java.util.List; +import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; @@ -77,6 +78,11 @@ public class Smelter { SmelterManager.removeRecipe(recipe.getPrimaryInput(), recipe.getSecondaryInput()); } } + + @Override + protected boolean equals(RecipeSmelter recipe, RecipeSmelter otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } @Override public String getRecipeInfo(RecipeSmelter recipe) { @@ -132,10 +138,48 @@ public class Smelter { recipe.getSecondaryOutputChance()); } } + + @Override + protected boolean equals(RecipeSmelter recipe, RecipeSmelter otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } @Override public String getRecipeInfo(RecipeSmelter recipe) { return InputHelper.getStackDescription(recipe.getPrimaryOutput()); } } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @ZenMethod + public static void refreshRecipes() { + MineTweakerAPI.apply(new Refresh()); + } + + private static class Refresh implements IUndoableAction { + + public void apply() { + SmelterManager.refreshRecipes(); + } + + public boolean canUndo() { + return true; + } + + public String describe() { + return "Refreshing " + Smelter.name + " recipes"; + } + + public void undo() { + } + + public String describeUndo() { + return "Ignoring undo of " + Smelter.name + " recipe refresh"; + } + + public Object getOverrideKey() { + return null; + } + } } diff --git a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Transposer.java b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Transposer.java index 0be3206..fd03ab7 100644 --- a/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Transposer.java +++ b/src/main/java/modtweaker2/mods/thermalexpansion/handlers/Transposer.java @@ -9,6 +9,7 @@ import static modtweaker2.helpers.StackHelper.matches; import java.util.LinkedList; import java.util.List; +import minetweaker.IUndoableAction; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; @@ -118,6 +119,11 @@ public class Transposer { } } + @Override + protected boolean equals(RecipeTransposer recipe, RecipeTransposer otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } + @Override protected String getRecipeInfo(RecipeTransposer recipe) { return InputHelper.getStackDescription(recipe.getInput()); @@ -205,6 +211,11 @@ public class Transposer { } } + @Override + protected boolean equals(RecipeTransposer recipe, RecipeTransposer otherRecipe) { + return ThermalHelper.equals(recipe, otherRecipe); + } + @Override protected String getRecipeInfo(RecipeTransposer recipe) { return InputHelper.getStackDescription(recipe.getOutput()); @@ -215,4 +226,37 @@ public class Transposer { Fill, Extract } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @ZenMethod + public static void refreshRecipes() { + MineTweakerAPI.apply(new Refresh()); + } + + private static class Refresh implements IUndoableAction { + + public void apply() { + TransposerManager.refreshRecipes(); + } + + public boolean canUndo() { + return true; + } + + public String describe() { + return "Refreshing " + Transposer.nameFill + " & " + Transposer.nameExtract + " recipes"; + } + + public void undo() { + } + + public String describeUndo() { + return "Ignoring undo of " + Transposer.nameFill + " & " + Transposer.nameExtract + " recipe refresh"; + } + + public Object getOverrideKey() { + return null; + } + } }