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 }