package net.tropicraft.item.armor;
import java.util.List;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityHanging;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.tropicraft.client.entity.render.RenderArmorMask;
import net.tropicraft.entity.placeable.EntityWallMask;
import net.tropicraft.entity.placeable.EntityWallShell;
import net.tropicraft.info.TCInfo;
import net.tropicraft.item.ItemTropicraftMulti;
public class ItemAshenMask extends ItemTropicraftArmor {
@SideOnly(Side.CLIENT)
private IIcon[] images;
private final String[] displayNames;
private final String[] imageNames;
public ItemAshenMask(ArmorMaterial material, int renderIndex, int armorType, String[] displayNames, String[] imageNames) {
super(material, renderIndex, armorType);
this.imageNames = imageNames;
this.displayNames = displayNames;
}
/**
* Called to tick armor in the armor slot. Override to do something
*
* @param world
* @param player
* @param itemStack
*/
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int damage) {
// System.out.println("Twats");
int j = MathHelper.clamp_int(damage, 0, 15);
return this.images[j];
}
@SideOnly(Side.CLIENT)
@Override
/**
* returns a list of items with the same ID, but different meta (eg: dye returns 16 items)
*/
public void getSubItems(Item id, CreativeTabs creativeTabs, List list) {
for (int meta = 0; meta < imageNames.length; meta++) {
list.add(new ItemStack(id, 1, meta));
}
}
/**
* Returns the unlocalized name of this item. This version accepts an
* ItemStack so different stacks can have different names based on their
* damage or NBT.
*/
@Override
public String getUnlocalizedName(ItemStack par1ItemStack) {
int i = MathHelper.clamp_int(par1ItemStack.getItemDamage(), 0, 15);
return super.getUnlocalizedName() + "." + displayNames[i];
}
/**
* Registers all icons used in this item
*
* @param iconRegistry
* IconRegister instance used to register all icons for this item
*/
@SideOnly(Side.CLIENT)
@Override
public void registerIcons(IIconRegister iconRegistry) {
images = new IIcon[displayNames.length];
// this.itemIcon = iconRegistry.registerIcon(ModInfo.ICONLOCATION + getImageName());
for (int i = 0; i < displayNames.length; i++) {
images[i] = iconRegistry.registerIcon(TCInfo.ICON_LOCATION + imageNames[i]);
}
}
@Override
public void damageArmor(EntityLivingBase player, ItemStack stack,
DamageSource source, int damage, int slot) {
}
/**
* Returns a custom model for rendering the mask.
*/
@Override
public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot){
if (armorSlot == 0) // head
return new RenderArmorMask (itemStack.getItemDamage());
else
return null;
}
/**
* Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
* True if something happen and false if it don't. This is for ITEMS, not BLOCKS
*/
@Override
public boolean onItemUse(ItemStack itemStack, EntityPlayer player,
World world, int x, int y, int z,
int side, float local_px, float local_py, float local_pz)
{
if (side == 0)
{
return false;
}
else if (side == 1)
{
return false;
}
else // It's a wall, place the mask on it.
{
int type = itemStack.getItemDamage();
int direction = Direction.facingToDirection[side];
// Must set the world coordinates here, or onValidSurface will be false.
EntityHanging entityhanging = new EntityWallMask(world, x, y, z, direction, type);
if (!player.canPlayerEdit(x, y, z, side, itemStack))
{
return false;
}
else
{
if (entityhanging != null && entityhanging.onValidSurface())
{
if (!world.isRemote)
{
world.spawnEntityInWorld(entityhanging);
}
--itemStack.stackSize;
}
return true;
}
}
}
}