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