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.entity.player.EntityPlayer;
007    import net.minecraft.nbt.NBTTagCompound;
008    import net.minecraft.nbt.NBTTagString;
009    import net.minecraft.util.StatCollector;
010    import net.minecraft.world.World;
011    
012    public class ItemEditableBook extends Item
013    {
014        public ItemEditableBook(int par1)
015        {
016            super(par1);
017            this.setMaxStackSize(1);
018        }
019    
020        public static boolean validBookTagContents(NBTTagCompound par0NBTTagCompound)
021        {
022            if (!ItemWritableBook.validBookTagPages(par0NBTTagCompound))
023            {
024                return false;
025            }
026            else if (!par0NBTTagCompound.hasKey("title"))
027            {
028                return false;
029            }
030            else
031            {
032                String var1 = par0NBTTagCompound.getString("title");
033                return var1 != null && var1.length() <= 16 ? par0NBTTagCompound.hasKey("author") : false;
034            }
035        }
036    
037        public String getItemDisplayName(ItemStack par1ItemStack)
038        {
039            if (par1ItemStack.hasTagCompound())
040            {
041                NBTTagCompound var2 = par1ItemStack.getTagCompound();
042                NBTTagString var3 = (NBTTagString)var2.getTag("title");
043    
044                if (var3 != null)
045                {
046                    return var3.toString();
047                }
048            }
049    
050            return super.getItemDisplayName(par1ItemStack);
051        }
052    
053        @SideOnly(Side.CLIENT)
054    
055        /**
056         * allows items to add custom lines of information to the mouseover description
057         */
058        public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
059        {
060            if (par1ItemStack.hasTagCompound())
061            {
062                NBTTagCompound var5 = par1ItemStack.getTagCompound();
063                NBTTagString var6 = (NBTTagString)var5.getTag("author");
064    
065                if (var6 != null)
066                {
067                    par3List.add("\u00a77" + String.format(StatCollector.translateToLocalFormatted("book.byAuthor", new Object[] {var6.data}), new Object[0]));
068                }
069            }
070        }
071    
072        /**
073         * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
074         */
075        public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
076        {
077            par3EntityPlayer.displayGUIBook(par1ItemStack);
078            return par1ItemStack;
079        }
080    
081        /**
082         * If this function returns true (or the item is damageable), the ItemStack's NBT tag will be sent to the client.
083         */
084        public boolean getShareTag()
085        {
086            return true;
087        }
088    
089        @SideOnly(Side.CLIENT)
090        public boolean hasEffect(ItemStack par1ItemStack)
091        {
092            return true;
093        }
094    }