1 package org.bukkit.util.noise;
3 import java.util.Random;
13 protected static final int grad3[][] = {{1, 1, 0}, {-1, 1, 0}, {1, -1, 0}, {-1, -1, 0},
14 {1, 0, 1}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1},
15 {0, 1, 1}, {0, -1, 1}, {0, 1, -1}, {0, -1, -1}};
19 int p[] = {151, 160, 137, 91, 90, 15, 131, 13, 201,
20 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37,
21 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62,
22 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56,
23 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139,
24 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133,
25 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25,
26 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200,
27 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3,
28 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255,
29 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42,
30 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153,
31 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79,
32 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242,
33 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249,
34 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204,
35 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222,
36 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180};
38 for (
int i = 0; i < 512; i++) {
49 this(
new Random(world.
getSeed()));
58 this(
new Random(seed));
67 offsetX = rand.nextDouble() * 256;
68 offsetY = rand.nextDouble() * 256;
69 offsetZ = rand.nextDouble() * 256;
71 for (
int i = 0; i < 256; i++) {
72 perm[i] = rand.nextInt(256);
75 for (
int i = 0; i < 256; i++) {
76 int pos = rand.nextInt(256 - i) + i;
81 perm[i + 256] = perm[i];
93 return instance.noise(x);
104 public static double getNoise(
double x,
double y) {
105 return instance.noise(x, y);
117 public static double getNoise(
double x,
double y,
double z) {
118 return instance.noise(x, y, z);
131 public double noise(
double x,
double y,
double z) {
136 int floorX =
floor(x);
137 int floorY =
floor(y);
138 int floorZ =
floor(z);
141 int X = floorX & 255;
142 int Y = floorY & 255;
143 int Z = floorZ & 255;
157 int AA = perm[A] + Z;
158 int AB = perm[A + 1] + Z;
159 int B = perm[X + 1] + Y;
160 int BA = perm[B] + Z;
161 int BB = perm[B + 1] + Z;
163 return lerp(fZ, lerp(fY, lerp(fX, grad(perm[AA], x, y, z),
164 grad(perm[BA], x - 1, y, z)),
165 lerp(fX, grad(perm[AB], x, y - 1, z),
166 grad(perm[BB], x - 1, y - 1, z))),
167 lerp(fY, lerp(fX, grad(perm[AA + 1], x, y, z - 1),
168 grad(perm[BA + 1], x - 1, y, z - 1)),
169 lerp(fX, grad(perm[AB + 1], x, y - 1, z - 1),
170 grad(perm[BB + 1], x - 1, y - 1, z - 1))));
183 public static double getNoise(
double x,
int octaves,
double frequency,
double amplitude) {
184 return instance.noise(x, octaves, frequency, amplitude);
198 public static double getNoise(
double x,
double y,
int octaves,
double frequency,
double amplitude) {
199 return instance.noise(x, y, octaves, frequency, amplitude);
214 public static double getNoise(
double x,
double y,
double z,
int octaves,
double frequency,
double amplitude) {
215 return instance.noise(x, y, z, octaves, frequency, amplitude);
PerlinNoiseGenerator(Random rand)
static double getNoise(double x, int octaves, double frequency, double amplitude)
static double getNoise(double x, double y, double z, int octaves, double frequency, double amplitude)
static double getNoise(double x, double y, double z)
PerlinNoiseGenerator(World world)
static double getNoise(double x)
static int floor(double x)
static double getNoise(double x, double y)
PerlinNoiseGenerator(long seed)
static double getNoise(double x, double y, int octaves, double frequency, double amplitude)
static PerlinNoiseGenerator getInstance()