    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}