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 }