001 package net.minecraft.src; 002 003 public class BlockFence extends Block 004 { 005 public BlockFence(int par1, int par2) 006 { 007 super(par1, par2, Material.wood); 008 this.setCreativeTab(CreativeTabs.tabDecorations); 009 } 010 011 public BlockFence(int par1, int par2, Material par3Material) 012 { 013 super(par1, par2, par3Material); 014 this.setCreativeTab(CreativeTabs.tabDecorations); 015 } 016 017 /** 018 * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been 019 * cleared to be reused) 020 */ 021 public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) 022 { 023 boolean var5 = this.canConnectFenceTo(par1World, par2, par3, par4 - 1); 024 boolean var6 = this.canConnectFenceTo(par1World, par2, par3, par4 + 1); 025 boolean var7 = this.canConnectFenceTo(par1World, par2 - 1, par3, par4); 026 boolean var8 = this.canConnectFenceTo(par1World, par2 + 1, par3, par4); 027 float var9 = 0.375F; 028 float var10 = 0.625F; 029 float var11 = 0.375F; 030 float var12 = 0.625F; 031 032 if (var5) 033 { 034 var11 = 0.0F; 035 } 036 037 if (var6) 038 { 039 var12 = 1.0F; 040 } 041 042 if (var7) 043 { 044 var9 = 0.0F; 045 } 046 047 if (var8) 048 { 049 var10 = 1.0F; 050 } 051 052 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)); 053 } 054 055 /** 056 * Updates the blocks bounds based on its current state. Args: world, x, y, z 057 */ 058 public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) 059 { 060 boolean var5 = this.canConnectFenceTo(par1IBlockAccess, par2, par3, par4 - 1); 061 boolean var6 = this.canConnectFenceTo(par1IBlockAccess, par2, par3, par4 + 1); 062 boolean var7 = this.canConnectFenceTo(par1IBlockAccess, par2 - 1, par3, par4); 063 boolean var8 = this.canConnectFenceTo(par1IBlockAccess, par2 + 1, par3, par4); 064 float var9 = 0.375F; 065 float var10 = 0.625F; 066 float var11 = 0.375F; 067 float var12 = 0.625F; 068 069 if (var5) 070 { 071 var11 = 0.0F; 072 } 073 074 if (var6) 075 { 076 var12 = 1.0F; 077 } 078 079 if (var7) 080 { 081 var9 = 0.0F; 082 } 083 084 if (var8) 085 { 086 var10 = 1.0F; 087 } 088 089 this.setBlockBounds(var9, 0.0F, var11, var10, 1.0F, var12); 090 } 091 092 /** 093 * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two 094 * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. 095 */ 096 public boolean isOpaqueCube() 097 { 098 return false; 099 } 100 101 /** 102 * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) 103 */ 104 public boolean renderAsNormalBlock() 105 { 106 return false; 107 } 108 109 public boolean getBlocksMovement(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) 110 { 111 return false; 112 } 113 114 /** 115 * The type of render function that is called for this block 116 */ 117 public int getRenderType() 118 { 119 return 11; 120 } 121 122 /** 123 * Returns true if the specified block can be connected by a fence 124 */ 125 public boolean canConnectFenceTo(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) 126 { 127 int var5 = par1IBlockAccess.getBlockId(par2, par3, par4); 128 129 if (var5 != this.blockID && var5 != Block.fenceGate.blockID) 130 { 131 Block var6 = Block.blocksList[var5]; 132 return var6 != null && var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock() ? var6.blockMaterial != Material.pumpkin : false; 133 } 134 else 135 { 136 return true; 137 } 138 } 139 140 public static boolean isIdAFence(int par0) 141 { 142 return par0 == Block.fence.blockID || par0 == Block.netherFence.blockID; 143 } 144 }