Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 108 lines 4.4 kB view raw
1package net.minecraft.server; 2 3import java.util.Random; 4 5public class WorldGenLakes extends WorldGenerator { 6 7 private int a; 8 9 public WorldGenLakes(int i) { 10 this.a = i; 11 } 12 13 public boolean a(World world, Random random, int i, int j, int k) { 14 i -= 8; 15 16 for (k -= 8; j > 0 && world.isEmpty(i, j, k); --j) { 17 ; 18 } 19 20 j -= 4; 21 boolean[] aboolean = new boolean[2048]; 22 int l = random.nextInt(4) + 4; 23 24 int i1; 25 26 for (i1 = 0; i1 < l; ++i1) { 27 double d0 = random.nextDouble() * 6.0D + 3.0D; 28 double d1 = random.nextDouble() * 4.0D + 2.0D; 29 double d2 = random.nextDouble() * 6.0D + 3.0D; 30 double d3 = random.nextDouble() * (16.0D - d0 - 2.0D) + 1.0D + d0 / 2.0D; 31 double d4 = random.nextDouble() * (8.0D - d1 - 4.0D) + 2.0D + d1 / 2.0D; 32 double d5 = random.nextDouble() * (16.0D - d2 - 2.0D) + 1.0D + d2 / 2.0D; 33 34 for (int j1 = 1; j1 < 15; ++j1) { 35 for (int k1 = 1; k1 < 15; ++k1) { 36 for (int l1 = 1; l1 < 7; ++l1) { 37 double d6 = ((double) j1 - d3) / (d0 / 2.0D); 38 double d7 = ((double) l1 - d4) / (d1 / 2.0D); 39 double d8 = ((double) k1 - d5) / (d2 / 2.0D); 40 double d9 = d6 * d6 + d7 * d7 + d8 * d8; 41 42 if (d9 < 1.0D) { 43 aboolean[(j1 * 16 + k1) * 8 + l1] = true; 44 } 45 } 46 } 47 } 48 } 49 50 boolean flag; 51 int i2; 52 int j2; 53 54 for (i1 = 0; i1 < 16; ++i1) { 55 for (i2 = 0; i2 < 16; ++i2) { 56 for (j2 = 0; j2 < 8; ++j2) { 57 flag = !aboolean[(i1 * 16 + i2) * 8 + j2] && (i1 < 15 && aboolean[((i1 + 1) * 16 + i2) * 8 + j2] || i1 > 0 && aboolean[((i1 - 1) * 16 + i2) * 8 + j2] || i2 < 15 && aboolean[(i1 * 16 + i2 + 1) * 8 + j2] || i2 > 0 && aboolean[(i1 * 16 + (i2 - 1)) * 8 + j2] || j2 < 7 && aboolean[(i1 * 16 + i2) * 8 + j2 + 1] || j2 > 0 && aboolean[(i1 * 16 + i2) * 8 + (j2 - 1)]); 58 if (flag) { 59 Material material = world.getMaterial(i + i1, j + j2, k + i2); 60 61 if (j2 >= 4 && material.isLiquid()) { 62 return false; 63 } 64 65 if (j2 < 4 && !material.isBuildable() && world.getTypeId(i + i1, j + j2, k + i2) != this.a) { 66 return false; 67 } 68 } 69 } 70 } 71 } 72 73 for (i1 = 0; i1 < 16; ++i1) { 74 for (i2 = 0; i2 < 16; ++i2) { 75 for (j2 = 0; j2 < 8; ++j2) { 76 if (aboolean[(i1 * 16 + i2) * 8 + j2]) { 77 world.setRawTypeId(i + i1, j + j2, k + i2, j2 >= 4 ? 0 : this.a); 78 } 79 } 80 } 81 } 82 83 for (i1 = 0; i1 < 16; ++i1) { 84 for (i2 = 0; i2 < 16; ++i2) { 85 for (j2 = 4; j2 < 8; ++j2) { 86 if (aboolean[(i1 * 16 + i2) * 8 + j2] && world.getTypeId(i + i1, j + j2 - 1, k + i2) == Block.DIRT.id && world.a(EnumSkyBlock.SKY, i + i1, j + j2, k + i2) > 0) { 87 world.setRawTypeId(i + i1, j + j2 - 1, k + i2, Block.GRASS.id); 88 } 89 } 90 } 91 } 92 93 if (Block.byId[this.a].material == Material.LAVA) { 94 for (i1 = 0; i1 < 16; ++i1) { 95 for (i2 = 0; i2 < 16; ++i2) { 96 for (j2 = 0; j2 < 8; ++j2) { 97 flag = !aboolean[(i1 * 16 + i2) * 8 + j2] && (i1 < 15 && aboolean[((i1 + 1) * 16 + i2) * 8 + j2] || i1 > 0 && aboolean[((i1 - 1) * 16 + i2) * 8 + j2] || i2 < 15 && aboolean[(i1 * 16 + i2 + 1) * 8 + j2] || i2 > 0 && aboolean[(i1 * 16 + (i2 - 1)) * 8 + j2] || j2 < 7 && aboolean[(i1 * 16 + i2) * 8 + j2 + 1] || j2 > 0 && aboolean[(i1 * 16 + i2) * 8 + (j2 - 1)]); 98 if (flag && (j2 < 4 || random.nextInt(2) != 0) && world.getMaterial(i + i1, j + j2, k + i2).isBuildable()) { 99 world.setRawTypeId(i + i1, j + j2, k + i2, Block.STONE.id); 100 } 101 } 102 } 103 } 104 } 105 106 return true; 107 } 108}