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 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}