001 package net.minecraft.world.gen;
002
003 import java.util.Random;
004 import net.minecraft.util.MathHelper;
005
006 public class NoiseGeneratorOctaves extends NoiseGenerator
007 {
008 /**
009 * Collection of noise generation functions. Output is combined to produce different octaves of noise.
010 */
011 private NoiseGeneratorPerlin[] generatorCollection;
012 private int octaves;
013
014 public NoiseGeneratorOctaves(Random par1Random, int par2)
015 {
016 this.octaves = par2;
017 this.generatorCollection = new NoiseGeneratorPerlin[par2];
018
019 for (int var3 = 0; var3 < par2; ++var3)
020 {
021 this.generatorCollection[var3] = new NoiseGeneratorPerlin(par1Random);
022 }
023 }
024
025 /**
026 * pars:(par2,3,4=noiseOffset ; so that adjacent noise segments connect) (pars5,6,7=x,y,zArraySize),(pars8,10,12 =
027 * x,y,z noiseScale)
028 */
029 public double[] generateNoiseOctaves(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, int par6, int par7, double par8, double par10, double par12)
030 {
031 if (par1ArrayOfDouble == null)
032 {
033 par1ArrayOfDouble = new double[par5 * par6 * par7];
034 }
035 else
036 {
037 for (int var14 = 0; var14 < par1ArrayOfDouble.length; ++var14)
038 {
039 par1ArrayOfDouble[var14] = 0.0D;
040 }
041 }
042
043 double var27 = 1.0D;
044
045 for (int var16 = 0; var16 < this.octaves; ++var16)
046 {
047 double var17 = (double)par2 * var27 * par8;
048 double var19 = (double)par3 * var27 * par10;
049 double var21 = (double)par4 * var27 * par12;
050 long var23 = MathHelper.floor_double_long(var17);
051 long var25 = MathHelper.floor_double_long(var21);
052 var17 -= (double)var23;
053 var21 -= (double)var25;
054 var23 %= 16777216L;
055 var25 %= 16777216L;
056 var17 += (double)var23;
057 var21 += (double)var25;
058 this.generatorCollection[var16].populateNoiseArray(par1ArrayOfDouble, var17, var19, var21, par5, par6, par7, par8 * var27, par10 * var27, par12 * var27, var27);
059 var27 /= 2.0D;
060 }
061
062 return par1ArrayOfDouble;
063 }
064
065 /**
066 * Bouncer function to the main one with some default arguments.
067 */
068 public double[] generateNoiseOctaves(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, double par6, double par8, double par10)
069 {
070 return this.generateNoiseOctaves(par1ArrayOfDouble, par2, 10, par3, par4, 1, par5, par6, 1.0D, par8);
071 }
072 }