001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    
006    public class EntityItemFrame extends EntityHanging
007    {
008        private float field_82337_e = 1.0F;
009    
010        public EntityItemFrame(World par1World)
011        {
012            super(par1World);
013        }
014    
015        public EntityItemFrame(World par1World, int par2, int par3, int par4, int par5)
016        {
017            super(par1World, par2, par3, par4, par5);
018            this.func_82328_a(par5);
019        }
020    
021        protected void entityInit()
022        {
023            this.getDataWatcher().func_82709_a(2, 5);
024            this.getDataWatcher().addObject(3, Byte.valueOf((byte)0));
025        }
026    
027        public int func_82329_d()
028        {
029            return 9;
030        }
031    
032        public int func_82330_g()
033        {
034            return 9;
035        }
036    
037        @SideOnly(Side.CLIENT)
038    
039        /**
040         * Checks if the entity is in range to render by using the past in distance and comparing it to its average edge
041         * length * 64 * renderDistanceWeight Args: distance
042         */
043        public boolean isInRangeToRenderDist(double par1)
044        {
045            double var3 = 16.0D;
046            var3 *= 64.0D * this.renderDistanceWeight;
047            return par1 < var3 * var3;
048        }
049    
050        public void func_82331_h()
051        {
052            this.entityDropItem(new ItemStack(Item.field_82802_bI), 0.0F);
053    
054            if (this.func_82335_i() != null && this.rand.nextFloat() < this.field_82337_e)
055            {
056                this.func_82335_i().func_82842_a((EntityItemFrame)null);
057                this.entityDropItem(this.func_82335_i(), 0.0F);
058            }
059        }
060    
061        public ItemStack func_82335_i()
062        {
063            return this.getDataWatcher().func_82710_f(2);
064        }
065    
066        public void func_82334_a(ItemStack par1ItemStack)
067        {
068            par1ItemStack = par1ItemStack.copy();
069            par1ItemStack.stackSize = 1;
070            par1ItemStack.func_82842_a(this);
071            this.getDataWatcher().updateObject(2, par1ItemStack);
072            this.getDataWatcher().func_82708_h(2);
073        }
074    
075        public int func_82333_j()
076        {
077            return this.getDataWatcher().getWatchableObjectByte(3);
078        }
079    
080        public void func_82336_g(int par1)
081        {
082            this.getDataWatcher().updateObject(3, Byte.valueOf((byte)(par1 % 4)));
083        }
084    
085        /**
086         * (abstract) Protected helper method to write subclass entity data to NBT.
087         */
088        public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
089        {
090            if (this.func_82335_i() != null)
091            {
092                par1NBTTagCompound.setCompoundTag("Item", this.func_82335_i().writeToNBT(new NBTTagCompound()));
093                par1NBTTagCompound.setByte("ItemRotation", (byte)this.func_82333_j());
094                par1NBTTagCompound.setFloat("ItemDropChance", this.field_82337_e);
095            }
096    
097            super.writeEntityToNBT(par1NBTTagCompound);
098        }
099    
100        /**
101         * (abstract) Protected helper method to read subclass entity data from NBT.
102         */
103        public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
104        {
105            NBTTagCompound var2 = par1NBTTagCompound.getCompoundTag("Item");
106    
107            if (var2 != null && !var2.func_82582_d())
108            {
109                this.func_82334_a(ItemStack.loadItemStackFromNBT(var2));
110                this.func_82336_g(par1NBTTagCompound.getByte("ItemRotation"));
111    
112                if (par1NBTTagCompound.hasKey("ItemDropChance"))
113                {
114                    this.field_82337_e = par1NBTTagCompound.getFloat("ItemDropChance");
115                }
116            }
117    
118            super.readEntityFromNBT(par1NBTTagCompound);
119        }
120    
121        /**
122         * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
123         */
124        public boolean interact(EntityPlayer par1EntityPlayer)
125        {
126            if (this.func_82335_i() == null)
127            {
128                ItemStack var2 = par1EntityPlayer.getHeldItem();
129    
130                if (var2 != null && !this.worldObj.isRemote)
131                {
132                    this.func_82334_a(var2);
133    
134                    if (!par1EntityPlayer.capabilities.isCreativeMode && --var2.stackSize <= 0)
135                    {
136                        par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, (ItemStack)null);
137                    }
138                }
139            }
140            else if (!this.worldObj.isRemote)
141            {
142                this.func_82336_g(this.func_82333_j() + 1);
143            }
144    
145            return true;
146        }
147    }