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