package minefantasy.mf2.api.crafting.anvil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import minefantasy.mf2.api.helpers.CustomToolHelper;
import minefantasy.mf2.api.rpg.Skill;
import net.minecraft.block.Block;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
/**
*
* @author AnonymousProductions
*
*/
public class CraftingManagerAnvil
{
/** The static instance of this class */
private static final CraftingManagerAnvil instance = new CraftingManagerAnvil();
/** A list of all the recipes added */
public List recipes = new ArrayList();
/**
* Returns the static instance of this class
*/
public static CraftingManagerAnvil getInstance()
{
return instance;
}
private CraftingManagerAnvil()
{
Collections.sort(this.recipes, new RecipeSorterAnvil(this));
System.out.println("MineFantasy: Anvil recipes initiating");
}
/**
* Adds a recipe. See spreadsheet on first page for details.
*/
public IAnvilRecipe addRecipe(ItemStack result, Skill skill, String research, boolean hot, float exp, String tool, int hammer, int anvil, int time, Object ... input)
{
String var3 = "";
int var4 = 0;
int var5 = 0;
int var6 = 0;
int var9;
if (input[var4] instanceof String[])
{
String[] var7 = ((String[])input[var4++]);
String[] var8 = var7;
var9 = var7.length;
for (int var10 = 0; var10 < var9; ++var10)
{
String var11 = var8[var10];
++var6;
var5 = var11.length();
var3 = var3 + var11;
}
}
else
{
while (input[var4] instanceof String)
{
String var13 = (String)input[var4++];
++var6;
var5 = var13.length();
var3 = var3 + var13;
}
}
HashMap var14;
for (var14 = new HashMap(); var4 < input.length; var4 += 2)
{
Character var16 = (Character)input[var4];
ItemStack var17 = null;
if (input[var4 + 1] instanceof Item)
{
var17 = new ItemStack((Item)input[var4 + 1], 1, 32767);
}
else if (input[var4 + 1] instanceof Block)
{
var17 = new ItemStack((Block)input[var4 + 1], 1, 32767);
}
else if (input[var4 + 1] instanceof ItemStack)
{
var17 = (ItemStack)input[var4 + 1];
}
var14.put(var16, var17);
}
ItemStack[] var15 = new ItemStack[var5 * var6];
for (var9 = 0; var9 < var5 * var6; ++var9)
{
char var18 = var3.charAt(var9);
if (var14.containsKey(Character.valueOf(var18)))
{
var15[var9] = ((ItemStack)var14.get(Character.valueOf(var18))).copy();
}
else
{
var15[var9] = null;
}
}
IAnvilRecipe recipe = new ShapedAnvilRecipes(var5, var6, var15, result, tool, time, hammer, anvil, exp, hot, research, skill);
this.recipes.add(recipe);
return recipe;
}
public IAnvilRecipe addShapelessRecipe(ItemStack output, Skill skill, String research, boolean hot, float experience, String tool, int hammer, int anvil, int time, Object ... input)
{
ArrayList var3 = new ArrayList();
Object[] var4 = input;
int var5 = input.length;
for (int var6 = 0; var6 < var5; ++var6)
{
Object var7 = var4[var6];
if (var7 instanceof ItemStack)
{
var3.add(((ItemStack)var7).copy());
}
else if (var7 instanceof Item)
{
var3.add(new ItemStack((Item)var7));
}
else
{
if (!(var7 instanceof Block))
{
throw new RuntimeException("MineFantasy: Invalid shapeless anvil recipe!");
}
var3.add(new ItemStack((Block)var7));
}
}
IAnvilRecipe recipe = new ShapelessAnvilRecipes(output, tool, experience, hammer, anvil, time, var3, hot, research, skill);
this.recipes.add(recipe);
return recipe;
}
public ItemStack findMatchingRecipe(InventoryCrafting matrix)
{
int var2 = 0;
ItemStack var3 = null;
ItemStack var4 = null;
for (int var5 = 0; var5 < matrix.getSizeInventory(); ++var5)
{
ItemStack var6 = matrix.getStackInSlot(var5);
if (var6 != null)
{
if (var2 == 0)
{
var3 = var6;
}
if (var2 == 1)
{
var4 = var6;
}
++var2;
}
}
if (var2 == 2 && canRepair(var3, var4))
{
Item var10 = var3.getItem();
int var12 = var10.getMaxDamage() - var3.getItemDamageForDisplay();
int var7 = var10.getMaxDamage() - var4.getItemDamageForDisplay();
int var8 = var12 + var7 + var10.getMaxDamage() * 10 / 100;
int var9 = var10.getMaxDamage() - (var8)*2;
if (var9 < 0)
{
var9 = 0;
}
return new ItemStack(var3.getItem(), 1, var9);
}
else
{
Iterator var11 = this.recipes.iterator();
IAnvilRecipe var13;
do
{
if (!var11.hasNext())
{
return null;
}
var13 = (IAnvilRecipe)var11.next();
}
while (!var13.matches(matrix));
return var13.getCraftingResult(matrix);
}
}
private boolean canRepair(ItemStack item1, ItemStack item2)
{
if(item1.getItem() == item2.getItem() && item1.stackSize == 1 && item2.stackSize == 1 && item1.getItem().isRepairable())
{
return true;
}
if(item1.getItem() == item2.getItem() && item1.stackSize == 1 && item2.stackSize == 1 && item1.isItemDamaged() && CustomToolHelper.areToolsSame(item1, item2))
{
return true;
}
return false;
}
public ItemStack findMatchingRecipe(IAnvil anvil, InventoryCrafting matrix)
{
int time = 200;
int anvi = 1;
boolean hot = false;
int hammer = 0;
int var2 = 0;
String toolType = "hammer";
ItemStack var3 = null;
ItemStack var4 = null;
for (int var5 = 0; var5 < matrix.getSizeInventory(); ++var5)
{
ItemStack var6 = matrix.getStackInSlot(var5);
if (var6 != null)
{
if (var2 == 0)
{
var3 = var6;
}
if (var2 == 1)
{
var4 = var6;
}
++var2;
}
}
if (var2 == 2 && var3.getItem() == var4.getItem() && var3.stackSize == 1 && var4.stackSize == 1 && var3.getItem().isRepairable())
{
Item var10 = var3.getItem();
int var12 = var10.getMaxDamage() - var3.getItemDamageForDisplay();
int var7 = var10.getMaxDamage() - var4.getItemDamageForDisplay();
int var8 = var12 + var7 + var10.getMaxDamage() * 10 / 100;
int var9 = var10.getMaxDamage() - var8;
if (var9 < 0)
{
var9 = 0;
}
return new ItemStack(var3.getItem(), 1, var9);
}
else
{
Iterator var11 = this.recipes.iterator();
IAnvilRecipe var13 = null;
while(var11.hasNext())
{
IAnvilRecipe rec = (IAnvilRecipe)var11.next();
if(rec.matches(matrix))
{
var13 = rec;
}
}
if(var13 != null)
{
time = var13.getCraftTime();
hammer = var13.getRecipeHammer();
anvi = var13.getAnvil();
hot = var13.outputHot();
toolType = var13.getToolType();
anvil.setForgeTime(time);
anvil.setHammerUsed(hammer);
anvil.setRequiredAnvil(anvi);
anvil.setHotOutput(hot);
anvil.setToolType(toolType);
anvil.setResearch(var13.getResearch());
anvil.setSkill(var13.getSkill());
return var13.getCraftingResult(matrix);
}
return null;
}
}
/**
* returns the List<> of all recipes
*/
public List getRecipeList()
{
return this.recipes;
}
}