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