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 BlockWall extends Block
008 {
009 public static final String[] field_82539_a = new String[] {"normal", "mossy"};
010
011 public BlockWall(int par1, Block par2Block)
012 {
013 super(par1, par2Block.blockIndexInTexture, par2Block.blockMaterial);
014 this.setHardness(par2Block.blockHardness);
015 this.setResistance(par2Block.blockResistance / 3.0F);
016 this.setStepSound(par2Block.stepSound);
017 this.setCreativeTab(CreativeTabs.tabBlock);
018 }
019
020 /**
021 * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
022 */
023 public int getBlockTextureFromSideAndMetadata(int par1, int par2)
024 {
025 return par2 == 1 ? Block.cobblestoneMossy.blockIndexInTexture : super.getBlockTextureFromSide(par1);
026 }
027
028 /**
029 * The type of render function that is called for this block
030 */
031 public int getRenderType()
032 {
033 return 32;
034 }
035
036 /**
037 * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
038 */
039 public boolean renderAsNormalBlock()
040 {
041 return false;
042 }
043
044 public boolean getBlocksMovement(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
045 {
046 return false;
047 }
048
049 /**
050 * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two
051 * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
052 */
053 public boolean isOpaqueCube()
054 {
055 return false;
056 }
057
058 /**
059 * Updates the blocks bounds based on its current state. Args: world, x, y, z
060 */
061 public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
062 {
063 boolean var5 = this.func_82538_d(par1IBlockAccess, par2, par3, par4 - 1);
064 boolean var6 = this.func_82538_d(par1IBlockAccess, par2, par3, par4 + 1);
065 boolean var7 = this.func_82538_d(par1IBlockAccess, par2 - 1, par3, par4);
066 boolean var8 = this.func_82538_d(par1IBlockAccess, par2 + 1, par3, par4);
067 float var9 = 0.25F;
068 float var10 = 0.75F;
069 float var11 = 0.25F;
070 float var12 = 0.75F;
071 float var13 = 1.0F;
072
073 if (var5)
074 {
075 var11 = 0.0F;
076 }
077
078 if (var6)
079 {
080 var12 = 1.0F;
081 }
082
083 if (var7)
084 {
085 var9 = 0.0F;
086 }
087
088 if (var8)
089 {
090 var10 = 1.0F;
091 }
092
093 if (var5 && var6 && !var7 && !var8)
094 {
095 var13 = 0.8125F;
096 var9 = 0.3125F;
097 var10 = 0.6875F;
098 }
099 else if (!var5 && !var6 && var7 && var8)
100 {
101 var13 = 0.8125F;
102 var11 = 0.3125F;
103 var12 = 0.6875F;
104 }
105
106 this.setBlockBounds(var9, 0.0F, var11, var10, var13, var12);
107 }
108
109 /**
110 * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
111 * cleared to be reused)
112 */
113 public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
114 {
115 boolean var5 = this.func_82538_d(par1World, par2, par3, par4 - 1);
116 boolean var6 = this.func_82538_d(par1World, par2, par3, par4 + 1);
117 boolean var7 = this.func_82538_d(par1World, par2 - 1, par3, par4);
118 boolean var8 = this.func_82538_d(par1World, par2 + 1, par3, par4);
119 float var9 = 0.375F;
120 float var10 = 0.625F;
121 float var11 = 0.375F;
122 float var12 = 0.625F;
123
124 if (var5)
125 {
126 var11 = 0.0F;
127 }
128
129 if (var6)
130 {
131 var12 = 1.0F;
132 }
133
134 if (var7)
135 {
136 var9 = 0.0F;
137 }
138
139 if (var8)
140 {
141 var10 = 1.0F;
142 }
143
144 return AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double)((float)par2 + var9), (double)par3, (double)((float)par4 + var11), (double)((float)par2 + var10), (double)((float)par3 + 1.5F), (double)((float)par4 + var12));
145 }
146
147 public boolean func_82538_d(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
148 {
149 int var5 = par1IBlockAccess.getBlockId(par2, par3, par4);
150
151 if (var5 != this.blockID && var5 != Block.fenceGate.blockID)
152 {
153 Block var6 = Block.blocksList[var5];
154 return var6 != null && var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock() ? var6.blockMaterial != Material.pumpkin : false;
155 }
156 else
157 {
158 return true;
159 }
160 }
161
162 @SideOnly(Side.CLIENT)
163
164 /**
165 * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
166 */
167 public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
168 {
169 par3List.add(new ItemStack(par1, 1, 0));
170 par3List.add(new ItemStack(par1, 1, 1));
171 }
172
173 /**
174 * Determines the damage on the item the block drops. Used in cloth and wood.
175 */
176 public int damageDropped(int par1)
177 {
178 return par1;
179 }
180 }