    001package net.minecraft.world.gen.feature;
    002
    003import java.util.Random;
    004import net.minecraft.block.Block;
    005import net.minecraft.world.World;
    006
    007public 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}