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 }