package minefantasy.mf2.item;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import minefantasy.mf2.MineFantasyII;
import minefantasy.mf2.api.helpers.CustomToolHelper;
import minefantasy.mf2.api.material.CustomMaterial;
import minefantasy.mf2.item.list.ComponentListMF;
import minefantasy.mf2.item.list.CreativeTabMF;
import minefantasy.mf2.item.list.ToolListMF;
import minefantasy.mf2.item.tool.ItemPickMF;
import minefantasy.mf2.material.MetalMaterial;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.oredict.OreDictionary;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* @author Anonymous Productions
*/
public class ItemComponentMF extends Item
{
private String name;
public ItemComponentMF(int rarity)
{
itemRarity = rarity;
}
public ItemComponentMF(String name)
{
this(name, 0);
}
public ItemComponentMF(String name, int rarity)
{
super();
itemRarity = rarity;
this.name = name;
setTextureName("minefantasy2:component/"+name);
this.setCreativeTab(CreativeTabMF.tabMaterialsMF);
GameRegistry.registerItem(this, "MF_Com_"+name, MineFantasyII.MODID);
this.setUnlocalizedName(name);
}
/*private int itemRarity;
@Override
public EnumRarity getRarity(ItemStack item)
{
int lvl = itemRarity+1;
if(item.isItemEnchanted())
{
if(lvl == 0)
{
lvl++;
}
lvl ++;
}
if(lvl >= ToolListMF.rarity.length)
{
lvl = ToolListMF.rarity.length-1;
}
return ToolListMF.rarity[lvl];
}*/
@Override
public void getSubItems(Item item, CreativeTabs tab, List list)
{
if(this.getCreativeTab() != CreativeTabMF.tabMaterialsMF)
{
super.getSubItems(item, tab, list);
return;
}
if(this != ComponentListMF.plank)
{
return;
}
for(Item ingot: ComponentListMF.ingots)
{
if(ingot == ComponentListMF.ingots[3])
{
add(list, Items.iron_ingot);
}
if(ingot == ComponentListMF.ingots[7])
{
add(list, Items.gold_ingot);
}
add(list, ingot);
}
if(isCustom)
{
ArrayList<CustomMaterial> wood = CustomMaterial.getList("wood");
Iterator iteratorWood = wood.iterator();
while(iteratorWood.hasNext())
{
CustomMaterial customMat = (CustomMaterial) iteratorWood.next();
//if(MineFantasyII.isDebug() || customMat.getItem() != null)
//{
//list.add(this.construct(customMat.name));
//list.add(this);
list.add( this.construct(customMat.name) );
//list.add(this);
//}
}
}
//add(list, ComponentListMF.plank);
//add(list, ComponentListMF.plankRefined);
add(list, ComponentListMF.nail);
add(list, ComponentListMF.rivet);
add(list, ComponentListMF.thread);
add(list, ComponentListMF.clay_pot_uncooked);
add(list, ComponentListMF.clay_pot);
add(list, ComponentListMF.ingot_mould_uncooked);
add(list, ComponentListMF.ingot_mould);
add(list, ComponentListMF.leather_strip);
add(list, ComponentListMF.rawhideSmall);
add(list, ComponentListMF.rawhideMedium);
add(list, ComponentListMF.rawhideLarge);
add(list, ComponentListMF.hideSmall);
add(list, ComponentListMF.hideMedium);
add(list, ComponentListMF.hideLarge);
add(list, ComponentListMF.oreCopper);
add(list, ComponentListMF.oreTin);
add(list, ComponentListMF.oreIron);
add(list, ComponentListMF.oreSilver);
add(list, ComponentListMF.oreGold);
add(list, ComponentListMF.oreTungsten);
add(list, ComponentListMF.flux);
add(list, ComponentListMF.flux_strong);
add(list, ComponentListMF.flux_pot);
add(list, ComponentListMF.coal_flux);
add(list, ComponentListMF.coke);
add(list, ComponentListMF.diamond_shards);
add(list, ComponentListMF.fletching);
add(list, ComponentListMF.plant_oil);
add(list, ComponentListMF.coalDust);
add(list, ComponentListMF.iron_prep);
add(list, ComponentListMF.obsidian_rock);
add(list, ComponentListMF.sulfur);
add(list, ComponentListMF.nitre);
add(list, ComponentListMF.blackpowder);
add(list, ComponentListMF.blackpowder_advanced);
add(list, ComponentListMF.bomb_fuse);
add(list, ComponentListMF.bomb_fuse_long);
add(list, ComponentListMF.shrapnel);
add(list, ComponentListMF.magma_cream_refined);
add(list, ComponentListMF.bomb_casing_uncooked);
add(list, ComponentListMF.bomb_casing);
add(list, ComponentListMF.mine_casing_uncooked);
add(list, ComponentListMF.mine_casing);
add(list, ComponentListMF.bomb_casing_iron);
add(list, ComponentListMF.mine_casing_iron);
add(list, ComponentListMF.bomb_casing_obsidian);
add(list, ComponentListMF.mine_casing_obsidian);
add(list, ComponentListMF.bomb_casing_crystal);
add(list, ComponentListMF.mine_casing_crystal);
add(list, ComponentListMF.bomb_casing_arrow);
add(list, ComponentListMF.bomb_casing_bolt);
add(list, ComponentListMF.clay_brick);
add(list, ComponentListMF.kaolinite);
add(list, ComponentListMF.kaolinite_dust);
add(list, ComponentListMF.fireclay);
add(list, ComponentListMF.fireclay_brick);
add(list, ComponentListMF.strong_brick);
add(list, ComponentListMF.dragon_heart);
add(list, ComponentListMF.talisman_lesser);
add(list, ComponentListMF.talisman_greater);
add(list, ComponentListMF.bolt);
add(list, ComponentListMF.iron_frame);
add(list, ComponentListMF.iron_strut);
add(list, ComponentListMF.steel_tube);
add(list, ComponentListMF.bronze_gears);
add(list, ComponentListMF.tungsten_gears);
add(list, ComponentListMF.cogwork_shaft);
add(list, ComponentListMF.ingotCompositeAlloy);
add(list, ComponentListMF.crossbow_handle_wood);
add(list, ComponentListMF.crossbow_stock_wood);
add(list, ComponentListMF.crossbow_stock_iron);
add(list, ComponentListMF.cross_arms_basic);
add(list, ComponentListMF.cross_arms_light);
add(list, ComponentListMF.cross_arms_heavy);
add(list, ComponentListMF.cross_arms_advanced);
add(list, ComponentListMF.cross_ammo);
add(list, ComponentListMF.cross_scope);
add(list, ComponentListMF.cross_bayonet);
/*
ArrayList<CustomMaterial> metal = CustomMaterial.getList("metal");
Iterator iteratorMetal = metal.iterator();
while(iteratorMetal.hasNext())
{
CustomMaterial customMat = (CustomMaterial) iteratorMetal.next();
ArrayList<ItemStack> mats = OreDictionary.getOres("ingot"+customMat.name);
if(MineFantasyII.isDebug() || (mats != null && !mats.isEmpty()))
{
list.add(ComponentListMF.scrapMetal.createComm(customMat.name.toLowerCase()));
}
}
*/
}
private void add(List list, Item item)
{
list.add(new ItemStack(item));
}
@Override
public void addInformation(ItemStack item, EntityPlayer user, List list, boolean extra)
{
super.addInformation(item, user, list, extra);
if(isCustom)
{
CustomToolHelper.addComponentString(item, list,CustomMaterial.getMaterialFor(item,CustomToolHelper.slot_main));
}
}
//===================================================== CUSTOM START =============================================================\\
private boolean isCustom = false;
public ItemComponentMF setCustom(String s)
{
canRepair = false;
setTextureName("minefantasy2:custom/component/"+"plank");
isCustom = true;
return this;
}
protected float getWeightModifier(ItemStack stack)
{
return CustomToolHelper.getWeightModifier(stack, 1.0F);
}
private IIcon componentTex = null;
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister reg)
{
if(isCustom)
{
componentTex = reg.registerIcon(this.getIconString());
}
super.registerIcons(reg);
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses()
{
return isCustom;
}
@Override
public IIcon getIcon(ItemStack stack, int pass)
{
if(isCustom )
{
return componentTex;
}
return super.getIcon(stack, pass);
}
@Override
@SideOnly(Side.CLIENT)
////Probably not the cleanest way to do this, but I decided to because for this item,
/// the color will always be only one layer from only one material
public int getColorFromItemStack(ItemStack item, int layer)
{
//return CustomToolHelper.getColourFromItemStack(item, layer, super.getColorFromItemStack(item, layer));
if(isCustom)
{
CustomMaterial mat = CustomMaterial.getMaterialFor(item,CustomToolHelper.slot_main);
if(mat != null)
return mat.getColourInt();
}
return super.getColorFromItemStack(item, layer);
}
@Override
public int getMaxDamage(ItemStack stack)
{
return CustomToolHelper.getMaxDamage(stack, super.getMaxDamage(stack));
}
protected int itemRarity;
@Override
public EnumRarity getRarity(ItemStack item)
{
return CustomToolHelper.getRarity(item, itemRarity);
}
public ItemStack construct(String main)
{
return construct(main, 1);
}
public ItemStack construct(String main, int stacksize)
{
return CustomToolHelper.constructSingleColoredLayer(this, main, stacksize);
}
@Override
@SideOnly(Side.CLIENT)
public String getItemStackDisplayName(ItemStack item)
{
//TODO
//For now if this item is custom, it must be a plank.
//Replace with more proper code
if(isCustom){
return CustomToolHelper.getLocalisedName(item, "item.commodity_plank.name");
}
String unlocalName = this.getUnlocalizedNameInefficiently(item) + ".name";
return CustomToolHelper.getLocalisedName(item, unlocalName);
}
//====================================================== CUSTOM END ==============================================================\\
}