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 l = par2Random.nextInt(2); 026 027 if (this.mushroomType >= 0) 028 { 029 l = this.mushroomType; 030 } 031 032 int i1 = par2Random.nextInt(3) + 4; 033 boolean flag = true; 034 035 if (par4 >= 1 && par4 + i1 + 1 < 256) 036 { 037 int j1; 038 int k1; 039 int l1; 040 int i2; 041 042 for (j1 = par4; j1 <= par4 + 1 + i1; ++j1) 043 { 044 byte b0 = 3; 045 046 if (j1 <= par4 + 3) 047 { 048 b0 = 0; 049 } 050 051 for (k1 = par3 - b0; k1 <= par3 + b0 && flag; ++k1) 052 { 053 for (l1 = par5 - b0; l1 <= par5 + b0 && flag; ++l1) 054 { 055 if (j1 >= 0 && j1 < 256) 056 { 057 i2 = par1World.getBlockId(k1, j1, l1); 058 059 Block block = Block.blocksList[i2]; 060 061 if (i2 != 0 && block != null && !block.isLeaves(par1World, k1, j1, l1)) 062 { 063 flag = false; 064 } 065 } 066 else 067 { 068 flag = false; 069 } 070 } 071 } 072 } 073 074 if (!flag) 075 { 076 return false; 077 } 078 else 079 { 080 j1 = par1World.getBlockId(par3, par4 - 1, par5); 081 082 if (j1 != Block.dirt.blockID && j1 != Block.grass.blockID && j1 != Block.mycelium.blockID) 083 { 084 return false; 085 } 086 else 087 { 088 int j2 = par4 + i1; 089 090 if (l == 1) 091 { 092 j2 = par4 + i1 - 3; 093 } 094 095 for (k1 = j2; k1 <= par4 + i1; ++k1) 096 { 097 l1 = 1; 098 099 if (k1 < par4 + i1) 100 { 101 ++l1; 102 } 103 104 if (l == 0) 105 { 106 l1 = 3; 107 } 108 109 for (i2 = par3 - l1; i2 <= par3 + l1; ++i2) 110 { 111 for (int k2 = par5 - l1; k2 <= par5 + l1; ++k2) 112 { 113 int l2 = 5; 114 115 if (i2 == par3 - l1) 116 { 117 --l2; 118 } 119 120 if (i2 == par3 + l1) 121 { 122 ++l2; 123 } 124 125 if (k2 == par5 - l1) 126 { 127 l2 -= 3; 128 } 129 130 if (k2 == par5 + l1) 131 { 132 l2 += 3; 133 } 134 135 if (l == 0 || k1 < par4 + i1) 136 { 137 if ((i2 == par3 - l1 || i2 == par3 + l1) && (k2 == par5 - l1 || k2 == par5 + l1)) 138 { 139 continue; 140 } 141 142 if (i2 == par3 - (l1 - 1) && k2 == par5 - l1) 143 { 144 l2 = 1; 145 } 146 147 if (i2 == par3 - l1 && k2 == par5 - (l1 - 1)) 148 { 149 l2 = 1; 150 } 151 152 if (i2 == par3 + (l1 - 1) && k2 == par5 - l1) 153 { 154 l2 = 3; 155 } 156 157 if (i2 == par3 + l1 && k2 == par5 - (l1 - 1)) 158 { 159 l2 = 3; 160 } 161 162 if (i2 == par3 - (l1 - 1) && k2 == par5 + l1) 163 { 164 l2 = 7; 165 } 166 167 if (i2 == par3 - l1 && k2 == par5 + (l1 - 1)) 168 { 169 l2 = 7; 170 } 171 172 if (i2 == par3 + (l1 - 1) && k2 == par5 + l1) 173 { 174 l2 = 9; 175 } 176 177 if (i2 == par3 + l1 && k2 == par5 + (l1 - 1)) 178 { 179 l2 = 9; 180 } 181 } 182 183 if (l2 == 5 && k1 < par4 + i1) 184 { 185 l2 = 0; 186 } 187 188 Block block = Block.blocksList[par1World.getBlockId(i2, k1, k2)]; 189 190 if ((l2 != 0 || par4 >= par4 + i1 - 1) && (block == null || block.canBeReplacedByLeaves(par1World, i2, k1, k2))) 191 { 192 this.setBlockAndMetadata(par1World, i2, k1, k2, Block.mushroomCapBrown.blockID + l, l2); 193 } 194 } 195 } 196 } 197 198 for (k1 = 0; k1 < i1; ++k1) 199 { 200 l1 = par1World.getBlockId(par3, par4 + k1, par5); 201 202 Block block = Block.blocksList[l1]; 203 204 if (block == null || block.canBeReplacedByLeaves(par1World, par3, par4 + k1, par5)) 205 { 206 this.setBlockAndMetadata(par1World, par3, par4 + k1, par5, Block.mushroomCapBrown.blockID + l, 10); 207 } 208 } 209 210 return true; 211 } 212 } 213 } 214 else 215 { 216 return false; 217 } 218 } 219}