package com.vapourdrive.harderstart.items;
import java.util.List;
import java.util.Random;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentData;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import com.vapourdrive.harderstart.HS_ModInfo;
import com.vapourdrive.harderstart.HarderStart;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ItemEnchantmentGem extends Item
{
String Name;
Enchantment Enchantment;
EnumChatFormatting Colour;
public ItemEnchantmentGem(EnumChatFormatting colour, String name, Enchantment enchantment)
{
super();
this.Name = name;
this.Enchantment = enchantment;
this.Colour = colour;
this.setUnlocalizedName(Name);
this.setCreativeTab(HarderStart.tabGem);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register)
{
itemIcon = register.registerIcon(HS_ModInfo.RESOURSE_LOCATION + Name);
}
@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack)
{
return false;
}
/**
* Checks isDamagable and if it cannot be stacked
*/
@Override
public boolean isItemTool(ItemStack stack)
{
return false;
}
public NBTTagList getEnchantlist(ItemStack stack)
{
if (stack.stackTagCompound != null && stack.stackTagCompound.hasKey("StoredEnchantments", 9))
{
return (NBTTagList) stack.stackTagCompound.getTag("StoredEnchantments");
}
else
{
return new NBTTagList();
}
}
@Override
@SideOnly(Side.CLIENT)
public String getItemStackDisplayName(ItemStack stack)
{
return (this.Colour + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name").trim());
}
/**
* Adds the enchantment info for the stack to the tooltip suppressed warning
* is irritating, meh, same as vanilla's implementation
*/
@SuppressWarnings("static-access")
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advancedInfo)
{
super.addInformation(stack, player, list, advancedInfo);
NBTTagList nbttaglist = this.getEnchantlist(stack);
if (nbttaglist != null)
{
for (int i = 0; i < nbttaglist.tagCount(); ++i)
{
short shortID = nbttaglist.getCompoundTagAt(i).getShort("id");
short shortLevel = nbttaglist.getCompoundTagAt(i).getShort("lvl");
if (Enchantment.enchantmentsList[shortID] != null)
{
list.add(Enchantment.enchantmentsList[shortID].getTranslatedName(shortLevel));
}
}
}
}
/**
* Adds a stored enchantment to the stack
*/
public void addEnchantment(ItemStack stack, EnchantmentData enchData)
{
NBTTagList tagList = this.getEnchantlist(stack);
boolean notEnchantedWith = true;
for (int i = 0; i < tagList.tagCount(); ++i)
{
NBTTagCompound tagCompound = tagList.getCompoundTagAt(i);
if (tagCompound.getShort("id") == enchData.enchantmentobj.effectId)
{
if (tagCompound.getShort("lvl") < enchData.enchantmentLevel)
{
tagCompound.setShort("lvl", (short) enchData.enchantmentLevel);
}
notEnchantedWith = false;
break;
}
}
if (notEnchantedWith)
{
NBTTagCompound tag = new NBTTagCompound();
tag.setShort("id", (short) enchData.enchantmentobj.effectId);
tag.setShort("lvl", (short) enchData.enchantmentLevel);
tagList.appendTag(tag);
}
if (!stack.hasTagCompound())
{
stack.setTagCompound(new NBTTagCompound());
}
stack.getTagCompound().setTag("StoredEnchantments", tagList);
}
/**
* Returns the ItemStack of an enchanted version of this item.
*/
public ItemStack getEnchantedItemStack(Random rand)
{
ItemStack itemstack = new ItemStack(this);
int value = rand.nextInt(Enchantment.getMaxLevel() + 1);
this.addEnchantment(itemstack, new EnchantmentData(Enchantment, value));
return itemstack;
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List list)
{
ItemStack stack = new ItemStack(item, 1);
list.add(stack);
for (int i = 1; i <= this.Enchantment.getMaxLevel(); i++)
{
stack = new ItemStack(item, 1);
stack.addEnchantment(Enchantment, i);
list.add(stack);
}
}
public Enchantment getGemEnchantment()
{
return this.Enchantment;
}
}