Merge pull request #185 from Zixxl/master

Botania PureDaisy & Brew support
This commit is contained in:
Zixxl committed 2015-07-15 10:34:14 +02:00
commit b07c660ef4
9 files changed
+272 -1

No files matched your search

+23 -1
View File
@@ -1,4 +1,4 @@
ModTweaker
ModTweaker2
==========
ModTweaker is an addon for MineTweaker 3. Minetweaker lets you adjust recipes, remove them entirely, or add new recipes. While it has decent mod support, there are many mods that use custom crafting handlers that are not supported natively. ModTweaker plans to provide additional support for as many of these mods over time as possible.
@@ -6,3 +6,25 @@ ModTweaker is an addon for MineTweaker 3. Minetweaker lets you adjust recipes, r
Curse
==========
http://minecraft.curseforge.com/mc-mods/220954-modtweaker
Supported Mods
==========
- Applied Energistics 2
- Auracascade
- Botania
- Chisel
- ExNihilo
- ExtendedWorkbench
- Factorization (0.8.95+)
- Forestry
- Flaxbeard's Steam Power
- Mariculture
- Mekanism 8
- Metallurgy
- PneumaticCraft
- Railcraft
- Tinkers Construct
- Terrafirmacraft
- Thaumcraft
- Thermal Expansion
Binary file not shown.
Binary file not shown.
@@ -9,6 +9,7 @@ import minetweaker.MineTweakerImplementationAPI;
import minetweaker.api.player.IPlayer;
import minetweaker.mc1710.data.NBTConverter;
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;
@@ -61,6 +62,8 @@ public class LogHelper {
return getStackDescription((ItemStack)object);
} else if (object instanceof FluidStack) {
return getStackDescription((FluidStack)object);
} else if (object instanceof Block) {
return getStackDescription(new ItemStack((Block)object, 1, 0));
} else if (TweakerPlugin.isLoaded("Mekanism") && object instanceof GasStack) {
return getStackDescription((GasStack)object);
} else if (object instanceof String) {
@@ -31,4 +31,44 @@ public class StringHelper {
return sb.toString();
}
public static String wildcardToRegex(String expression) {
if(expression == null) return null;
StringBuilder sb = new StringBuilder();
sb.append('^');
for(int i = 0; i < expression.length(); i ++) {
char c = expression.charAt(i);
switch(c) {
case '*':
sb.append(".*");
break;
case '?':
sb.append('.');
break;
case '(':
case ')':
case '[':
case ']':
case '$':
case '^':
case '.':
case '{':
case '}':
case '|':
case '\\':
sb.append('\\').append(c);
break;
default:
sb.append(c);
break;
}
}
sb.append('$');
return sb.toString();
}
}
@@ -2,10 +2,12 @@ package modtweaker2.mods.botania;
import minetweaker.MineTweakerAPI;
import modtweaker2.mods.botania.handlers.Apothecary;
import modtweaker2.mods.botania.handlers.Brew;
import modtweaker2.mods.botania.handlers.ElvenTrade;
import modtweaker2.mods.botania.handlers.Lexicon;
import modtweaker2.mods.botania.handlers.ManaInfusion;
import modtweaker2.mods.botania.handlers.Orechid;
import modtweaker2.mods.botania.handlers.PureDaisy;
import modtweaker2.mods.botania.handlers.RuneAltar;
import net.minecraft.item.ItemStack;
import vazkii.botania.common.item.block.ItemBlockSpecialFlower;
@@ -13,9 +15,11 @@ import vazkii.botania.common.item.block.ItemBlockSpecialFlower;
public class Botania {
public Botania() {
MineTweakerAPI.registerClass(Apothecary.class);
MineTweakerAPI.registerClass(Brew.class);
MineTweakerAPI.registerClass(ElvenTrade.class);
MineTweakerAPI.registerClass(ManaInfusion.class);
MineTweakerAPI.registerClass(Orechid.class);
MineTweakerAPI.registerClass(PureDaisy.class);
MineTweakerAPI.registerClass(RuneAltar.class);
MineTweakerAPI.registerClass(Lexicon.class);
}
@@ -10,10 +10,13 @@ import minetweaker.api.player.IPlayer;
import minetweaker.api.server.ICommandFunction;
import modtweaker2.helpers.LogHelper;
import modtweaker2.helpers.StringHelper;
import net.minecraft.item.ItemStack;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.recipe.RecipeBrew;
import vazkii.botania.api.recipe.RecipeElvenTrade;
import vazkii.botania.api.recipe.RecipeManaInfusion;
import vazkii.botania.api.recipe.RecipePetals;
import vazkii.botania.api.recipe.RecipePureDaisy;
import vazkii.botania.api.recipe.RecipeRuneAltar;
public class BotaniaLogger implements ICommandFunction {
@@ -22,8 +25,10 @@ public class BotaniaLogger implements ICommandFunction {
static {
validArguments.add("apothecary");
validArguments.add("brew");
validArguments.add("elventrade");
validArguments.add("manainfusion");
validArguments.add("puredaisy");
validArguments.add("runealtar");
}
@@ -45,6 +50,14 @@ public class BotaniaLogger implements ICommandFunction {
}
}
if(args.isEmpty() || args.contains("brew")) {
for(RecipeBrew recipe : BotaniaAPI.brewRecipes) {
MineTweakerAPI.logCommand(String.format("mods.botania.Brew.addRecipe(%s, \"%s\");",
LogHelper.getListDescription(recipe.getInputs()),
recipe.getBrew().getKey()));
}
}
if(args.isEmpty() || args.contains("elventrade")) {
for(RecipeElvenTrade recipe : BotaniaAPI.elvenTradeRecipes) {
MineTweakerAPI.logCommand(String.format("mods.botania.ElvenTrade.addRecipe(%s, %s);",
@@ -65,6 +78,14 @@ public class BotaniaLogger implements ICommandFunction {
}
}
if(args.isEmpty() || args.contains("puredaisy")) {
for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) {
MineTweakerAPI.logCommand(String.format("mods.botania.PureDaisy.addRecipe(%s, %s);",
LogHelper.getStackDescription(recipe.getInput()),
LogHelper.getStackDescription(new ItemStack(recipe.getOutput(), 1, recipe.getOutputMeta()))));
}
}
if(args.isEmpty() || args.contains("runealtar")) {
for(RecipeRuneAltar recipe : BotaniaAPI.runeAltarRecipes) {
MineTweakerAPI.logCommand(String.format("mods.botania.RuneAltar.addRecipe(%s, %s, %d);",
@@ -0,0 +1,88 @@
package modtweaker2.mods.botania.handlers;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import minetweaker.MineTweakerAPI;
import minetweaker.api.item.IIngredient;
import modtweaker2.helpers.InputHelper;
import modtweaker2.helpers.LogHelper;
import modtweaker2.helpers.StringHelper;
import modtweaker2.utils.BaseListAddition;
import modtweaker2.utils.BaseListRemoval;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenMethod;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.recipe.RecipeBrew;
@ZenClass("mods.botania.Brew")
public class Brew {
public static final String name = "Botania Brew";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ZenMethod
public static void addRecipe(IIngredient[] inputItems, String brewName) {
if(inputItems == null || inputItems.length == 0 || brewName == null || brewName.length() == 0) {
LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name));
return;
}
if(!BotaniaAPI.brewMap.containsKey(brewName)) {
LogHelper.logError(String.format("Unknown brew name \"%s\" for %s recipe.", brewName, name));
}
RecipeBrew recipe = new RecipeBrew(BotaniaAPI.brewMap.get(brewName), InputHelper.toObjects(inputItems));
MineTweakerAPI.apply(new Add(recipe));
}
private static class Add extends BaseListAddition<RecipeBrew> {
protected Add(RecipeBrew recipe) {
super(Brew.name, BotaniaAPI.brewRecipes);
recipes.add(recipe);
}
@Override
protected String getRecipeInfo(RecipeBrew recipe) {
return recipe.getBrew().getKey();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ZenMethod
public static void removeRecipe(String brewName) {
List<RecipeBrew> recipes = new LinkedList<RecipeBrew>();
Matcher matcher = Pattern.compile(StringHelper.wildcardToRegex(brewName)).matcher("");
for(RecipeBrew recipe : BotaniaAPI.brewRecipes) {
matcher.reset(recipe.getBrew().getKey());
if(matcher.matches()) {
recipes.add(recipe);
}
}
if(!recipes.isEmpty()) {
MineTweakerAPI.apply(new Remove(recipes));
} else {
LogHelper.logWarning(String.format("No %s recipe found for %s. Command ignored!", name, brewName));
}
}
public static class Remove extends BaseListRemoval<RecipeBrew> {
protected Remove(List<RecipeBrew> recipes) {
super(Brew.name, BotaniaAPI.brewRecipes, recipes);
}
@Override
protected String getRecipeInfo(RecipeBrew recipe) {
return recipe.getBrew().getKey();
}
}
}
@@ -0,0 +1,93 @@
package modtweaker2.mods.botania.handlers;
import java.util.LinkedList;
import java.util.List;
import minetweaker.MineTweakerAPI;
import minetweaker.api.item.IIngredient;
import minetweaker.api.item.IItemStack;
import modtweaker2.helpers.InputHelper;
import modtweaker2.helpers.LogHelper;
import modtweaker2.helpers.StackHelper;
import modtweaker2.utils.BaseListAddition;
import modtweaker2.utils.BaseListRemoval;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import stanhebben.zenscript.annotations.ZenClass;
import stanhebben.zenscript.annotations.ZenMethod;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.recipe.RecipePureDaisy;
@ZenClass("mods.botania.PureDaisy")
public class PureDaisy {
public static final String name = "Botania PureDaisy";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ZenMethod
public static void addRecipe(IIngredient blockInput, IItemStack blockOutput) {
if(blockInput == null || blockOutput == null) {
LogHelper.logError(String.format("Required parameters missing for %s Recipe.", name));
return;
}
Object input = InputHelper.toObject(blockInput);
if(input == null || (input instanceof ItemStack && !InputHelper.isABlock((ItemStack)input))) {
LogHelper.logError(String.format("Input must be a block or an oredict entry."));
return;
}
if(input instanceof ItemStack) input = Block.getBlockFromItem(((ItemStack)input).getItem());
ItemStack output = InputHelper.toStack(blockOutput);
RecipePureDaisy recipe = new RecipePureDaisy(input, Block.getBlockFromItem(output.getItem()), output.getItemDamage());
MineTweakerAPI.apply(new Add(recipe));
}
private static class Add extends BaseListAddition<RecipePureDaisy> {
public Add(RecipePureDaisy recipe) {
super(PureDaisy.name, BotaniaAPI.pureDaisyRecipes);
recipes.add(recipe);
}
@Override
protected String getRecipeInfo(RecipePureDaisy recipe) {
return LogHelper.getStackDescription(new ItemStack(recipe.getOutput(), 1, recipe.getOutputMeta()));
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ZenMethod
public static void removeRecipe(IIngredient output) {
List<RecipePureDaisy> recipes = new LinkedList<RecipePureDaisy>();
for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) {
IItemStack out = InputHelper.toIItemStack(new ItemStack(recipe.getOutput(), 1, recipe.getOutputMeta()));
if(StackHelper.matches(output, out)) {
recipes.add(recipe);
}
}
if(!recipes.isEmpty()) {
MineTweakerAPI.apply(new Remove(recipes));
} else {
}
}
private static class Remove extends BaseListRemoval<RecipePureDaisy> {
public Remove(List<RecipePureDaisy> recipes) {
super(PureDaisy.name, BotaniaAPI.pureDaisyRecipes, recipes);
}
@Override
protected String getRecipeInfo(RecipePureDaisy recipe) {
return LogHelper.getStackDescription(new ItemStack(recipe.getOutput(), 1, recipe.getOutputMeta()));
}
}
}