001    package net.minecraft.block;
002    
003    import net.minecraft.block.material.Material;
004    import net.minecraft.creativetab.CreativeTabs;
005    import net.minecraft.entity.item.EntityItem;
006    import net.minecraft.entity.player.EntityPlayer;
007    import net.minecraft.item.ItemStack;
008    import net.minecraft.tileentity.TileEntity;
009    import net.minecraft.world.World;
010    
011    public class BlockJukeBox extends BlockContainer
012    {
013        protected BlockJukeBox(int par1, int par2)
014        {
015            super(par1, par2, Material.wood);
016            this.setCreativeTab(CreativeTabs.tabDecorations);
017        }
018    
019        /**
020         * Returns the block texture based on the side being looked at.  Args: side
021         */
022        public int getBlockTextureFromSide(int par1)
023        {
024            return this.blockIndexInTexture + (par1 == 1 ? 1 : 0);
025        }
026    
027        /**
028         * Called upon block activation (right click on the block.)
029         */
030        public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
031        {
032            if (par1World.getBlockMetadata(par2, par3, par4) == 0)
033            {
034                return false;
035            }
036            else
037            {
038                this.ejectRecord(par1World, par2, par3, par4);
039                return true;
040            }
041        }
042    
043        /**
044         * Insert the specified music disc in the jukebox at the given coordinates
045         */
046        public void insertRecord(World par1World, int par2, int par3, int par4, ItemStack par5ItemStack)
047        {
048            if (!par1World.isRemote)
049            {
050                TileEntityRecordPlayer var6 = (TileEntityRecordPlayer)par1World.getBlockTileEntity(par2, par3, par4);
051    
052                if (var6 != null)
053                {
054                    var6.record = par5ItemStack.copy();
055                    var6.onInventoryChanged();
056                    par1World.setBlockMetadataWithNotify(par2, par3, par4, 1);
057                }
058            }
059        }
060    
061        /**
062         * Ejects the current record inside of the jukebox.
063         */
064        public void ejectRecord(World par1World, int par2, int par3, int par4)
065        {
066            if (!par1World.isRemote)
067            {
068                TileEntityRecordPlayer var5 = (TileEntityRecordPlayer)par1World.getBlockTileEntity(par2, par3, par4);
069    
070                if (var5 != null)
071                {
072                    ItemStack var6 = var5.record;
073    
074                    if (var6 != null)
075                    {
076                        par1World.playAuxSFX(1005, par2, par3, par4, 0);
077                        par1World.playRecord((String)null, par2, par3, par4);
078                        var5.record = null;
079                        var5.onInventoryChanged();
080                        par1World.setBlockMetadataWithNotify(par2, par3, par4, 0);
081                        float var7 = 0.7F;
082                        double var8 = (double)(par1World.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
083                        double var10 = (double)(par1World.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.2D + 0.6D;
084                        double var12 = (double)(par1World.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D;
085                        ItemStack var14 = var6.copy();
086                        EntityItem var15 = new EntityItem(par1World, (double)par2 + var8, (double)par3 + var10, (double)par4 + var12, var14);
087                        var15.delayBeforeCanPickup = 10;
088                        par1World.spawnEntityInWorld(var15);
089                    }
090                }
091            }
092        }
093    
094        /**
095         * ejects contained items into the world, and notifies neighbours of an update, as appropriate
096         */
097        public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)
098        {
099            this.ejectRecord(par1World, par2, par3, par4);
100            super.breakBlock(par1World, par2, par3, par4, par5, par6);
101        }
102    
103        /**
104         * Drops the block items with a specified chance of dropping the specified items
105         */
106        public void dropBlockAsItemWithChance(World par1World, int par2, int par3, int par4, int par5, float par6, int par7)
107        {
108            if (!par1World.isRemote)
109            {
110                super.dropBlockAsItemWithChance(par1World, par2, par3, par4, par5, par6, 0);
111            }
112        }
113    
114        /**
115         * Returns a new instance of a block's tile entity class. Called on placing the block.
116         */
117        public TileEntity createNewTileEntity(World par1World)
118        {
119            return new TileEntityRecordPlayer();
120        }
121    }