001package net.minecraft.block;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import java.util.Random;
006import net.minecraft.block.material.Material;
007import net.minecraft.creativetab.CreativeTabs;
008import net.minecraft.entity.player.EntityPlayer;
009import net.minecraft.tileentity.TileEntity;
010import net.minecraft.tileentity.TileEntityEnchantmentTable;
011import net.minecraft.world.World;
012
013public class BlockEnchantmentTable extends BlockContainer
014{
015    protected BlockEnchantmentTable(int par1)
016    {
017        super(par1, 166, Material.rock);
018        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F);
019        this.setLightOpacity(0);
020        this.setCreativeTab(CreativeTabs.tabDecorations);
021    }
022
023    /**
024     * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
025     */
026    public boolean renderAsNormalBlock()
027    {
028        return false;
029    }
030
031    @SideOnly(Side.CLIENT)
032
033    /**
034     * A randomly called display update to be able to add particles or other items for display
035     */
036    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
037    {
038        super.randomDisplayTick(par1World, par2, par3, par4, par5Random);
039
040        for (int var6 = par2 - 2; var6 <= par2 + 2; ++var6)
041        {
042            for (int var7 = par4 - 2; var7 <= par4 + 2; ++var7)
043            {
044                if (var6 > par2 - 2 && var6 < par2 + 2 && var7 == par4 - 1)
045                {
046                    var7 = par4 + 2;
047                }
048
049                if (par5Random.nextInt(16) == 0)
050                {
051                    for (int var8 = par3; var8 <= par3 + 1; ++var8)
052                    {
053                        if (par1World.getBlockId(var6, var8, var7) == Block.bookShelf.blockID)
054                        {
055                            if (!par1World.isAirBlock((var6 - par2) / 2 + par2, var8, (var7 - par4) / 2 + par4))
056                            {
057                                break;
058                            }
059
060                            par1World.spawnParticle("enchantmenttable", (double)par2 + 0.5D, (double)par3 + 2.0D, (double)par4 + 0.5D, (double)((float)(var6 - par2) + par5Random.nextFloat()) - 0.5D, (double)((float)(var8 - par3) - par5Random.nextFloat() - 1.0F), (double)((float)(var7 - par4) + par5Random.nextFloat()) - 0.5D);
061                        }
062                    }
063                }
064            }
065        }
066    }
067
068    /**
069     * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
070     * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
071     */
072    public boolean isOpaqueCube()
073    {
074        return false;
075    }
076
077    /**
078     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
079     */
080    public int getBlockTextureFromSideAndMetadata(int par1, int par2)
081    {
082        return this.getBlockTextureFromSide(par1);
083    }
084
085    /**
086     * Returns the block texture based on the side being looked at.  Args: side
087     */
088    public int getBlockTextureFromSide(int par1)
089    {
090        return par1 == 0 ? this.blockIndexInTexture + 17 : (par1 == 1 ? this.blockIndexInTexture : this.blockIndexInTexture + 16);
091    }
092
093    /**
094     * Returns a new instance of a block's tile entity class. Called on placing the block.
095     */
096    public TileEntity createNewTileEntity(World par1World)
097    {
098        return new TileEntityEnchantmentTable();
099    }
100
101    /**
102     * Called upon block activation (right click on the block.)
103     */
104    public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
105    {
106        if (par1World.isRemote)
107        {
108            return true;
109        }
110        else
111        {
112            par5EntityPlayer.displayGUIEnchantment(par2, par3, par4);
113            return true;
114        }
115    }
116}