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