001    package org.bukkit.util.noise;
002    
003    import java.util.Random;
004    import org.bukkit.World;
005    
006    /**
007     * Creates perlin noise through unbiased octaves
008     */
009    public class PerlinOctaveGenerator extends OctaveGenerator {
010    
011        /**
012         * Creates a perlin octave generator for the given world
013         *
014         * @param world World to construct this generator for
015         * @param octaves Amount of octaves to create
016         */
017        public PerlinOctaveGenerator(World world, int octaves) {
018            this(new Random(world.getSeed()), octaves);
019        }
020    
021        /**
022         * Creates a perlin octave generator for the given world
023         *
024         * @param seed Seed to construct this generator for
025         * @param octaves Amount of octaves to create
026         */
027        public PerlinOctaveGenerator(long seed, int octaves) {
028            this(new Random(seed), octaves);
029        }
030    
031        /**
032         * Creates a perlin octave generator for the given {@link Random}
033         *
034         * @param rand Random object to construct this generator for
035         * @param octaves Amount of octaves to create
036         */
037        public PerlinOctaveGenerator(Random rand, int octaves) {
038            super(createOctaves(rand, octaves));
039        }
040    
041        private static NoiseGenerator[] createOctaves(Random rand, int octaves) {
042            NoiseGenerator[] result = new NoiseGenerator[octaves];
043    
044            for (int i = 0; i < octaves; i++) {
045                result[i] = new PerlinNoiseGenerator(rand);
046            }
047    
048            return result;
049        }
050    }