    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 WorldGenBigMushroom extends WorldGenerator
    008    {
    009        /** The mushroom type. 0 for brown, 1 for red. */
    010        private int mushroomType = -1;
    011
    012        public WorldGenBigMushroom(int par1)
    013        {
    014            super(true);
    015            this.mushroomType = par1;
    016        }
    017
    018        public WorldGenBigMushroom()
    019        {
    020            super(false);
    021        }
    022
    023        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
    024        {
    025            int var6 = par2Random.nextInt(2);
    026
    027            if (this.mushroomType >= 0)
    028            {
    029                var6 = this.mushroomType;
    030            }
    031
    032            int var7 = par2Random.nextInt(3) + 4;
    033            boolean var8 = true;
    034
    035            if (par4 >= 1 && par4 + var7 + 1 < 256)
    036            {
    037                int var9;
    038                int var11;
    039                int var12;
    040                int var13;
    041
    042                for (var9 = par4; var9 <= par4 + 1 + var7; ++var9)
    043                {
    044                    byte var10 = 3;
    045
    046                    if (var9 <= par4 + 3)
    047                    {
    048                        var10 = 0;
    049                    }
    050
    051                    for (var11 = par3 - var10; var11 <= par3 + var10 && var8; ++var11)
    052                    {
    053                        for (var12 = par5 - var10; var12 <= par5 + var10 && var8; ++var12)
    054                        {
    055                            if (var9 >= 0 && var9 < 256)
    056                            {
    057                                var13 = par1World.getBlockId(var11, var9, var12);
    058
    059                                Block block = Block.blocksList[var13];
    060
    061                                if (var13 != 0 && block != null && !block.isLeaves(par1World, var11, var9, var12))
    062                                {
    063                                    var8 = false;
    064                                }
    065                            }
    066                            else
    067                            {
    068                                var8 = false;
    069                            }
    070                        }
    071                    }
    072                }
    073
    074                if (!var8)
    075                {
    076                    return false;
    077                }
    078                else
    079                {
    080                    var9 = par1World.getBlockId(par3, par4 - 1, par5);
    081
    082                    if (var9 != Block.dirt.blockID && var9 != Block.grass.blockID && var9 != Block.mycelium.blockID)
    083                    {
    084                        return false;
    085                    }
    086                    else
    087                    {
    088                        int var16 = par4 + var7;
    089
    090                        if (var6 == 1)
    091                        {
    092                            var16 = par4 + var7 - 3;
    093                        }
    094
    095                        for (var11 = var16; var11 <= par4 + var7; ++var11)
    096                        {
    097                            var12 = 1;
    098
    099                            if (var11 < par4 + var7)
    100                            {
    101                                ++var12;
    102                            }
    103
    104                            if (var6 == 0)
    105                            {
    106                                var12 = 3;
    107                            }
    108
    109                            for (var13 = par3 - var12; var13 <= par3 + var12; ++var13)
    110                            {
    111                                for (int var14 = par5 - var12; var14 <= par5 + var12; ++var14)
    112                                {
    113                                    int var15 = 5;
    114
    115                                    if (var13 == par3 - var12)
    116                                    {
    117                                        --var15;
    118                                    }
    119
    120                                    if (var13 == par3 + var12)
    121                                    {
    122                                        ++var15;
    123                                    }
    124
    125                                    if (var14 == par5 - var12)
    126                                    {
    127                                        var15 -= 3;
    128                                    }
    129
    130                                    if (var14 == par5 + var12)
    131                                    {
    132                                        var15 += 3;
    133                                    }
    134
    135                                    if (var6 == 0 || var11 < par4 + var7)
    136                                    {
    137                                        if ((var13 == par3 - var12 || var13 == par3 + var12) && (var14 == par5 - var12 || var14 == par5 + var12))
    138                                        {
    139                                            continue;
    140                                        }
    141
    142                                        if (var13 == par3 - (var12 - 1) && var14 == par5 - var12)
    143                                        {
    144                                            var15 = 1;
    145                                        }
    146
    147                                        if (var13 == par3 - var12 && var14 == par5 - (var12 - 1))
    148                                        {
    149                                            var15 = 1;
    150                                        }
    151
    152                                        if (var13 == par3 + (var12 - 1) && var14 == par5 - var12)
    153                                        {
    154                                            var15 = 3;
    155                                        }
    156
    157                                        if (var13 == par3 + var12 && var14 == par5 - (var12 - 1))
    158                                        {
    159                                            var15 = 3;
    160                                        }
    161
    162                                        if (var13 == par3 - (var12 - 1) && var14 == par5 + var12)
    163                                        {
    164                                            var15 = 7;
    165                                        }
    166
    167                                        if (var13 == par3 - var12 && var14 == par5 + (var12 - 1))
    168                                        {
    169                                            var15 = 7;
    170                                        }
    171
    172                                        if (var13 == par3 + (var12 - 1) && var14 == par5 + var12)
    173                                        {
    174                                            var15 = 9;
    175                                        }
    176
    177                                        if (var13 == par3 + var12 && var14 == par5 + (var12 - 1))
    178                                        {
    179                                            var15 = 9;
    180                                        }
    181                                    }
    182
    183                                    if (var15 == 5 && var11 < par4 + var7)
    184                                    {
    185                                        var15 = 0;
    186                                    }
    187
    188                                    Block block = Block.blocksList[par1World.getBlockId(var13, var11, var14)];
    189
    190                                    if ((var15 != 0 || par4 >= par4 + var7 - 1) && (block == null || block.canBeReplacedByLeaves(par1World, var13, var11, var14)))
    191                                    {
    192                                        this.setBlockAndMetadata(par1World, var13, var11, var14, Block.mushroomCapBrown.blockID + var6, var15);
    193                                    }
    194                                }
    195                            }
    196                        }
    197
    198                        for (var11 = 0; var11 < var7; ++var11)
    199                        {
    200                            var12 = par1World.getBlockId(par3, par4 + var11, par5);
    201
    202                            Block block = Block.blocksList[var12];
    203
    204                            if (block == null || block.canBeReplacedByLeaves(par1World, par3, par4 + var11, par5))
    205                            {
    206                                this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.mushroomCapBrown.blockID + var6, 10);
    207                            }
    208                        }
    209
    210                        return true;
    211                    }
    212                }
    213            }
    214            else
    215            {
    216                return false;
    217            }
    218        }
    219    }