package net.minecraft.entity.item; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.EntityHanging; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public class EntityItemFrame extends EntityHanging { /** Chance for this item frame's item to drop from the frame. */ private float itemDropChance = 1.0F; public EntityItemFrame(World par1World) { super(par1World); } public EntityItemFrame(World par1World, int par2, int par3, int par4, int par5) { super(par1World, par2, par3, par4, par5); this.setDirection(par5); } protected void entityInit() { this.getDataWatcher().addObjectByDataType(2, 5); this.getDataWatcher().addObject(3, Byte.valueOf((byte)0)); } public int func_82329_d() { return 9; } public int func_82330_g() { return 9; } @SideOnly(Side.CLIENT) /** * Checks if the entity is in range to render by using the past in distance and comparing it to its average edge * length * 64 * renderDistanceWeight Args: distance */ public boolean isInRangeToRenderDist(double par1) { double var3 = 16.0D; var3 *= 64.0D * this.renderDistanceWeight; return par1 < var3 * var3; } /** * Drop the item currently on this item frame. */ public void dropItemStack() { this.entityDropItem(new ItemStack(Item.itemFrame), 0.0F); ItemStack var1 = this.getDisplayedItem(); if (var1 != null && this.rand.nextFloat() < this.itemDropChance) { var1 = var1.copy(); var1.setItemFrame((EntityItemFrame)null); this.entityDropItem(var1, 0.0F); } } public ItemStack getDisplayedItem() { return this.getDataWatcher().getWatchableObjectItemStack(2); } public void setDisplayedItem(ItemStack par1ItemStack) { par1ItemStack = par1ItemStack.copy(); par1ItemStack.stackSize = 1; par1ItemStack.setItemFrame(this); this.getDataWatcher().updateObject(2, par1ItemStack); this.getDataWatcher().func_82708_h(2); } /** * Return the rotation of the item currently on this frame. */ public int getRotation() { return this.getDataWatcher().getWatchableObjectByte(3); } public void setItemRotation(int par1) { this.getDataWatcher().updateObject(3, Byte.valueOf((byte)(par1 % 4))); } /** * (abstract) Protected helper method to write subclass entity data to NBT. */ public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) { if (this.getDisplayedItem() != null) { par1NBTTagCompound.setCompoundTag("Item", this.getDisplayedItem().writeToNBT(new NBTTagCompound())); par1NBTTagCompound.setByte("ItemRotation", (byte)this.getRotation()); par1NBTTagCompound.setFloat("ItemDropChance", this.itemDropChance); } super.writeEntityToNBT(par1NBTTagCompound); } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) { NBTTagCompound var2 = par1NBTTagCompound.getCompoundTag("Item"); if (var2 != null && !var2.hasNoTags()) { this.setDisplayedItem(ItemStack.loadItemStackFromNBT(var2)); this.setItemRotation(par1NBTTagCompound.getByte("ItemRotation")); if (par1NBTTagCompound.hasKey("ItemDropChance")) { this.itemDropChance = par1NBTTagCompound.getFloat("ItemDropChance"); } } super.readEntityFromNBT(par1NBTTagCompound); } /** * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig. */ public boolean interact(EntityPlayer par1EntityPlayer) { if (this.getDisplayedItem() == null) { ItemStack var2 = par1EntityPlayer.getHeldItem(); if (var2 != null && !this.worldObj.isRemote) { this.setDisplayedItem(var2); if (!par1EntityPlayer.capabilities.isCreativeMode && --var2.stackSize <= 0) { par1EntityPlayer.inventory.setInventorySlotContents(par1EntityPlayer.inventory.currentItem, (ItemStack)null); } } } else if (!this.worldObj.isRemote) { this.setItemRotation(this.getRotation() + 1); } return true; } }