package net.minecraft.item; import com.mojang.authlib.GameProfile; import java.util.UUID; import net.minecraft.block.Block; import net.minecraft.block.BlockSkull; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntitySkull; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.World; public class ItemSkull extends Item { private static final String[] skullTypes = new String[] {"skeleton", "wither", "zombie", "char", "creeper"}; private static final String __OBFID = "CL_00000067"; public ItemSkull() { this.setCreativeTab(CreativeTabs.tabDecorations); this.setMaxDamage(0); this.setHasSubtypes(true); } /** * Called when a Block is right-clicked with this Item * * @param pos The block being right-clicked * @param side The side being right-clicked */ public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { if (side == EnumFacing.DOWN) { return false; } else { IBlockState var9 = worldIn.getBlockState(pos); Block var10 = var9.getBlock(); boolean var11 = var10.isReplaceable(worldIn, pos); if (!var11) { if (!worldIn.getBlockState(pos).getBlock().getMaterial().isSolid()) { return false; } pos = pos.offset(side); } if (!playerIn.func_175151_a(pos, side, stack)) { return false; } else if (!Blocks.skull.canPlaceBlockAt(worldIn, pos)) { return false; } else { if (!worldIn.isRemote) { worldIn.setBlockState(pos, Blocks.skull.getDefaultState().withProperty(BlockSkull.field_176418_a, side), 3); int var12 = 0; if (side == EnumFacing.UP) { var12 = MathHelper.floor_double((double)(playerIn.rotationYaw * 16.0F / 360.0F) + 0.5D) & 15; } TileEntity var13 = worldIn.getTileEntity(pos); if (var13 instanceof TileEntitySkull) { TileEntitySkull var14 = (TileEntitySkull)var13; if (stack.getMetadata() == 3) { GameProfile var15 = null; if (stack.hasTagCompound()) { NBTTagCompound var16 = stack.getTagCompound(); if (var16.hasKey("SkullOwner", 10)) { var15 = NBTUtil.readGameProfileFromNBT(var16.getCompoundTag("SkullOwner")); } else if (var16.hasKey("SkullOwner", 8) && var16.getString("SkullOwner").length() > 0) { var15 = new GameProfile((UUID)null, var16.getString("SkullOwner")); } } var14.setPlayerProfile(var15); } else { var14.setType(stack.getMetadata()); } var14.setSkullRotation(var12); Blocks.skull.func_180679_a(worldIn, pos, var14); } --stack.stackSize; } return true; } } } /** * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is * placed as a Block (mostly used with ItemBlocks). */ public int getMetadata(int damage) { return damage; } /** * 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. */ public String getUnlocalizedName(ItemStack stack) { int var2 = stack.getMetadata(); if (var2 < 0 || var2 >= skullTypes.length) { var2 = 0; } return super.getUnlocalizedName() + "." + skullTypes[var2]; } public String getItemStackDisplayName(ItemStack stack) { if (stack.getMetadata() == 3 && stack.hasTagCompound()) { if (stack.getTagCompound().hasKey("SkullOwner", 8)) { return StatCollector.translateToLocalFormatted("item.skull.player.name", new Object[] {stack.getTagCompound().getString("SkullOwner")}); } if (stack.getTagCompound().hasKey("SkullOwner", 10)) { NBTTagCompound var2 = stack.getTagCompound().getCompoundTag("SkullOwner"); if (var2.hasKey("Name", 8)) { return StatCollector.translateToLocalFormatted("item.skull.player.name", new Object[] {var2.getString("Name")}); } } } return super.getItemStackDisplayName(stack); } /** * Called when an ItemStack with NBT data is read to potentially that ItemStack's NBT data */ public boolean updateItemStackNBT(NBTTagCompound nbt) { super.updateItemStackNBT(nbt); if (nbt.hasKey("SkullOwner", 8) && nbt.getString("SkullOwner").length() > 0) { GameProfile var2 = new GameProfile((UUID)null, nbt.getString("SkullOwner")); var2 = TileEntitySkull.updateGameprofile(var2); nbt.setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), var2)); return true; } else { return false; } } }