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 NoiseGenerator2 {
6
7 private static int[][] d = new int[][] { { 1, 1, 0 }, { -1, 1, 0 }, { 1, -1, 0 }, { -1, -1, 0 }, { 1, 0, 1 }, { -1, 0, 1 }, { 1, 0, -1 }, { -1, 0, -1 }, { 0, 1, 1 }, { 0, -1, 1 }, { 0, 1, -1 }, { 0, -1, -1 } };
8 private int[] e;
9 public double a;
10 public double b;
11 public double c;
12 private static final double f = 0.5D * (Math.sqrt(3.0D) - 1.0D);
13 private static final double g = (3.0D - Math.sqrt(3.0D)) / 6.0D;
14
15 public NoiseGenerator2() {
16 this(new Random());
17 }
18
19 public NoiseGenerator2(Random random) {
20 this.e = new int[512];
21 this.a = random.nextDouble() * 256.0D;
22 this.b = random.nextDouble() * 256.0D;
23 this.c = random.nextDouble() * 256.0D;
24
25 int i;
26
27 for (i = 0; i < 256; this.e[i] = i++) {
28 ;
29 }
30
31 for (i = 0; i < 256; ++i) {
32 int j = random.nextInt(256 - i) + i;
33 int k = this.e[i];
34
35 this.e[i] = this.e[j];
36 this.e[j] = k;
37 this.e[i + 256] = this.e[i];
38 }
39 }
40
41 private static int a(double d0) {
42 return d0 > 0.0D ? (int) d0 : (int) d0 - 1;
43 }
44
45 private static double a(int[] aint, double d0, double d1) {
46 return (double) aint[0] * d0 + (double) aint[1] * d1;
47 }
48
49 public void a(double[] adouble, double d0, double d1, int i, int j, double d2, double d3, double d4) {
50 int k = 0;
51
52 for (int l = 0; l < i; ++l) {
53 double d5 = (d0 + (double) l) * d2 + this.a;
54
55 for (int i1 = 0; i1 < j; ++i1) {
56 double d6 = (d1 + (double) i1) * d3 + this.b;
57 double d7 = (d5 + d6) * f;
58 int j1 = a(d5 + d7);
59 int k1 = a(d6 + d7);
60 double d8 = (double) (j1 + k1) * g;
61 double d9 = (double) j1 - d8;
62 double d10 = (double) k1 - d8;
63 double d11 = d5 - d9;
64 double d12 = d6 - d10;
65 byte b0;
66 byte b1;
67
68 if (d11 > d12) {
69 b0 = 1;
70 b1 = 0;
71 } else {
72 b0 = 0;
73 b1 = 1;
74 }
75
76 double d13 = d11 - (double) b0 + g;
77 double d14 = d12 - (double) b1 + g;
78 double d15 = d11 - 1.0D + 2.0D * g;
79 double d16 = d12 - 1.0D + 2.0D * g;
80 int l1 = j1 & 255;
81 int i2 = k1 & 255;
82 int j2 = this.e[l1 + this.e[i2]] % 12;
83 int k2 = this.e[l1 + b0 + this.e[i2 + b1]] % 12;
84 int l2 = this.e[l1 + 1 + this.e[i2 + 1]] % 12;
85 double d17 = 0.5D - d11 * d11 - d12 * d12;
86 double d18;
87
88 if (d17 < 0.0D) {
89 d18 = 0.0D;
90 } else {
91 d17 *= d17;
92 d18 = d17 * d17 * a(d[j2], d11, d12);
93 }
94
95 double d19 = 0.5D - d13 * d13 - d14 * d14;
96 double d20;
97
98 if (d19 < 0.0D) {
99 d20 = 0.0D;
100 } else {
101 d19 *= d19;
102 d20 = d19 * d19 * a(d[k2], d13, d14);
103 }
104
105 double d21 = 0.5D - d15 * d15 - d16 * d16;
106 double d22;
107
108 if (d21 < 0.0D) {
109 d22 = 0.0D;
110 } else {
111 d21 *= d21;
112 d22 = d21 * d21 * a(d[l2], d15, d16);
113 }
114
115 int i3 = k++;
116
117 adouble[i3] += 70.0D * (d18 + d20 + d22) * d4;
118 }
119 }
120 }
121}