Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 244 lines 8.0 kB view raw
1package net.minecraft.server; 2 3import java.util.Random; 4 5public class NoiseGeneratorPerlin extends NoiseGenerator { 6 7 private int[] d; 8 public double a; 9 public double b; 10 public double c; 11 12 public NoiseGeneratorPerlin() { 13 this(new Random()); 14 } 15 16 public NoiseGeneratorPerlin(Random random) { 17 this.d = new int[512]; 18 this.a = random.nextDouble() * 256.0D; 19 this.b = random.nextDouble() * 256.0D; 20 this.c = random.nextDouble() * 256.0D; 21 22 int i; 23 24 for (i = 0; i < 256; this.d[i] = i++) { 25 ; 26 } 27 28 for (i = 0; i < 256; ++i) { 29 int j = random.nextInt(256 - i) + i; 30 int k = this.d[i]; 31 32 this.d[i] = this.d[j]; 33 this.d[j] = k; 34 this.d[i + 256] = this.d[i]; 35 } 36 } 37 38 public double a(double d0, double d1, double d2) { 39 double d3 = d0 + this.a; 40 double d4 = d1 + this.b; 41 double d5 = d2 + this.c; 42 int i = (int) d3; 43 int j = (int) d4; 44 int k = (int) d5; 45 46 if (d3 < (double) i) { 47 --i; 48 } 49 50 if (d4 < (double) j) { 51 --j; 52 } 53 54 if (d5 < (double) k) { 55 --k; 56 } 57 58 int l = i & 255; 59 int i1 = j & 255; 60 int j1 = k & 255; 61 62 d3 -= (double) i; 63 d4 -= (double) j; 64 d5 -= (double) k; 65 double d6 = d3 * d3 * d3 * (d3 * (d3 * 6.0D - 15.0D) + 10.0D); 66 double d7 = d4 * d4 * d4 * (d4 * (d4 * 6.0D - 15.0D) + 10.0D); 67 double d8 = d5 * d5 * d5 * (d5 * (d5 * 6.0D - 15.0D) + 10.0D); 68 int k1 = this.d[l] + i1; 69 int l1 = this.d[k1] + j1; 70 int i2 = this.d[k1 + 1] + j1; 71 int j2 = this.d[l + 1] + i1; 72 int k2 = this.d[j2] + j1; 73 int l2 = this.d[j2 + 1] + j1; 74 75 return this.b(d8, this.b(d7, this.b(d6, this.a(this.d[l1], d3, d4, d5), this.a(this.d[k2], d3 - 1.0D, d4, d5)), this.b(d6, this.a(this.d[i2], d3, d4 - 1.0D, d5), this.a(this.d[l2], d3 - 1.0D, d4 - 1.0D, d5))), this.b(d7, this.b(d6, this.a(this.d[l1 + 1], d3, d4, d5 - 1.0D), this.a(this.d[k2 + 1], d3 - 1.0D, d4, d5 - 1.0D)), this.b(d6, this.a(this.d[i2 + 1], d3, d4 - 1.0D, d5 - 1.0D), this.a(this.d[l2 + 1], d3 - 1.0D, d4 - 1.0D, d5 - 1.0D)))); 76 } 77 78 public final double b(double d0, double d1, double d2) { 79 return d1 + d0 * (d2 - d1); 80 } 81 82 public final double a(int i, double d0, double d1) { 83 int j = i & 15; 84 double d2 = (double) (1 - ((j & 8) >> 3)) * d0; 85 double d3 = j < 4 ? 0.0D : (j != 12 && j != 14 ? d1 : d0); 86 87 return ((j & 1) == 0 ? d2 : -d2) + ((j & 2) == 0 ? d3 : -d3); 88 } 89 90 public final double a(int i, double d0, double d1, double d2) { 91 int j = i & 15; 92 double d3 = j < 8 ? d0 : d1; 93 double d4 = j < 4 ? d1 : (j != 12 && j != 14 ? d2 : d0); 94 95 return ((j & 1) == 0 ? d3 : -d3) + ((j & 2) == 0 ? d4 : -d4); 96 } 97 98 public double a(double d0, double d1) { 99 return this.a(d0, d1, 0.0D); 100 } 101 102 public void a(double[] adouble, double d0, double d1, double d2, int i, int j, int k, double d3, double d4, double d5, double d6) { 103 int l; 104 int i1; 105 double d7; 106 double d8; 107 double d9; 108 int j1; 109 double d10; 110 int k1; 111 int l1; 112 int i2; 113 int j2; 114 115 if (j == 1) { 116 boolean flag = false; 117 boolean flag1 = false; 118 boolean flag2 = false; 119 boolean flag3 = false; 120 double d11 = 0.0D; 121 double d12 = 0.0D; 122 123 j2 = 0; 124 double d13 = 1.0D / d6; 125 126 for (int k2 = 0; k2 < i; ++k2) { 127 d7 = (d0 + (double) k2) * d3 + this.a; 128 int l2 = (int) d7; 129 130 if (d7 < (double) l2) { 131 --l2; 132 } 133 134 int i3 = l2 & 255; 135 136 d7 -= (double) l2; 137 d8 = d7 * d7 * d7 * (d7 * (d7 * 6.0D - 15.0D) + 10.0D); 138 139 for (j1 = 0; j1 < k; ++j1) { 140 d9 = (d2 + (double) j1) * d5 + this.c; 141 k1 = (int) d9; 142 if (d9 < (double) k1) { 143 --k1; 144 } 145 146 l1 = k1 & 255; 147 d9 -= (double) k1; 148 d10 = d9 * d9 * d9 * (d9 * (d9 * 6.0D - 15.0D) + 10.0D); 149 l = this.d[i3] + 0; 150 int j3 = this.d[l] + l1; 151 int k3 = this.d[i3 + 1] + 0; 152 153 i1 = this.d[k3] + l1; 154 d11 = this.b(d8, this.a(this.d[j3], d7, d9), this.a(this.d[i1], d7 - 1.0D, 0.0D, d9)); 155 d12 = this.b(d8, this.a(this.d[j3 + 1], d7, 0.0D, d9 - 1.0D), this.a(this.d[i1 + 1], d7 - 1.0D, 0.0D, d9 - 1.0D)); 156 double d14 = this.b(d10, d11, d12); 157 158 i2 = j2++; 159 adouble[i2] += d14 * d13; 160 } 161 } 162 } else { 163 l = 0; 164 double d15 = 1.0D / d6; 165 166 i1 = -1; 167 boolean flag4 = false; 168 boolean flag5 = false; 169 boolean flag6 = false; 170 boolean flag7 = false; 171 boolean flag8 = false; 172 boolean flag9 = false; 173 double d16 = 0.0D; 174 175 d7 = 0.0D; 176 double d17 = 0.0D; 177 178 d8 = 0.0D; 179 180 for (j1 = 0; j1 < i; ++j1) { 181 d9 = (d0 + (double) j1) * d3 + this.a; 182 k1 = (int) d9; 183 if (d9 < (double) k1) { 184 --k1; 185 } 186 187 l1 = k1 & 255; 188 d9 -= (double) k1; 189 d10 = d9 * d9 * d9 * (d9 * (d9 * 6.0D - 15.0D) + 10.0D); 190 191 for (int l3 = 0; l3 < k; ++l3) { 192 double d18 = (d2 + (double) l3) * d5 + this.c; 193 int i4 = (int) d18; 194 195 if (d18 < (double) i4) { 196 --i4; 197 } 198 199 int j4 = i4 & 255; 200 201 d18 -= (double) i4; 202 double d19 = d18 * d18 * d18 * (d18 * (d18 * 6.0D - 15.0D) + 10.0D); 203 204 for (int k4 = 0; k4 < j; ++k4) { 205 double d20 = (d1 + (double) k4) * d4 + this.b; 206 int l4 = (int) d20; 207 208 if (d20 < (double) l4) { 209 --l4; 210 } 211 212 int i5 = l4 & 255; 213 214 d20 -= (double) l4; 215 double d21 = d20 * d20 * d20 * (d20 * (d20 * 6.0D - 15.0D) + 10.0D); 216 217 if (k4 == 0 || i5 != i1) { 218 i1 = i5; 219 int j5 = this.d[l1] + i5; 220 int k5 = this.d[j5] + j4; 221 int l5 = this.d[j5 + 1] + j4; 222 int i6 = this.d[l1 + 1] + i5; 223 224 j2 = this.d[i6] + j4; 225 int j6 = this.d[i6 + 1] + j4; 226 227 d16 = this.b(d10, this.a(this.d[k5], d9, d20, d18), this.a(this.d[j2], d9 - 1.0D, d20, d18)); 228 d7 = this.b(d10, this.a(this.d[l5], d9, d20 - 1.0D, d18), this.a(this.d[j6], d9 - 1.0D, d20 - 1.0D, d18)); 229 d17 = this.b(d10, this.a(this.d[k5 + 1], d9, d20, d18 - 1.0D), this.a(this.d[j2 + 1], d9 - 1.0D, d20, d18 - 1.0D)); 230 d8 = this.b(d10, this.a(this.d[l5 + 1], d9, d20 - 1.0D, d18 - 1.0D), this.a(this.d[j6 + 1], d9 - 1.0D, d20 - 1.0D, d18 - 1.0D)); 231 } 232 233 double d22 = this.b(d21, d16, d7); 234 double d23 = this.b(d21, d17, d8); 235 double d24 = this.b(d19, d22, d23); 236 237 i2 = l++; 238 adouble[i2] += d24 * d15; 239 } 240 } 241 } 242 } 243 } 244}