001    package net.minecraft.item;
002    
003    import net.minecraft.creativetab.CreativeTabs;
004    import net.minecraft.entity.EntityHanging;
005    import net.minecraft.entity.item.EntityItemFrame;
006    import net.minecraft.entity.item.EntityPainting;
007    import net.minecraft.entity.player.EntityPlayer;
008    import net.minecraft.util.Direction;
009    import net.minecraft.world.World;
010    
011    public class ItemHangingEntity extends Item
012    {
013        private final Class hangingEntityClass;
014    
015        public ItemHangingEntity(int par1, Class par2Class)
016        {
017            super(par1);
018            this.hangingEntityClass = par2Class;
019            this.setCreativeTab(CreativeTabs.tabDecorations);
020        }
021    
022        /**
023         * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
024         * True if something happen and false if it don't. This is for ITEMS, not BLOCKS
025         */
026        public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
027        {
028            if (par7 == 0)
029            {
030                return false;
031            }
032            else if (par7 == 1)
033            {
034                return false;
035            }
036            else
037            {
038                int var11 = Direction.vineGrowth[par7];
039                EntityHanging var12 = this.createHangingEntity(par3World, par4, par5, par6, var11);
040    
041                if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack))
042                {
043                    return false;
044                }
045                else
046                {
047                    if (var12 != null && var12.onValidSurface())
048                    {
049                        if (!par3World.isRemote)
050                        {
051                            par3World.spawnEntityInWorld(var12);
052                        }
053    
054                        --par1ItemStack.stackSize;
055                    }
056    
057                    return true;
058                }
059            }
060        }
061    
062        /**
063         * Create the hanging entity associated to this item.
064         */
065        private EntityHanging createHangingEntity(World par1World, int par2, int par3, int par4, int par5)
066        {
067            return (EntityHanging)(this.hangingEntityClass == EntityPainting.class ? new EntityPainting(par1World, par2, par3, par4, par5) : (this.hangingEntityClass == EntityItemFrame.class ? new EntityItemFrame(par1World, par2, par3, par4, par5) : null));
068        }
069    }