Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}