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