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 }