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 this.setBlockBoundsBasedOnState(par1World, par2, par3, par4); 117 return super.getCollisionBoundingBoxFromPool(par1World, par2, par3, par4); 118 } 119 120 /** 121 * Return whether an adjacent block can connect to a wall. 122 */ 123 public boolean canConnectWallTo(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) 124 { 125 int var5 = par1IBlockAccess.getBlockId(par2, par3, par4); 126 127 if (var5 != this.blockID && var5 != Block.fenceGate.blockID) 128 { 129 Block var6 = Block.blocksList[var5]; 130 return var6 != null && var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock() ? var6.blockMaterial != Material.pumpkin : false; 131 } 132 else 133 { 134 return true; 135 } 136 } 137 138 @SideOnly(Side.CLIENT) 139 140 /** 141 * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) 142 */ 143 public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) 144 { 145 par3List.add(new ItemStack(par1, 1, 0)); 146 par3List.add(new ItemStack(par1, 1, 1)); 147 } 148 149 /** 150 * Determines the damage on the item the block drops. Used in cloth and wood. 151 */ 152 public int damageDropped(int par1) 153 { 154 return par1; 155 } 156 157 @SideOnly(Side.CLIENT) 158 159 /** 160 * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given 161 * coordinates. Args: blockAccess, x, y, z, side 162 */ 163 public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) 164 { 165 return par5 == 0 ? super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, par5) : true; 166 } 167 }