Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random outputs for transmutation #174

Open
wants to merge 7 commits into
base: 1.12
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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/" }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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<TransmutationRecipe> 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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ItemStack> getRecipeOutputs() {
return Arrays.asList(possibleOutputs);
}

public int getRequiredSpirit(ItemStack input) {
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ItemStack> 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<ItemStack> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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();
}
}

Expand Down