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