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