001 package net.minecraft.src; 002 003 import java.util.Random; 004 005 public class WorldGenLakes extends WorldGenerator 006 { 007 private int blockIndex; 008 009 public WorldGenLakes(int par1) 010 { 011 this.blockIndex = par1; 012 } 013 014 public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5) 015 { 016 par3 -= 8; 017 018 for (par5 -= 8; par4 > 5 && par1World.isAirBlock(par3, par4, par5); --par4) 019 { 020 ; 021 } 022 023 if (par4 <= 4) 024 { 025 return false; 026 } 027 else 028 { 029 par4 -= 4; 030 boolean[] var6 = new boolean[2048]; 031 int var7 = par2Random.nextInt(4) + 4; 032 int var8; 033 034 for (var8 = 0; var8 < var7; ++var8) 035 { 036 double var9 = par2Random.nextDouble() * 6.0D + 3.0D; 037 double var11 = par2Random.nextDouble() * 4.0D + 2.0D; 038 double var13 = par2Random.nextDouble() * 6.0D + 3.0D; 039 double var15 = par2Random.nextDouble() * (16.0D - var9 - 2.0D) + 1.0D + var9 / 2.0D; 040 double var17 = par2Random.nextDouble() * (8.0D - var11 - 4.0D) + 2.0D + var11 / 2.0D; 041 double var19 = par2Random.nextDouble() * (16.0D - var13 - 2.0D) + 1.0D + var13 / 2.0D; 042 043 for (int var21 = 1; var21 < 15; ++var21) 044 { 045 for (int var22 = 1; var22 < 15; ++var22) 046 { 047 for (int var23 = 1; var23 < 7; ++var23) 048 { 049 double var24 = ((double)var21 - var15) / (var9 / 2.0D); 050 double var26 = ((double)var23 - var17) / (var11 / 2.0D); 051 double var28 = ((double)var22 - var19) / (var13 / 2.0D); 052 double var30 = var24 * var24 + var26 * var26 + var28 * var28; 053 054 if (var30 < 1.0D) 055 { 056 var6[(var21 * 16 + var22) * 8 + var23] = true; 057 } 058 } 059 } 060 } 061 } 062 063 int var10; 064 int var32; 065 boolean var33; 066 067 for (var8 = 0; var8 < 16; ++var8) 068 { 069 for (var32 = 0; var32 < 16; ++var32) 070 { 071 for (var10 = 0; var10 < 8; ++var10) 072 { 073 var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); 074 075 if (var33) 076 { 077 Material var12 = par1World.getBlockMaterial(par3 + var8, par4 + var10, par5 + var32); 078 079 if (var10 >= 4 && var12.isLiquid()) 080 { 081 return false; 082 } 083 084 if (var10 < 4 && !var12.isSolid() && par1World.getBlockId(par3 + var8, par4 + var10, par5 + var32) != this.blockIndex) 085 { 086 return false; 087 } 088 } 089 } 090 } 091 } 092 093 for (var8 = 0; var8 < 16; ++var8) 094 { 095 for (var32 = 0; var32 < 16; ++var32) 096 { 097 for (var10 = 0; var10 < 8; ++var10) 098 { 099 if (var6[(var8 * 16 + var32) * 8 + var10]) 100 { 101 par1World.setBlock(par3 + var8, par4 + var10, par5 + var32, var10 >= 4 ? 0 : this.blockIndex); 102 } 103 } 104 } 105 } 106 107 for (var8 = 0; var8 < 16; ++var8) 108 { 109 for (var32 = 0; var32 < 16; ++var32) 110 { 111 for (var10 = 4; var10 < 8; ++var10) 112 { 113 if (var6[(var8 * 16 + var32) * 8 + var10] && par1World.getBlockId(par3 + var8, par4 + var10 - 1, par5 + var32) == Block.dirt.blockID && par1World.getSavedLightValue(EnumSkyBlock.Sky, par3 + var8, par4 + var10, par5 + var32) > 0) 114 { 115 BiomeGenBase var35 = par1World.getBiomeGenForCoords(par3 + var8, par5 + var32); 116 117 if (var35.topBlock == Block.mycelium.blockID) 118 { 119 par1World.setBlock(par3 + var8, par4 + var10 - 1, par5 + var32, Block.mycelium.blockID); 120 } 121 else 122 { 123 par1World.setBlock(par3 + var8, par4 + var10 - 1, par5 + var32, Block.grass.blockID); 124 } 125 } 126 } 127 } 128 } 129 130 if (Block.blocksList[this.blockIndex].blockMaterial == Material.lava) 131 { 132 for (var8 = 0; var8 < 16; ++var8) 133 { 134 for (var32 = 0; var32 < 16; ++var32) 135 { 136 for (var10 = 0; var10 < 8; ++var10) 137 { 138 var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); 139 140 if (var33 && (var10 < 4 || par2Random.nextInt(2) != 0) && par1World.getBlockMaterial(par3 + var8, par4 + var10, par5 + var32).isSolid()) 141 { 142 par1World.setBlock(par3 + var8, par4 + var10, par5 + var32, Block.stone.blockID); 143 } 144 } 145 } 146 } 147 } 148 149 if (Block.blocksList[this.blockIndex].blockMaterial == Material.water) 150 { 151 for (var8 = 0; var8 < 16; ++var8) 152 { 153 for (var32 = 0; var32 < 16; ++var32) 154 { 155 byte var34 = 4; 156 157 if (par1World.isBlockFreezable(par3 + var8, par4 + var34, par5 + var32)) 158 { 159 par1World.setBlock(par3 + var8, par4 + var34, par5 + var32, Block.ice.blockID); 160 } 161 } 162 } 163 } 164 165 return true; 166 } 167 } 168 }