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 }