From 231f25eec4e54b798210132c78baed9b83df2dd2 Mon Sep 17 00:00:00 2001 From: Zixxl Date: Thu, 16 Jul 2015 11:38:25 +0200 Subject: [PATCH] More Mekanism handler --- README.md | 2 +- .../java/modtweaker2/helpers/InputHelper.java | 1 - .../java/modtweaker2/helpers/LogHelper.java | 51 ++---------- .../modtweaker2/mods/mekanism/Mekanism.java | 6 ++ .../mekanism/commands/MekanismLogger.java | 29 +++++++ .../mekanism/handlers/EnergizedSmelter.java | 77 +++++++++++++++++++ .../mekanism/handlers/SolarEvaporation.java | 77 +++++++++++++++++++ .../handlers/SolarNeutronActivator.java | 77 +++++++++++++++++++ 8 files changed, 272 insertions(+), 48 deletions(-) create mode 100644 src/main/java/modtweaker2/mods/mekanism/handlers/EnergizedSmelter.java create mode 100644 src/main/java/modtweaker2/mods/mekanism/handlers/SolarEvaporation.java create mode 100644 src/main/java/modtweaker2/mods/mekanism/handlers/SolarNeutronActivator.java diff --git a/README.md b/README.md index f56e7e3..605d585 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Supported Mods - ExNihilo - ExtendedWorkbench - Factorization (0.8.95+) -- Forestry +- Forestry (3.6.0+) - Flaxbeard's Steam Power - Mariculture - Mekanism 8 diff --git a/src/main/java/modtweaker2/helpers/InputHelper.java b/src/main/java/modtweaker2/helpers/InputHelper.java index 6912c3f..c8b899d 100644 --- a/src/main/java/modtweaker2/helpers/InputHelper.java +++ b/src/main/java/modtweaker2/helpers/InputHelper.java @@ -20,7 +20,6 @@ import net.minecraftforge.fluids.FluidStack; public class InputHelper { public static boolean isABlock(IItemStack block) { if (!(isABlock(toStack(block)))) { - LogHelper.logError("Item must be a block, or you must specify a block to render as when adding a TConstruct Melting recipe"); return false; } else return true; diff --git a/src/main/java/modtweaker2/helpers/LogHelper.java b/src/main/java/modtweaker2/helpers/LogHelper.java index 63fc336..14d74ba 100644 --- a/src/main/java/modtweaker2/helpers/LogHelper.java +++ b/src/main/java/modtweaker2/helpers/LogHelper.java @@ -7,10 +7,10 @@ import mekanism.api.gas.GasStack; import minetweaker.MineTweakerAPI; import minetweaker.MineTweakerImplementationAPI; import minetweaker.api.player.IPlayer; -import minetweaker.mc1710.data.NBTConverter; +import minetweaker.mc1710.item.MCItemStack; +import modtweaker2.mods.mekanism.gas.MCGasStack; import modtweaker2.utils.TweakerPlugin; import net.minecraft.block.Block; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.ShapedRecipes; @@ -59,13 +59,13 @@ public class LogHelper { */ public static String getStackDescription(Object object) { if(object instanceof ItemStack) { - return getStackDescription((ItemStack)object); + return new MCItemStack((ItemStack)object).toString(); } else if (object instanceof FluidStack) { return getStackDescription((FluidStack)object); } else if (object instanceof Block) { - return getStackDescription(new ItemStack((Block)object, 1, 0)); + return new MCItemStack(new ItemStack((Block)object, 1, 0)).toString(); } else if (TweakerPlugin.isLoaded("Mekanism") && object instanceof GasStack) { - return getStackDescription((GasStack)object); + return new MCGasStack((GasStack)object).toString(); } else if (object instanceof String) { // Check if string specifies an oredict entry List ores = OreDictionary.getOres((String)object); @@ -81,35 +81,6 @@ public class LogHelper { return "null"; } } - - public static String getStackDescription(ItemStack stack) { - StringBuilder sb = new StringBuilder(); - - // Creates a name like or - sb.append('<'); - sb.append(Item.itemRegistry.getNameForObject(stack.getItem())); - if(stack.getItemDamage() == 32767) { - sb.append(":*"); - } else if (stack.getItemDamage() > 0) { - sb.append(":").append(stack.getItemDamage()); - } - sb.append('>'); - - // Do we have a tag? (e.g. .withTag({}) ) - if(stack.getTagCompound() != null) - { - sb.append(".withTag("); - sb.append(NBTConverter.from(stack.getTagCompound(), true)); - sb.append(')'); - } - - // Do we have a stack size > 1? - if(stack.stackSize > 1) { - sb.append(" * ").append(stack.stackSize); - } - - return sb.toString(); - } public static String getStackDescription(FluidStack stack) { StringBuilder sb = new StringBuilder(); @@ -123,18 +94,6 @@ public class LogHelper { return sb.toString(); } - public static String getStackDescription(GasStack stack) { - StringBuilder sb = new StringBuilder(); - - sb.append("'); - - if(stack.amount > 1) { - sb.append(" * ").append(stack.amount); - } - - return sb.toString(); - } - public static String getListDescription(List objects) { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/modtweaker2/mods/mekanism/Mekanism.java b/src/main/java/modtweaker2/mods/mekanism/Mekanism.java index c06eff9..4c92ce4 100644 --- a/src/main/java/modtweaker2/mods/mekanism/Mekanism.java +++ b/src/main/java/modtweaker2/mods/mekanism/Mekanism.java @@ -11,12 +11,15 @@ import modtweaker2.mods.mekanism.handlers.ChemicalWasher; import modtweaker2.mods.mekanism.handlers.Combiner; import modtweaker2.mods.mekanism.handlers.Compressor; import modtweaker2.mods.mekanism.handlers.Crusher; +import modtweaker2.mods.mekanism.handlers.EnergizedSmelter; import modtweaker2.mods.mekanism.handlers.Enrichment; import modtweaker2.mods.mekanism.handlers.Infuser; import modtweaker2.mods.mekanism.handlers.Purification; import modtweaker2.mods.mekanism.handlers.Reaction; import modtweaker2.mods.mekanism.handlers.Sawmill; import modtweaker2.mods.mekanism.handlers.Separator; +import modtweaker2.mods.mekanism.handlers.SolarEvaporation; +import modtweaker2.mods.mekanism.handlers.SolarNeutronActivator; import modtweaker2.utils.TweakerPlugin; public class Mekanism extends TweakerPlugin { @@ -31,11 +34,14 @@ public class Mekanism extends TweakerPlugin { MineTweakerAPI.registerClass(Combiner.class); MineTweakerAPI.registerClass(Compressor.class); MineTweakerAPI.registerClass(Crusher.class); + MineTweakerAPI.registerClass(EnergizedSmelter.class); MineTweakerAPI.registerClass(Enrichment.class); MineTweakerAPI.registerClass(Infuser.class); MineTweakerAPI.registerClass(Purification.class); MineTweakerAPI.registerClass(Reaction.class); MineTweakerAPI.registerClass(Sawmill.class); MineTweakerAPI.registerClass(Separator.class); + MineTweakerAPI.registerClass(SolarEvaporation.class); + MineTweakerAPI.registerClass(SolarNeutronActivator.class); } } diff --git a/src/main/java/modtweaker2/mods/mekanism/commands/MekanismLogger.java b/src/main/java/modtweaker2/mods/mekanism/commands/MekanismLogger.java index 41c6e62..3d91585 100644 --- a/src/main/java/modtweaker2/mods/mekanism/commands/MekanismLogger.java +++ b/src/main/java/modtweaker2/mods/mekanism/commands/MekanismLogger.java @@ -20,6 +20,9 @@ import mekanism.common.recipe.machines.PressurizedRecipe; import mekanism.common.recipe.machines.PurificationRecipe; import mekanism.common.recipe.machines.SawmillRecipe; import mekanism.common.recipe.machines.SeparatorRecipe; +import mekanism.common.recipe.machines.SmeltingRecipe; +import mekanism.common.recipe.machines.SolarEvaporationRecipe; +import mekanism.common.recipe.machines.SolarNeutronRecipe; import mekanism.common.recipe.machines.WasherRecipe; import minetweaker.MineTweakerAPI; import minetweaker.MineTweakerImplementationAPI; @@ -39,8 +42,10 @@ public class MekanismLogger implements ICommandFunction { validArguments.add("crystallizer"); validArguments.add("dissolution"); validArguments.add("enrichment"); + validArguments.add("evaporation"); validArguments.add("infuser"); validArguments.add("injection"); + validArguments.add("neutron"); validArguments.add("oxidizer"); validArguments.add("purification"); validArguments.add("reaction"); @@ -135,6 +140,14 @@ public class MekanismLogger implements ICommandFunction { } } + if(args.isEmpty() || args.contains("crusher")) { + for(SmeltingRecipe recipe : (Collection)Recipe.ENERGIZED_SMELTER.get().values()) { + MineTweakerAPI.logCommand(String.format("mods.mekanism.Smelter.addRecipe(%s, %s);", + LogHelper.getStackDescription(recipe.recipeInput.ingredient), + LogHelper.getStackDescription(recipe.recipeOutput.output))); + } + } + if(args.isEmpty() || args.contains("enrichment")) { for(EnrichmentRecipe recipe : (Collection)Recipe.ENRICHMENT_CHAMBER.get().values()) { MineTweakerAPI.logCommand(String.format("mods.mekanism.Enrichment.addRecipe(%s, %s);", @@ -200,6 +213,22 @@ public class MekanismLogger implements ICommandFunction { LogHelper.getStackDescription(recipe.recipeOutput.rightGas))); } } + + if(args.isEmpty() || args.contains("evaporation")) { + for(SolarEvaporationRecipe recipe : (Collection)Recipe.SOLAR_EVAPORATION_PLANT.get().values()) { + MineTweakerAPI.logCommand(String.format("mods.mekanism.SolarEvaporation.addRecipe(%s, %s);", + LogHelper.getStackDescription(recipe.recipeInput.ingredient), + LogHelper.getStackDescription(recipe.recipeOutput.output))); + } + } + + if(args.isEmpty() || args.contains("neutron")) { + for(SolarNeutronRecipe recipe : (Collection)Recipe.SOLAR_NEUTRON_ACTIVATOR.get().values()) { + MineTweakerAPI.logCommand(String.format("mods.mekanism.SolarNeutronActivator.addRecipe(%s, %s);", + LogHelper.getStackDescription(recipe.recipeInput.ingredient), + LogHelper.getStackDescription(recipe.recipeOutput.output))); + } + } if (player != null) { player.sendChat(MineTweakerImplementationAPI.platform.getMessage("List generated; see minetweaker.log in your minecraft dir")); diff --git a/src/main/java/modtweaker2/mods/mekanism/handlers/EnergizedSmelter.java b/src/main/java/modtweaker2/mods/mekanism/handlers/EnergizedSmelter.java new file mode 100644 index 0000000..fa7911e --- /dev/null +++ b/src/main/java/modtweaker2/mods/mekanism/handlers/EnergizedSmelter.java @@ -0,0 +1,77 @@ +package modtweaker2.mods.mekanism.handlers; + +import static modtweaker2.helpers.InputHelper.toStack; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import mekanism.common.recipe.RecipeHandler.Recipe; +import mekanism.common.recipe.inputs.ItemStackInput; +import mekanism.common.recipe.inputs.MachineInput; +import mekanism.common.recipe.machines.MachineRecipe; +import mekanism.common.recipe.machines.SmeltingRecipe; +import minetweaker.MineTweakerAPI; +import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IItemStack; +import minetweaker.api.item.IngredientAny; +import modtweaker2.helpers.InputHelper; +import modtweaker2.helpers.LogHelper; +import modtweaker2.helpers.StackHelper; +import modtweaker2.mods.mekanism.util.AddMekanismRecipe; +import modtweaker2.mods.mekanism.util.RemoveMekanismRecipe; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +@ZenClass("mods.mekanism.Smelter") +public class EnergizedSmelter { + + public static final String name = "Mekanism Smelter"; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings("unchecked") + @ZenMethod + public static void addRecipe(IItemStack itemInput, IItemStack itemOutput) { + if(itemInput == null || itemOutput == null) { + LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name)); + return; + } + + SmeltingRecipe recipe = new SmeltingRecipe(toStack(itemInput), toStack(itemOutput)); + + MineTweakerAPI.apply(new AddMekanismRecipe(name, Recipe.ENERGIZED_SMELTER.get(), recipe)); + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @ZenMethod + public static void removeRecipe(IIngredient itemInput, @Optional IIngredient itemOutput) { + if(itemInput == null) { + LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name)); + return; + } + + if(itemOutput == null) itemOutput = IngredientAny.INSTANCE; + + Map recipes = new HashMap(); + + for(Entry entry : ((Map)Recipe.ENERGIZED_SMELTER.get()).entrySet() ) { + IItemStack inputItem = InputHelper.toIItemStack(entry.getKey().ingredient); + IItemStack outputItem = InputHelper.toIItemStack(entry.getValue().recipeOutput.output); + + if(!StackHelper.matches(itemInput, inputItem)) continue; + if(!StackHelper.matches(itemOutput, outputItem)) continue; + + recipes.put(entry.getKey(), entry.getValue()); + } + + if(!recipes.isEmpty()) { + MineTweakerAPI.apply(new RemoveMekanismRecipe(name, Recipe.ENERGIZED_SMELTER.get(), recipes)); + } else { + LogHelper.logWarning(String.format("No %s recipe found for %s, %s and %s. Command ignored!", name, itemInput.toString(), itemOutput.toString())); + } + } +} diff --git a/src/main/java/modtweaker2/mods/mekanism/handlers/SolarEvaporation.java b/src/main/java/modtweaker2/mods/mekanism/handlers/SolarEvaporation.java new file mode 100644 index 0000000..d9b3d19 --- /dev/null +++ b/src/main/java/modtweaker2/mods/mekanism/handlers/SolarEvaporation.java @@ -0,0 +1,77 @@ +package modtweaker2.mods.mekanism.handlers; + +import static modtweaker2.helpers.InputHelper.toFluid; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import mekanism.common.recipe.RecipeHandler.Recipe; +import mekanism.common.recipe.inputs.FluidInput; +import mekanism.common.recipe.inputs.MachineInput; +import mekanism.common.recipe.machines.MachineRecipe; +import mekanism.common.recipe.machines.SolarEvaporationRecipe; +import minetweaker.MineTweakerAPI; +import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IngredientAny; +import minetweaker.api.liquid.ILiquidStack; +import modtweaker2.helpers.InputHelper; +import modtweaker2.helpers.LogHelper; +import modtweaker2.helpers.StackHelper; +import modtweaker2.mods.mekanism.util.AddMekanismRecipe; +import modtweaker2.mods.mekanism.util.RemoveMekanismRecipe; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +@ZenClass("mods.mekanism.SolarEvaporation") +public class SolarEvaporation { + + public static final String name = "Mekanism Solar Evaporation"; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings("unchecked") + @ZenMethod + public static void addRecipe(ILiquidStack liquidInput, ILiquidStack liquidOutput) { + if(liquidInput == null || liquidOutput == null) { + LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name)); + return; + } + + SolarEvaporationRecipe recipe = new SolarEvaporationRecipe(toFluid(liquidInput), toFluid(liquidOutput)); + + MineTweakerAPI.apply(new AddMekanismRecipe(name, Recipe.SOLAR_EVAPORATION_PLANT.get(), recipe)); + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @ZenMethod + public static void removeRecipe(IIngredient liquidInput, @Optional IIngredient liquidOutput) { + if(liquidInput == null) { + LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name)); + return; + } + + if(liquidOutput == null) liquidOutput = IngredientAny.INSTANCE; + + Map recipes = new HashMap(); + + for(Entry entry : ((Map)Recipe.SOLAR_EVAPORATION_PLANT.get()).entrySet() ) { + ILiquidStack inputLiquid = InputHelper.toILiquidStack(entry.getKey().ingredient); + ILiquidStack outputLiquid = InputHelper.toILiquidStack(entry.getValue().recipeOutput.output); + + if(!StackHelper.matches(liquidInput, inputLiquid)) continue; + if(!StackHelper.matches(liquidOutput, outputLiquid)) continue; + + recipes.put(entry.getKey(), entry.getValue()); + } + + if(!recipes.isEmpty()) { + MineTweakerAPI.apply(new RemoveMekanismRecipe(name, Recipe.SOLAR_EVAPORATION_PLANT.get(), recipes)); + } else { + LogHelper.logWarning(String.format("No %s recipe found for %s, %s and %s. Command ignored!", name, liquidInput.toString(), liquidOutput.toString())); + } + } +} diff --git a/src/main/java/modtweaker2/mods/mekanism/handlers/SolarNeutronActivator.java b/src/main/java/modtweaker2/mods/mekanism/handlers/SolarNeutronActivator.java new file mode 100644 index 0000000..94c9c43 --- /dev/null +++ b/src/main/java/modtweaker2/mods/mekanism/handlers/SolarNeutronActivator.java @@ -0,0 +1,77 @@ +package modtweaker2.mods.mekanism.handlers; + +import static modtweaker2.mods.mekanism.MekanismHelper.toGas; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import mekanism.common.recipe.RecipeHandler.Recipe; +import mekanism.common.recipe.inputs.GasInput; +import mekanism.common.recipe.inputs.MachineInput; +import mekanism.common.recipe.machines.MachineRecipe; +import mekanism.common.recipe.machines.SolarNeutronRecipe; +import minetweaker.MineTweakerAPI; +import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IngredientAny; +import modtweaker2.helpers.LogHelper; +import modtweaker2.helpers.StackHelper; +import modtweaker2.mods.mekanism.gas.IGasStack; +import modtweaker2.mods.mekanism.gas.MCGasStack; +import modtweaker2.mods.mekanism.util.AddMekanismRecipe; +import modtweaker2.mods.mekanism.util.RemoveMekanismRecipe; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +@ZenClass("mods.mekanism.SolarNeutronActivator") +public class SolarNeutronActivator { + + public static final String name = "Mekanism Solar Evaporation"; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings("unchecked") + @ZenMethod + public static void addRecipe(IGasStack gasInput, IGasStack gasOutput) { + if(gasInput == null || gasOutput == null) { + LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name)); + return; + } + + SolarNeutronRecipe recipe = new SolarNeutronRecipe(toGas(gasInput), toGas(gasOutput)); + + MineTweakerAPI.apply(new AddMekanismRecipe(name, Recipe.SOLAR_NEUTRON_ACTIVATOR.get(), recipe)); + } + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @ZenMethod + public static void removeRecipe(IIngredient gasInput, @Optional IIngredient gasOutput) { + if(gasInput == null) { + LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name)); + return; + } + + if(gasOutput == null) gasOutput = IngredientAny.INSTANCE; + + Map recipes = new HashMap(); + + for(Entry entry : ((Map)Recipe.SOLAR_NEUTRON_ACTIVATOR.get()).entrySet() ) { + IGasStack inputGas = new MCGasStack(entry.getKey().ingredient); + IGasStack outputGas = new MCGasStack(entry.getValue().recipeOutput.output); + + if(!StackHelper.matches(gasInput, inputGas)) continue; + if(!StackHelper.matches(gasOutput, outputGas)) continue; + + recipes.put(entry.getKey(), entry.getValue()); + } + + if(!recipes.isEmpty()) { + MineTweakerAPI.apply(new RemoveMekanismRecipe(name, Recipe.SOLAR_NEUTRON_ACTIVATOR.get(), recipes)); + } else { + LogHelper.logWarning(String.format("No %s recipe found for %s, %s and %s. Command ignored!", name, gasInput.toString(), gasOutput.toString())); + } + } +}