Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / NoiseGenerator3.java
package net.minecraft.server;

import it.unimi.dsi.fastutil.ints.IntRBTreeSet;
import it.unimi.dsi.fastutil.ints.IntSortedSet;
import java.util.stream.IntStream;

public class NoiseGenerator3 implements NoiseGenerator {

    private final NoiseGenerator3Handler[] a;
    private final double b;
    private final double c;

    public NoiseGenerator3(SeededRandom seededrandom, int i, int j) {
        this(seededrandom, new IntRBTreeSet(IntStream.rangeClosed(-i, j).toArray()));
    }

    public NoiseGenerator3(SeededRandom seededrandom, IntSortedSet intsortedset) {
        if (intsortedset.isEmpty()) {
            throw new IllegalArgumentException("Need some octaves!");
        } else {
            int i = -intsortedset.firstInt();
            int j = intsortedset.lastInt();
            int k = i + j + 1;

            if (k < 1) {
                throw new IllegalArgumentException("Total number of octaves needs to be >= 1");
            } else {
                NoiseGenerator3Handler noisegenerator3handler = new NoiseGenerator3Handler(seededrandom);
                int l = j;

                this.a = new NoiseGenerator3Handler[k];
                if (j >= 0 && j < k && intsortedset.contains(0)) {
                    this.a[j] = noisegenerator3handler;
                }

                for (int i1 = j + 1; i1 < k; ++i1) {
                    if (i1 >= 0 && intsortedset.contains(l - i1)) {
                        this.a[i1] = new NoiseGenerator3Handler(seededrandom);
                    } else {
                        seededrandom.a(262);
                    }
                }

                if (j > 0) {
                    long j1 = (long) (noisegenerator3handler.a(noisegenerator3handler.b, noisegenerator3handler.c, noisegenerator3handler.d) * 9.223372036854776E18D);
                    SeededRandom seededrandom1 = new SeededRandom(j1);

                    for (int k1 = l - 1; k1 >= 0; --k1) {
                        if (k1 < k && intsortedset.contains(l - k1)) {
                            this.a[k1] = new NoiseGenerator3Handler(seededrandom1);
                        } else {
                            seededrandom1.a(262);
                        }
                    }
                }

                this.c = Math.pow(2.0D, (double) j);
                this.b = 1.0D / (Math.pow(2.0D, (double) k) - 1.0D);
            }
        }
    }

    public double a(double d0, double d1, boolean flag) {
        double d2 = 0.0D;
        double d3 = this.c;
        double d4 = this.b;
        NoiseGenerator3Handler[] anoisegenerator3handler = this.a;
        int i = anoisegenerator3handler.length;

        for (int j = 0; j < i; ++j) {
            NoiseGenerator3Handler noisegenerator3handler = anoisegenerator3handler[j];

            if (noisegenerator3handler != null) {
                d2 += noisegenerator3handler.a(d0 * d3 + (flag ? noisegenerator3handler.b : 0.0D), d1 * d3 + (flag ? noisegenerator3handler.c : 0.0D)) * d4;
            }

            d3 /= 2.0D;
            d4 *= 2.0D;
        }

        return d2;
    }

    @Override
    public double a(double d0, double d1, double d2, double d3) {
        return this.a(d0, d1, true) * 0.55D;
    }
}