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