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