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 }