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    }