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        public static final String[] field_82539_a = new String[] {"normal", "mossy"};
010    
011        public BlockWall(int par1, Block par2Block)
012        {
013            super(par1, par2Block.blockIndexInTexture, par2Block.blockMaterial);
014            this.setHardness(par2Block.blockHardness);
015            this.setResistance(par2Block.blockResistance / 3.0F);
016            this.setStepSound(par2Block.stepSound);
017            this.setCreativeTab(CreativeTabs.tabBlock);
018        }
019    
020        /**
021         * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
022         */
023        public int getBlockTextureFromSideAndMetadata(int par1, int par2)
024        {
025            return par2 == 1 ? Block.cobblestoneMossy.blockIndexInTexture : super.getBlockTextureFromSide(par1);
026        }
027    
028        /**
029         * The type of render function that is called for this block
030         */
031        public int getRenderType()
032        {
033            return 32;
034        }
035    
036        /**
037         * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
038         */
039        public boolean renderAsNormalBlock()
040        {
041            return false;
042        }
043    
044        public boolean getBlocksMovement(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
045        {
046            return false;
047        }
048    
049        /**
050         * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
051         * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
052         */
053        public boolean isOpaqueCube()
054        {
055            return false;
056        }
057    
058        /**
059         * Updates the blocks bounds based on its current state. Args: world, x, y, z
060         */
061        public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
062        {
063            boolean var5 = this.func_82538_d(par1IBlockAccess, par2, par3, par4 - 1);
064            boolean var6 = this.func_82538_d(par1IBlockAccess, par2, par3, par4 + 1);
065            boolean var7 = this.func_82538_d(par1IBlockAccess, par2 - 1, par3, par4);
066            boolean var8 = this.func_82538_d(par1IBlockAccess, par2 + 1, par3, par4);
067            float var9 = 0.25F;
068            float var10 = 0.75F;
069            float var11 = 0.25F;
070            float var12 = 0.75F;
071            float var13 = 1.0F;
072    
073            if (var5)
074            {
075                var11 = 0.0F;
076            }
077    
078            if (var6)
079            {
080                var12 = 1.0F;
081            }
082    
083            if (var7)
084            {
085                var9 = 0.0F;
086            }
087    
088            if (var8)
089            {
090                var10 = 1.0F;
091            }
092    
093            if (var5 && var6 && !var7 && !var8)
094            {
095                var13 = 0.8125F;
096                var9 = 0.3125F;
097                var10 = 0.6875F;
098            }
099            else if (!var5 && !var6 && var7 && var8)
100            {
101                var13 = 0.8125F;
102                var11 = 0.3125F;
103                var12 = 0.6875F;
104            }
105    
106            this.setBlockBounds(var9, 0.0F, var11, var10, var13, var12);
107        }
108    
109        /**
110         * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
111         * cleared to be reused)
112         */
113        public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
114        {
115            boolean var5 = this.func_82538_d(par1World, par2, par3, par4 - 1);
116            boolean var6 = this.func_82538_d(par1World, par2, par3, par4 + 1);
117            boolean var7 = this.func_82538_d(par1World, par2 - 1, par3, par4);
118            boolean var8 = this.func_82538_d(par1World, par2 + 1, par3, par4);
119            float var9 = 0.375F;
120            float var10 = 0.625F;
121            float var11 = 0.375F;
122            float var12 = 0.625F;
123    
124            if (var5)
125            {
126                var11 = 0.0F;
127            }
128    
129            if (var6)
130            {
131                var12 = 1.0F;
132            }
133    
134            if (var7)
135            {
136                var9 = 0.0F;
137            }
138    
139            if (var8)
140            {
141                var10 = 1.0F;
142            }
143    
144            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));
145        }
146    
147        public boolean func_82538_d(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
148        {
149            int var5 = par1IBlockAccess.getBlockId(par2, par3, par4);
150    
151            if (var5 != this.blockID && var5 != Block.fenceGate.blockID)
152            {
153                Block var6 = Block.blocksList[var5];
154                return var6 != null && var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock() ? var6.blockMaterial != Material.pumpkin : false;
155            }
156            else
157            {
158                return true;
159            }
160        }
161    
162        @SideOnly(Side.CLIENT)
163    
164        /**
165         * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
166         */
167        public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
168        {
169            par3List.add(new ItemStack(par1, 1, 0));
170            par3List.add(new ItemStack(par1, 1, 1));
171        }
172    
173        /**
174         * Determines the damage on the item the block drops. Used in cloth and wood.
175         */
176        public int damageDropped(int par1)
177        {
178            return par1;
179        }
180    }