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 }