Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 187 lines 6.8 kB view raw
1package net.minecraft.server; 2 3import java.util.Random; 4 5public class MapGenCavesHell extends MapGenBase { 6 7 public MapGenCavesHell() { 8 } 9 10 protected void a(int i, int j, byte[] abyte, double d0, double d1, double d2) { 11 this.a(i, j, abyte, d0, d1, d2, 1.0F + this.b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); 12 } 13 14 protected void a(int i, int j, byte[] abyte, double d0, double d1, double d2, float f, float f1, float f2, int k, int l, double d3) { 15 double d4 = (double) (i * 16 + 8); 16 double d5 = (double) (j * 16 + 8); 17 float f3 = 0.0F; 18 float f4 = 0.0F; 19 Random random = new Random(this.b.nextLong()); 20 21 if (l <= 0) { 22 int i1 = this.a * 16 - 16; 23 24 l = i1 - random.nextInt(i1 / 4); 25 } 26 27 boolean flag = false; 28 29 if (k == -1) { 30 k = l / 2; 31 flag = true; 32 } 33 34 int j1 = random.nextInt(l / 2) + l / 4; 35 36 for (boolean flag1 = random.nextInt(6) == 0; k < l; ++k) { 37 double d6 = 1.5D + (double) (MathHelper.sin((float) k * 3.1415927F / (float) l) * f * 1.0F); 38 double d7 = d6 * d3; 39 float f5 = MathHelper.cos(f2); 40 float f6 = MathHelper.sin(f2); 41 42 d0 += (double) (MathHelper.cos(f1) * f5); 43 d1 += (double) f6; 44 d2 += (double) (MathHelper.sin(f1) * f5); 45 if (flag1) { 46 f2 *= 0.92F; 47 } else { 48 f2 *= 0.7F; 49 } 50 51 f2 += f4 * 0.1F; 52 f1 += f3 * 0.1F; 53 f4 *= 0.9F; 54 f3 *= 0.75F; 55 f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; 56 f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; 57 if (!flag && k == j1 && f > 1.0F) { 58 this.a(i, j, abyte, d0, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 - 1.5707964F, f2 / 3.0F, k, l, 1.0D); 59 this.a(i, j, abyte, d0, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 + 1.5707964F, f2 / 3.0F, k, l, 1.0D); 60 return; 61 } 62 63 if (flag || random.nextInt(4) != 0) { 64 double d8 = d0 - d4; 65 double d9 = d2 - d5; 66 double d10 = (double) (l - k); 67 double d11 = (double) (f + 2.0F + 16.0F); 68 69 if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) { 70 return; 71 } 72 73 if (d0 >= d4 - 16.0D - d6 * 2.0D && d2 >= d5 - 16.0D - d6 * 2.0D && d0 <= d4 + 16.0D + d6 * 2.0D && d2 <= d5 + 16.0D + d6 * 2.0D) { 74 int k1 = MathHelper.floor(d0 - d6) - i * 16 - 1; 75 int l1 = MathHelper.floor(d0 + d6) - i * 16 + 1; 76 int i2 = MathHelper.floor(d1 - d7) - 1; 77 int j2 = MathHelper.floor(d1 + d7) + 1; 78 int k2 = MathHelper.floor(d2 - d6) - j * 16 - 1; 79 int l2 = MathHelper.floor(d2 + d6) - j * 16 + 1; 80 81 if (k1 < 0) { 82 k1 = 0; 83 } 84 85 if (l1 > 16) { 86 l1 = 16; 87 } 88 89 if (i2 < 1) { 90 i2 = 1; 91 } 92 93 if (j2 > 120) { 94 j2 = 120; 95 } 96 97 if (k2 < 0) { 98 k2 = 0; 99 } 100 101 if (l2 > 16) { 102 l2 = 16; 103 } 104 105 boolean flag2 = false; 106 107 int i3; 108 int j3; 109 110 for (j3 = k1; !flag2 && j3 < l1; ++j3) { 111 for (int k3 = k2; !flag2 && k3 < l2; ++k3) { 112 for (int l3 = j2 + 1; !flag2 && l3 >= i2 - 1; --l3) { 113 i3 = (j3 * 16 + k3) * 128 + l3; 114 if (l3 >= 0 && l3 < 128) { 115 if (abyte[i3] == Block.LAVA.id || abyte[i3] == Block.STATIONARY_LAVA.id) { 116 flag2 = true; 117 } 118 119 if (l3 != i2 - 1 && j3 != k1 && j3 != l1 - 1 && k3 != k2 && k3 != l2 - 1) { 120 l3 = i2; 121 } 122 } 123 } 124 } 125 } 126 127 if (!flag2) { 128 for (j3 = k1; j3 < l1; ++j3) { 129 double d12 = ((double) (j3 + i * 16) + 0.5D - d0) / d6; 130 131 for (i3 = k2; i3 < l2; ++i3) { 132 double d13 = ((double) (i3 + j * 16) + 0.5D - d2) / d6; 133 int i4 = (j3 * 16 + i3) * 128 + j2; 134 135 for (int j4 = j2 - 1; j4 >= i2; --j4) { 136 double d14 = ((double) j4 + 0.5D - d1) / d7; 137 138 if (d14 > -0.7D && d12 * d12 + d14 * d14 + d13 * d13 < 1.0D) { 139 byte b0 = abyte[i4]; 140 141 if (b0 == Block.NETHERRACK.id || b0 == Block.DIRT.id || b0 == Block.GRASS.id) { 142 abyte[i4] = 0; 143 } 144 } 145 146 --i4; 147 } 148 } 149 } 150 151 if (flag) { 152 break; 153 } 154 } 155 } 156 } 157 } 158 } 159 160 protected void a(World world, int i, int j, int k, int l, byte[] abyte) { 161 int i1 = this.b.nextInt(this.b.nextInt(this.b.nextInt(10) + 1) + 1); 162 163 if (this.b.nextInt(5) != 0) { 164 i1 = 0; 165 } 166 167 for (int j1 = 0; j1 < i1; ++j1) { 168 double d0 = (double) (i * 16 + this.b.nextInt(16)); 169 double d1 = (double) this.b.nextInt(128); 170 double d2 = (double) (j * 16 + this.b.nextInt(16)); 171 int k1 = 1; 172 173 if (this.b.nextInt(4) == 0) { 174 this.a(k, l, abyte, d0, d1, d2); 175 k1 += this.b.nextInt(4); 176 } 177 178 for (int l1 = 0; l1 < k1; ++l1) { 179 float f = this.b.nextFloat() * 3.1415927F * 2.0F; 180 float f1 = (this.b.nextFloat() - 0.5F) * 2.0F / 8.0F; 181 float f2 = this.b.nextFloat() * 2.0F + this.b.nextFloat(); 182 183 this.a(k, l, abyte, d0, d1, d2, f2 * 2.0F, f, f1, 0, 0, 0.5D); 184 } 185 } 186 } 187}