Forgot files...
This commit is contained in:
parent
c32ac20936
commit
a03bc4d9a9
|
@ -0,0 +1,147 @@
|
||||||
|
package WayofTime.bloodmagic.api.recipe;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AlchemyTableRecipe
|
||||||
|
{
|
||||||
|
protected ItemStack output = null;
|
||||||
|
protected ArrayList<Object> input = new ArrayList<Object>();
|
||||||
|
@Getter
|
||||||
|
protected int lpDrained;
|
||||||
|
@Getter
|
||||||
|
protected int ticksRequired;
|
||||||
|
@Getter
|
||||||
|
protected int tierRequired;
|
||||||
|
|
||||||
|
public AlchemyTableRecipe(Block result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe)
|
||||||
|
{
|
||||||
|
this(new ItemStack(result), lpDrained, ticksRequired, tierRequired, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AlchemyTableRecipe(Item result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe)
|
||||||
|
{
|
||||||
|
this(new ItemStack(result), lpDrained, ticksRequired, tierRequired, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AlchemyTableRecipe(ItemStack result, int lpDrained, int ticksRequired, int tierRequired, Object... recipe)
|
||||||
|
{
|
||||||
|
output = result.copy();
|
||||||
|
this.lpDrained = lpDrained;
|
||||||
|
this.ticksRequired = ticksRequired;
|
||||||
|
this.tierRequired = tierRequired;
|
||||||
|
for (Object in : recipe)
|
||||||
|
{
|
||||||
|
if (in instanceof ItemStack)
|
||||||
|
{
|
||||||
|
input.add(((ItemStack) in).copy());
|
||||||
|
} else if (in instanceof Item)
|
||||||
|
{
|
||||||
|
input.add(new ItemStack((Item) in));
|
||||||
|
} else if (in instanceof Block)
|
||||||
|
{
|
||||||
|
input.add(new ItemStack((Block) in));
|
||||||
|
} else if (in instanceof String)
|
||||||
|
{
|
||||||
|
input.add(OreDictionary.getOres((String) in));
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
String ret = "Invalid alchemy recipe: ";
|
||||||
|
for (Object tmp : recipe)
|
||||||
|
{
|
||||||
|
ret += tmp + ", ";
|
||||||
|
}
|
||||||
|
ret += output;
|
||||||
|
throw new RuntimeException(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the size of the recipe area
|
||||||
|
*/
|
||||||
|
public int getRecipeSize()
|
||||||
|
{
|
||||||
|
return input.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getRecipeOutput()
|
||||||
|
{
|
||||||
|
return output.copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to check if a recipe matches current crafting inventory. World and
|
||||||
|
* BlockPos are for future-proofing
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public boolean matches(List<ItemStack> checkedList, World world, BlockPos pos)
|
||||||
|
{
|
||||||
|
ArrayList<Object> required = new ArrayList<Object>(input);
|
||||||
|
|
||||||
|
for (int x = 0; x < checkedList.size(); x++)
|
||||||
|
{
|
||||||
|
ItemStack slot = checkedList.get(x);
|
||||||
|
|
||||||
|
if (slot != null)
|
||||||
|
{
|
||||||
|
boolean inRecipe = false;
|
||||||
|
Iterator<Object> req = required.iterator();
|
||||||
|
|
||||||
|
while (req.hasNext())
|
||||||
|
{
|
||||||
|
boolean match = false;
|
||||||
|
|
||||||
|
Object next = req.next();
|
||||||
|
|
||||||
|
if (next instanceof ItemStack)
|
||||||
|
{
|
||||||
|
match = OreDictionary.itemMatches((ItemStack) next, slot, false);
|
||||||
|
} else if (next instanceof List)
|
||||||
|
{
|
||||||
|
Iterator<ItemStack> itr = ((List<ItemStack>) next).iterator();
|
||||||
|
while (itr.hasNext() && !match)
|
||||||
|
{
|
||||||
|
match = OreDictionary.itemMatches(itr.next(), slot, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match)
|
||||||
|
{
|
||||||
|
inRecipe = true;
|
||||||
|
required.remove(next);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inRecipe)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return required.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the input for this recipe, any mod accessing this value should
|
||||||
|
* never manipulate the values in this array as it will effect the recipe
|
||||||
|
* itself.
|
||||||
|
*
|
||||||
|
* @return The recipes input vales.
|
||||||
|
*/
|
||||||
|
public ArrayList<Object> getInput()
|
||||||
|
{
|
||||||
|
return this.input;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package WayofTime.bloodmagic.api.registry;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import WayofTime.bloodmagic.api.recipe.AlchemyTableRecipe;
|
||||||
|
|
||||||
|
public class AlchemyTableRecipeRegistry
|
||||||
|
{
|
||||||
|
private static List<AlchemyTableRecipe> recipeList = new ArrayList<AlchemyTableRecipe>();
|
||||||
|
|
||||||
|
public static void registerRecipe(AlchemyTableRecipe recipe)
|
||||||
|
{
|
||||||
|
recipeList.add(recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerRecipe(ItemStack outputStack, int lpDrained, int ticksRequired, int tierRequired, Object... objects)
|
||||||
|
{
|
||||||
|
registerRecipe(new AlchemyTableRecipe(outputStack, lpDrained, ticksRequired, tierRequired, objects));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AlchemyTableRecipe getMatchingRecipe(List<ItemStack> itemList, World world, BlockPos pos)
|
||||||
|
{
|
||||||
|
for (AlchemyTableRecipe recipe : recipeList)
|
||||||
|
{
|
||||||
|
if (recipe.matches(itemList, world, pos))
|
||||||
|
{
|
||||||
|
return recipe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<AlchemyTableRecipe> getRecipeList()
|
||||||
|
{
|
||||||
|
return new ArrayList<AlchemyTableRecipe>(recipeList);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue