    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    }