001    package net.minecraft.world.gen.feature;
002    
003    import java.util.Random;
004    import net.minecraft.block.Block;
005    import net.minecraft.world.World;
006    
007    public class WorldGenTaiga2 extends WorldGenerator
008    {
009        public WorldGenTaiga2(boolean par1)
010        {
011            super(par1);
012        }
013    
014        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
015        {
016            int var6 = par2Random.nextInt(4) + 6;
017            int var7 = 1 + par2Random.nextInt(2);
018            int var8 = var6 - var7;
019            int var9 = 2 + par2Random.nextInt(2);
020            boolean var10 = true;
021    
022            if (par4 >= 1 && par4 + var6 + 1 <= 256)
023            {
024                int var11;
025                int var13;
026                int var15;
027                int var21;
028    
029                for (var11 = par4; var11 <= par4 + 1 + var6 && var10; ++var11)
030                {
031                    boolean var12 = true;
032    
033                    if (var11 - par4 < var7)
034                    {
035                        var21 = 0;
036                    }
037                    else
038                    {
039                        var21 = var9;
040                    }
041    
042                    for (var13 = par3 - var21; var13 <= par3 + var21 && var10; ++var13)
043                    {
044                        for (int var14 = par5 - var21; var14 <= par5 + var21 && var10; ++var14)
045                        {
046                            if (var11 >= 0 && var11 < 256)
047                            {
048                                var15 = par1World.getBlockId(var13, var11, var14);
049    
050                                Block block = Block.blocksList[var15];
051    
052                                if (var15 != 0 && block != null && !block.isLeaves(par1World, var13, var11, var14))
053                                {
054                                    var10 = false;
055                                }
056                            }
057                            else
058                            {
059                                var10 = false;
060                            }
061                        }
062                    }
063                }
064    
065                if (!var10)
066                {
067                    return false;
068                }
069                else
070                {
071                    var11 = par1World.getBlockId(par3, par4 - 1, par5);
072    
073                    if ((var11 == Block.grass.blockID || var11 == Block.dirt.blockID) && par4 < 256 - var6 - 1)
074                    {
075                        this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID);
076                        var21 = par2Random.nextInt(2);
077                        var13 = 1;
078                        byte var22 = 0;
079                        int var17;
080                        int var16;
081    
082                        for (var15 = 0; var15 <= var8; ++var15)
083                        {
084                            var16 = par4 + var6 - var15;
085    
086                            for (var17 = par3 - var21; var17 <= par3 + var21; ++var17)
087                            {
088                                int var18 = var17 - par3;
089    
090                                for (int var19 = par5 - var21; var19 <= par5 + var21; ++var19)
091                                {
092                                    int var20 = var19 - par5;
093    
094                                    Block block = Block.blocksList[par1World.getBlockId(var17, var16, var19)];
095    
096                                    if ((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && 
097                                        (block == null || block.canBeReplacedByLeaves(par1World, var17, var16, var19)))
098                                    {
099                                        this.setBlockAndMetadata(par1World, var17, var16, var19, Block.leaves.blockID, 1);
100                                    }
101                                }
102                            }
103    
104                            if (var21 >= var13)
105                            {
106                                var21 = var22;
107                                var22 = 1;
108                                ++var13;
109    
110                                if (var13 > var9)
111                                {
112                                    var13 = var9;
113                                }
114                            }
115                            else
116                            {
117                                ++var21;
118                            }
119                        }
120    
121                        var15 = par2Random.nextInt(3);
122    
123                        for (var16 = 0; var16 < var6 - var15; ++var16)
124                        {
125                            var17 = par1World.getBlockId(par3, par4 + var16, par5);
126    
127                            Block block = Block.blocksList[var17];
128    
129                            if (var17 == 0 || block == null || block.isLeaves(par1World, par3, par4 + var16, par5))
130                            {
131                                this.setBlockAndMetadata(par1World, par3, par4 + var16, par5, Block.wood.blockID, 1);
132                            }
133                        }
134    
135                        return true;
136                    }
137                    else
138                    {
139                        return false;
140                    }
141                }
142            }
143            else
144            {
145                return false;
146            }
147        }
148    }