001 package net.minecraft.item;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import java.util.List;
006 import net.minecraft.block.Block;
007 import net.minecraft.block.BlockSkull;
008 import net.minecraft.creativetab.CreativeTabs;
009 import net.minecraft.entity.player.EntityPlayer;
010 import net.minecraft.tileentity.TileEntity;
011 import net.minecraft.tileentity.TileEntitySkull;
012 import net.minecraft.util.MathHelper;
013 import net.minecraft.util.StatCollector;
014 import net.minecraft.world.World;
015
016 public class ItemSkull extends Item
017 {
018 private static final String[] skullTypes = new String[] {"skeleton", "wither", "zombie", "char", "creeper"};
019 private static final int[] field_82806_b = new int[] {224, 225, 226, 227, 228};
020
021 public ItemSkull(int par1)
022 {
023 super(par1);
024 this.setCreativeTab(CreativeTabs.tabDecorations);
025 this.setMaxDamage(0);
026 this.setHasSubtypes(true);
027 }
028
029 /**
030 * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
031 * True if something happen and false if it don't. This is for ITEMS, not BLOCKS
032 */
033 public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
034 {
035 if (par7 == 0)
036 {
037 return false;
038 }
039 else if (!par3World.getBlockMaterial(par4, par5, par6).isSolid())
040 {
041 return false;
042 }
043 else
044 {
045 if (par7 == 1)
046 {
047 ++par5;
048 }
049
050 if (par7 == 2)
051 {
052 --par6;
053 }
054
055 if (par7 == 3)
056 {
057 ++par6;
058 }
059
060 if (par7 == 4)
061 {
062 --par4;
063 }
064
065 if (par7 == 5)
066 {
067 ++par4;
068 }
069
070 if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack))
071 {
072 return false;
073 }
074 else if (!Block.skull.canPlaceBlockAt(par3World, par4, par5, par6))
075 {
076 return false;
077 }
078 else
079 {
080 par3World.setBlockAndMetadataWithNotify(par4, par5, par6, Block.skull.blockID, par7);
081 int var11 = 0;
082
083 if (par7 == 1)
084 {
085 var11 = MathHelper.floor_double((double)(par2EntityPlayer.rotationYaw * 16.0F / 360.0F) + 0.5D) & 15;
086 }
087
088 TileEntity var12 = par3World.getBlockTileEntity(par4, par5, par6);
089
090 if (var12 != null && var12 instanceof TileEntitySkull)
091 {
092 String var13 = "";
093
094 if (par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("SkullOwner"))
095 {
096 var13 = par1ItemStack.getTagCompound().getString("SkullOwner");
097 }
098
099 ((TileEntitySkull)var12).setSkullType(par1ItemStack.getItemDamage(), var13);
100 ((TileEntitySkull)var12).setSkullRotation(var11);
101 ((BlockSkull)Block.skull).makeWither(par3World, par4, par5, par6, (TileEntitySkull)var12);
102 }
103
104 --par1ItemStack.stackSize;
105 return true;
106 }
107 }
108 }
109
110 @SideOnly(Side.CLIENT)
111
112 /**
113 * returns a list of items with the same ID, but different meta (eg: dye returns 16 items)
114 */
115 public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
116 {
117 for (int var4 = 0; var4 < skullTypes.length; ++var4)
118 {
119 par3List.add(new ItemStack(par1, 1, var4));
120 }
121 }
122
123 /**
124 * Returns the metadata of the block which this Item (ItemBlock) can place
125 */
126 public int getMetadata(int par1)
127 {
128 return par1;
129 }
130
131 @SideOnly(Side.CLIENT)
132
133 /**
134 * Gets an icon index based on an item's damage value
135 */
136 public int getIconFromDamage(int par1)
137 {
138 if (par1 < 0 || par1 >= skullTypes.length)
139 {
140 par1 = 0;
141 }
142
143 return field_82806_b[par1];
144 }
145
146 public String getItemNameIS(ItemStack par1ItemStack)
147 {
148 int var2 = par1ItemStack.getItemDamage();
149
150 if (var2 < 0 || var2 >= skullTypes.length)
151 {
152 var2 = 0;
153 }
154
155 return super.getItemName() + "." + skullTypes[var2];
156 }
157
158 public String getItemDisplayName(ItemStack par1ItemStack)
159 {
160 return par1ItemStack.getItemDamage() == 3 && par1ItemStack.hasTagCompound() && par1ItemStack.getTagCompound().hasKey("SkullOwner") ? StatCollector.translateToLocalFormatted("item.skull.player.name", new Object[] {par1ItemStack.getTagCompound().getString("SkullOwner")}): super.getItemDisplayName(par1ItemStack);
161 }
162 }