diff --git a/build.gradle b/build.gradle index 2a2c25e..215fdf0 100644 --- a/build.gradle +++ b/build.gradle @@ -38,7 +38,7 @@ minecraft { repositories { maven { url 'http://dvs1.progwml6.com/files/maven' } - maven { url "http://blamejared.com/maven" } + maven { url "https://maven.blamejared.com" } maven { url "http://www.ryanliptak.com/maven/" } maven { url "http://maven.amadornes.com/" } } diff --git a/src/main/java/betterwithaddons/crafting/manager/CraftingManagerInfuserTransmutation.java b/src/main/java/betterwithaddons/crafting/manager/CraftingManagerInfuserTransmutation.java index fc9f0b0..a098f20 100644 --- a/src/main/java/betterwithaddons/crafting/manager/CraftingManagerInfuserTransmutation.java +++ b/src/main/java/betterwithaddons/crafting/manager/CraftingManagerInfuserTransmutation.java @@ -6,6 +6,7 @@ import javax.annotation.Nonnull; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -30,6 +31,10 @@ public void addRecipe(TransmutationRecipe recipe) public void addRecipe(Ingredient input, int spirits, ItemStack output) { this.recipes.add(createRecipe(input, spirits, output)); } + + public void addRecipe(Ingredient input, int spirits, ItemStack[] outputs) { + this.recipes.add(createRecipe(input, spirits, outputs)); + } public void removeRecipe(TransmutationRecipe recipe) { this.recipes.remove(recipe); @@ -41,11 +46,16 @@ public void clearRecipes() { protected TransmutationRecipe createRecipe(Ingredient input, int spirits, ItemStack output) { - return new TransmutationRecipe(input, spirits, output); + return createRecipe(input, spirits, new ItemStack[]{output}); + } + + protected TransmutationRecipe createRecipe(Ingredient input, int spirits, ItemStack[] outputs) + { + return new TransmutationRecipe(input, spirits, outputs); } public List findRecipeForRemoval(@Nonnull ItemStack output) { - return recipes.stream().filter(recipe -> recipe.output.isItemEqual(output)).collect(Collectors.toList()); + return recipes.stream().filter(recipe -> recipe.getRecipeOutputs().contains(output)).collect(Collectors.toList()); } public TransmutationRecipe getSmeltingRecipe(ItemStack input, int spirits) { diff --git a/src/main/java/betterwithaddons/crafting/recipes/infuser/TransmutationRecipe.java b/src/main/java/betterwithaddons/crafting/recipes/infuser/TransmutationRecipe.java index 0d82ab7..e9184ae 100644 --- a/src/main/java/betterwithaddons/crafting/recipes/infuser/TransmutationRecipe.java +++ b/src/main/java/betterwithaddons/crafting/recipes/infuser/TransmutationRecipe.java @@ -1,15 +1,36 @@ package betterwithaddons.crafting.recipes.infuser; import betterwithaddons.crafting.recipes.SmeltingRecipe; +import java.util.Arrays; +import java.util.List; +import java.util.Random; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; public class TransmutationRecipe extends SmeltingRecipe { private int requiredSpirit; + private Random random = new Random(); + private ItemStack[] possibleOutputs; public TransmutationRecipe(Ingredient input, int requiredSpirit, ItemStack output) { - super(input, output); + this(input, requiredSpirit, new ItemStack[]{output}); + } + + public TransmutationRecipe(Ingredient input, int requiredSpirit, ItemStack[] outputs) { + super(input, outputs.length == 1 ? outputs[0] : ItemStack.EMPTY); this.requiredSpirit = requiredSpirit; + this.possibleOutputs = outputs; + } + + @Override + public ItemStack getOutput(ItemStack input) { + int i = random.nextInt(possibleOutputs.length); + return possibleOutputs[i]; + } + + @Override + public List getRecipeOutputs() { + return Arrays.asList(possibleOutputs); } public int getRequiredSpirit(ItemStack input) { @@ -21,6 +42,9 @@ public int getRequiredSpirit(ItemStack input) { public boolean matchesInput(ItemStack item, int spirits) { if(spirits < requiredSpirit) return false; + + if (Arrays.asList(possibleOutputs).stream().map(ItemStack::getItem).anyMatch((itemStack) -> itemStack == item.getItem())) + return false; return matchesInput(item); } diff --git a/src/main/java/betterwithaddons/interaction/InteractionEriottoMod.java b/src/main/java/betterwithaddons/interaction/InteractionEriottoMod.java index b619e56..12de7a1 100644 --- a/src/main/java/betterwithaddons/interaction/InteractionEriottoMod.java +++ b/src/main/java/betterwithaddons/interaction/InteractionEriottoMod.java @@ -244,59 +244,9 @@ public ItemStack getPlank(int count) { CraftingManagerInfuser.getInstance().addRecipe(new ShapedOreRecipe(new ResourceLocation(Reference.MOD_ID,"nabe"),new ItemStack(ModBlocks.NABE, 1), "i i", "i i", "lhl", 'i', "ingotIron", 'l', "ingotTamahagane", 'h', "ingotHochoTetsu"),1); //Random seeds - CraftingManagerInfuserTransmutation.getInstance().addRecipe(new TransmutationRecipe(new OreIngredient("seed"), 1, ItemStack.EMPTY) { - Random random = new Random(); - - @Override - public ItemStack getOutput(ItemStack input) { - int i = random.nextInt(3); - switch(i) - { - case(0):return new ItemStack(ModBlocks.RICE); - case(1):return new ItemStack(ModBlocks.RUSH); - case(2):return new ItemStack(ModBlocks.TEA); - default:return ItemStack.EMPTY; - } - } - - @Override - public boolean matchesInput(ItemStack item) { - if (item.getItem() == Item.getItemFromBlock(ModBlocks.RICE) || item.getItem() == Item.getItemFromBlock(ModBlocks.RUSH) || item.getItem() == Item.getItemFromBlock(ModBlocks.TEA)) - return false; - - return super.matchesInput(item); - } - - @Override - public List getRecipeOutputs() { - return Lists.newArrayList(new ItemStack(ModBlocks.RICE), new ItemStack(ModBlocks.RUSH), new ItemStack(ModBlocks.TEA)); - } - }); + CraftingManagerInfuserTransmutation.getInstance().addRecipe(new TransmutationRecipe(new OreIngredient("seed"), 1, new ItemStack[]{new ItemStack(ModBlocks.RICE), new ItemStack(ModBlocks.RUSH), new ItemStack(ModBlocks.TEA)})); //Random saplings - CraftingManagerInfuserTransmutation.getInstance().addRecipe(new TransmutationRecipe(new OreIngredient("treeSapling"), 1, ItemStack.EMPTY) { - Random random = new Random(); - - @Override - public ItemStack getOutput(ItemStack input) { - if (random.nextInt(2) == 0) - return new ItemStack(ModBlocks.SAKURA_SAPLING); - else - return new ItemStack(ModBlocks.MULBERRY_SAPLING); - } - - @Override - public boolean matchesInput(ItemStack item) { - if (item.getItem() == Item.getItemFromBlock(ModBlocks.SAKURA_SAPLING) || item.getItem() == Item.getItemFromBlock(ModBlocks.MULBERRY_SAPLING)) - return false; - - return super.matchesInput(item); - } - - @Override - public List getRecipeOutputs() { - return Lists.newArrayList(new ItemStack(ModBlocks.SAKURA_SAPLING), new ItemStack(ModBlocks.MULBERRY_SAPLING)); - } - }); + CraftingManagerInfuserTransmutation.getInstance().addRecipe(new TransmutationRecipe(new OreIngredient("treeSapling"), 1, new ItemStack[]{new ItemStack(ModBlocks.SAKURA_SAPLING), new ItemStack(ModBlocks.MULBERRY_SAPLING)})); //Bamboo CraftingManagerInfuserTransmutation.getInstance().addRecipe(new OreIngredient("sugarcane"), 1, new ItemStack(ModBlocks.BAMBOO)); //Repair tools and armor diff --git a/src/main/java/betterwithaddons/interaction/minetweaker/Infuser.java b/src/main/java/betterwithaddons/interaction/minetweaker/Infuser.java index d4291f7..e262331 100644 --- a/src/main/java/betterwithaddons/interaction/minetweaker/Infuser.java +++ b/src/main/java/betterwithaddons/interaction/minetweaker/Infuser.java @@ -17,6 +17,7 @@ import crafttweaker.mc1120.recipes.MCRecipeManager; import crafttweaker.mc1120.recipes.MCRecipeShaped; import crafttweaker.mc1120.recipes.MCRecipeShapeless; +import java.util.Arrays; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import stanhebben.zenscript.annotations.Optional; @@ -49,6 +50,11 @@ public static void addShapeless(IItemStack output, IIngredient[] ingredients, in public static void addTransmutation(IItemStack output, IIngredient input, int spirits) { CraftTweaker.LATE_ACTIONS.add(new AddTransmutation(CraftTweakerMC.getItemStack(output), new IngredientCraftTweaker(input), spirits)); } + + @ZenMethod + public static void addTransmutation(IItemStack[] outputs, IIngredient input, int spirits) { + CraftTweaker.LATE_ACTIONS.add(new AddTransmutation(Arrays.asList(outputs).stream().map(CraftTweakerMC::getItemStack).toArray(ItemStack[]::new), new IngredientCraftTweaker(input), spirits)); + } @ZenMethod public static void removeAll() { @@ -122,25 +128,34 @@ public AddShaped(IItemStack output, IIngredient[][] ingredients, int spirits, IR } private static class AddTransmutation implements IAction { - protected ItemStack output; + protected ItemStack[] possibleOutputs; protected Ingredient input; protected int requiredSpirits; public AddTransmutation(ItemStack output, Ingredient input, int spirits) { - this.output = output; + this(new ItemStack[]{output}, input, spirits); + } + + public AddTransmutation(ItemStack[] outputs, Ingredient input, int spirits) + { + this.possibleOutputs = outputs; this.input = input; this.requiredSpirits = spirits; } @Override public void apply() { - CraftingManagerInfuserTransmutation.getInstance().addRecipe(new TransmutationRecipe(input,requiredSpirits,output)); + CraftingManagerInfuserTransmutation.getInstance().addRecipe(new TransmutationRecipe(input, requiredSpirits, possibleOutputs)); } @Override public String describe() { - return "Adding ancestral infuser transmutation for "+output.getDisplayName(); + StringBuilder sb = new StringBuilder("Adding ancestral infuser transmutation for"); + for (ItemStack i : possibleOutputs) { + sb.append(" " + i.getDisplayName()); + } + return sb.toString(); } }