    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    }