package net.minecraft.world.gen;
import java.util.Random;
public class NoiseGeneratorSimplex
{
private static int[][] field_151611_e = 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}};
public static final double field_151614_a = Math.sqrt(3.0D);
private int[] field_151608_f;
public double field_151612_b;
public double field_151613_c;
public double field_151610_d;
private static final double field_151609_g = 0.5D * (field_151614_a - 1.0D);
private static final double field_151615_h = (3.0D - field_151614_a) / 6.0D;
private static final String __OBFID = "CL_00000537";
public NoiseGeneratorSimplex()
{
this(new Random());
}
public NoiseGeneratorSimplex(Random p_i45471_1_)
{
this.field_151608_f = new int[512];
this.field_151612_b = p_i45471_1_.nextDouble() * 256.0D;
this.field_151613_c = p_i45471_1_.nextDouble() * 256.0D;
this.field_151610_d = p_i45471_1_.nextDouble() * 256.0D;
int i;
for (i = 0; i < 256; this.field_151608_f[i] = i++)
{
;
}
for (i = 0; i < 256; ++i)
{
int j = p_i45471_1_.nextInt(256 - i) + i;
int k = this.field_151608_f[i];
this.field_151608_f[i] = this.field_151608_f[j];
this.field_151608_f[j] = k;
this.field_151608_f[i + 256] = this.field_151608_f[i];
}
}
private static int func_151607_a(double p_151607_0_)
{
return p_151607_0_ > 0.0D ? (int)p_151607_0_ : (int)p_151607_0_ - 1;
}
private static double func_151604_a(int[] p_151604_0_, double p_151604_1_, double p_151604_3_)
{
return (double)p_151604_0_[0] * p_151604_1_ + (double)p_151604_0_[1] * p_151604_3_;
}
public double func_151605_a(double p_151605_1_, double p_151605_3_)
{
double d5 = 0.5D * (field_151614_a - 1.0D);
double d6 = (p_151605_1_ + p_151605_3_) * d5;
int i = func_151607_a(p_151605_1_ + d6);
int j = func_151607_a(p_151605_3_ + d6);
double d7 = (3.0D - field_151614_a) / 6.0D;
double d8 = (double)(i + j) * d7;
double d9 = (double)i - d8;
double d10 = (double)j - d8;
double d11 = p_151605_1_ - d9;
double d12 = p_151605_3_ - d10;
byte b0;
byte b1;
if (d11 > d12)
{
b0 = 1;
b1 = 0;
}
else
{
b0 = 0;
b1 = 1;
}
double d13 = d11 - (double)b0 + d7;
double d14 = d12 - (double)b1 + d7;
double d15 = d11 - 1.0D + 2.0D * d7;
double d16 = d12 - 1.0D + 2.0D * d7;
int k = i & 255;
int l = j & 255;
int i1 = this.field_151608_f[k + this.field_151608_f[l]] % 12;
int j1 = this.field_151608_f[k + b0 + this.field_151608_f[l + b1]] % 12;
int k1 = this.field_151608_f[k + 1 + this.field_151608_f[l + 1]] % 12;
double d17 = 0.5D - d11 * d11 - d12 * d12;
double d2;
if (d17 < 0.0D)
{
d2 = 0.0D;
}
else
{
d17 *= d17;
d2 = d17 * d17 * func_151604_a(field_151611_e[i1], d11, d12);
}
double d18 = 0.5D - d13 * d13 - d14 * d14;
double d3;
if (d18 < 0.0D)
{
d3 = 0.0D;
}
else
{
d18 *= d18;
d3 = d18 * d18 * func_151604_a(field_151611_e[j1], d13, d14);
}
double d19 = 0.5D - d15 * d15 - d16 * d16;
double d4;
if (d19 < 0.0D)
{
d4 = 0.0D;
}
else
{
d19 *= d19;
d4 = d19 * d19 * func_151604_a(field_151611_e[k1], d15, d16);
}
return 70.0D * (d2 + d3 + d4);
}
public void func_151606_a(double[] p_151606_1_, double p_151606_2_, double p_151606_4_, int p_151606_6_, int p_151606_7_, double p_151606_8_, double p_151606_10_, double p_151606_12_)
{
int k = 0;
for (int l = 0; l < p_151606_7_; ++l)
{
double d5 = (p_151606_4_ + (double)l) * p_151606_10_ + this.field_151613_c;
for (int i1 = 0; i1 < p_151606_6_; ++i1)
{
double d6 = (p_151606_2_ + (double)i1) * p_151606_8_ + this.field_151612_b;
double d10 = (d6 + d5) * field_151609_g;
int j1 = func_151607_a(d6 + d10);
int k1 = func_151607_a(d5 + d10);
double d11 = (double)(j1 + k1) * field_151615_h;
double d12 = (double)j1 - d11;
double d13 = (double)k1 - d11;
double d14 = d6 - d12;
double d15 = d5 - d13;
byte b0;
byte b1;
if (d14 > d15)
{
b0 = 1;
b1 = 0;
}
else
{
b0 = 0;
b1 = 1;
}
double d16 = d14 - (double)b0 + field_151615_h;
double d17 = d15 - (double)b1 + field_151615_h;
double d18 = d14 - 1.0D + 2.0D * field_151615_h;
double d19 = d15 - 1.0D + 2.0D * field_151615_h;
int l1 = j1 & 255;
int i2 = k1 & 255;
int j2 = this.field_151608_f[l1 + this.field_151608_f[i2]] % 12;
int k2 = this.field_151608_f[l1 + b0 + this.field_151608_f[i2 + b1]] % 12;
int l2 = this.field_151608_f[l1 + 1 + this.field_151608_f[i2 + 1]] % 12;
double d20 = 0.5D - d14 * d14 - d15 * d15;
double d7;
if (d20 < 0.0D)
{
d7 = 0.0D;
}
else
{
d20 *= d20;
d7 = d20 * d20 * func_151604_a(field_151611_e[j2], d14, d15);
}
double d21 = 0.5D - d16 * d16 - d17 * d17;
double d8;
if (d21 < 0.0D)
{
d8 = 0.0D;
}
else
{
d21 *= d21;
d8 = d21 * d21 * func_151604_a(field_151611_e[k2], d16, d17);
}
double d22 = 0.5D - d18 * d18 - d19 * d19;
double d9;
if (d22 < 0.0D)
{
d9 = 0.0D;
}
else
{
d22 *= d22;
d9 = d22 * d22 * func_151604_a(field_151611_e[l2], d18, d19);
}
int i3 = k++;
p_151606_1_[i3] += 70.0D * (d7 + d8 + d9) * p_151606_12_;
}
}
}
}