    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.List;
    006
    007    public class BlockAnvil extends BlockSand
    008    {
    009        public static final String[] field_82522_a = new String[] {"intact", "slightlyDamaged", "veryDamaged"};
    010        public int field_82521_b = 0;
    011
    012        protected BlockAnvil(int par1)
    013        {
    014            super(par1, 215, Material.field_82717_g);
    015            this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F);
    016            this.setLightOpacity(0);
    017            this.setCreativeTab(CreativeTabs.tabDecorations);
    018        }
    019
    020        /**
    021         * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
    022         */
    023        public boolean renderAsNormalBlock()
    024        {
    025            return false;
    026        }
    027
    028        /**
    029         * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
    030         * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
    031         */
    032        public boolean isOpaqueCube()
    033        {
    034            return false;
    035        }
    036
    037        /**
    038         * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
    039         */
    040        public int getBlockTextureFromSideAndMetadata(int par1, int par2)
    041        {
    042            if (this.field_82521_b == 3 && par1 == 1)
    043            {
    044                int var3 = par2 >> 2;
    045
    046                switch (var3)
    047                {
    048                    case 1:
    049                        return this.blockIndexInTexture + 1;
    050                    case 2:
    051                        return this.blockIndexInTexture + 16 + 1;
    052                    default:
    053                        return this.blockIndexInTexture + 16;
    054                }
    055            }
    056            else
    057            {
    058                return this.blockIndexInTexture;
    059            }
    060        }
    061
    062        /**
    063         * Returns the block texture based on the side being looked at.  Args: side
    064         */
    065        public int getBlockTextureFromSide(int par1)
    066        {
    067            return super.getBlockTextureFromSide(par1);
    068        }
    069
    070        /**
    071         * Called when the block is placed in the world.
    072         */
    073        public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
    074        {
    075            int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
    076            int var7 = par1World.getBlockMetadata(par2, par3, par4) >> 2;
    077            ++var6;
    078            var6 %= 4;
    079
    080            if (var6 == 0)
    081            {
    082                par1World.setBlockMetadataWithNotify(par2, par3, par4, 2 | var7 << 2);
    083            }
    084
    085            if (var6 == 1)
    086            {
    087                par1World.setBlockMetadataWithNotify(par2, par3, par4, 3 | var7 << 2);
    088            }
    089
    090            if (var6 == 2)
    091            {
    092                par1World.setBlockMetadataWithNotify(par2, par3, par4, 0 | var7 << 2);
    093            }
    094
    095            if (var6 == 3)
    096            {
    097                par1World.setBlockMetadataWithNotify(par2, par3, par4, 1 | var7 << 2);
    098            }
    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.func_82244_d(par2, par3, par4);
    113                return true;
    114            }
    115        }
    116
    117        /**
    118         * The type of render function that is called for this block
    119         */
    120        public int getRenderType()
    121        {
    122            return 35;
    123        }
    124
    125        /**
    126         * Determines the damage on the item the block drops. Used in cloth and wood.
    127         */
    128        public int damageDropped(int par1)
    129        {
    130            return par1 >> 2;
    131        }
    132
    133        @SideOnly(Side.CLIENT)
    134
    135        /**
    136         * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
    137         */
    138        public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
    139        {
    140            par3List.add(new ItemStack(par1, 1, 0));
    141            par3List.add(new ItemStack(par1, 1, 1));
    142            par3List.add(new ItemStack(par1, 1, 2));
    143        }
    144
    145        protected void func_82520_a(EntityFallingSand par1EntityFallingSand)
    146        {
    147            par1EntityFallingSand.func_82154_e(true);
    148        }
    149
    150        public void func_82519_a_(World par1World, int par2, int par3, int par4, int par5)
    151        {
    152            par1World.playAuxSFX(1022, par2, par3, par4, 0);
    153        }
    154
    155        @SideOnly(Side.CLIENT)
    156
    157        /**
    158         * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
    159         * coordinates.  Args: blockAccess, x, y, z, side
    160         */
    161        public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5)
    162        {
    163            return true;
    164        }
    165    }