/*******************************************************************************
* AbyssalCraft
* Copyright (c) 2012 - 2017 Shinoow.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Contributors:
* Shinoow - implementation
******************************************************************************/
package com.shinoow.abyssalcraft.api.recipe;
import java.util.*;
import java.util.Map.Entry;
import net.minecraft.item.*;
import net.minecraftforge.oredict.OreDictionary;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.shinoow.abyssalcraft.api.item.*;
public class EngraverRecipes {
private static final EngraverRecipes engravingBase = new EngraverRecipes();
private List<ItemStack> coins = Lists.newArrayList();
private Map<ItemEngraving, ItemStack> engravings = Maps.newHashMap();
private Map<ItemStack, ItemStack> engravingList = Maps.newHashMap();
private Map<ItemStack, Float> experienceList = Maps.newHashMap();
public static EngraverRecipes instance()
{
return engravingBase;
}
private EngraverRecipes(){}
public void addCoin(Item coin){
addCoin(new ItemStack(coin, 1, OreDictionary.WILDCARD_VALUE));
}
public void addCoin(ItemStack coin){
coins.add(coin);
}
public void addEngraving(Item coin, ItemEngraving engraving, float xp){
addEngraving(new ItemStack(coin), engraving, xp);
}
public void addEngraving(ItemStack coin, ItemEngraving engraving, float xp){
engravings.put(engraving, coin);
engravingList.put(new ItemStack(engraving), coin);
experienceList.put(coin, xp);
}
/**
* Returns the engraving result of an item. This method doesn't do shit tbh
*/
public ItemStack getEngravingResult(ItemStack par1ItemStack)
{
if(coins.contains(par1ItemStack))
return par1ItemStack;
return ItemStack.EMPTY;
}
/**
* Returns the engraving result of an item.
*/
public ItemStack getEngravingResult(ItemStack par2, ItemEngraving par1)
{
for(ItemStack stack : coins)
if(areStacksEqual(par2, stack))
if(engravings.get(par1) != null)
if(par2.getItem() != ACItems.coin && par1 == ACItems.blank_engraving ||
par2.getItem() == ACItems.coin && par1 != ACItems.blank_engraving)
return engravings.get(par1);
return ItemStack.EMPTY;
}
private boolean areStacksEqual(ItemStack par1ItemStack, ItemStack par2ItemStack)
{
return (par2ItemStack.getItem() == par1ItemStack.getItem() || par1ItemStack.getItem() == ACItems.coin) && (par2ItemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE || par2ItemStack.getItemDamage() == par1ItemStack.getItemDamage());
}
/**
* Returns the coin list
*/
public List<ItemStack> getCoinList(){
return coins;
}
/**
* Returns the actual engraving list, with engravings and coins
*/
public Map<ItemEngraving, ItemStack> getEngravings(){
return engravings;
}
/**
* Returns a ItemStack version of the engraving list
*/
public Map<ItemStack, ItemStack> getEngravingList(){
return engravingList;
}
public float getExperience(ItemStack par1ItemStack)
{
float ret = par1ItemStack.getItem().getSmeltingExperience(par1ItemStack);
if (ret != -1) return ret;
for (Entry<ItemStack, Float> entry : experienceList.entrySet())
if (areStacksEqual(par1ItemStack, entry.getKey()))
return entry.getValue().floatValue();
return 0.0F;
}
}