package net.glowstone.generator.populators.overworld;
import net.glowstone.generator.objects.Flower;
import net.glowstone.generator.objects.FlowerType;
import net.glowstone.util.noise.SimplexOctaveGenerator;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.util.noise.OctaveGenerator;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Random;
public class FlowerForestPopulator extends ForestPopulator {
public static final FlowerType[] FLOWERS = {FlowerType.POPPY, FlowerType.POPPY, FlowerType.DANDELION, FlowerType.ALLIUM,
FlowerType.HOUSTONIA, FlowerType.TULIP_RED, FlowerType.TULIP_ORANGE, FlowerType.TULIP_WHITE, FlowerType.TULIP_PINK,
FlowerType.OXEYE_DAISY};
private final OctaveGenerator noiseGen;
public FlowerForestPopulator() {
super();
treeDecorator.setAmount(6);
flowerDecorator.setAmount(0);
doublePlantLoweringAmount = 1;
noiseGen = new SimplexOctaveGenerator(new Random(2345), 1);
noiseGen.setScale(1 / 48.0D);
}
@Override
public Collection<Biome> getBiomes() {
return Collections.unmodifiableList(Arrays.asList(new Biome[] {Biome.FLOWER_FOREST}));
}
@Override
public void populateOnGround(World world, Random random, Chunk chunk) {
super.populateOnGround(world, random, chunk);
int sourceX = (chunk.getX() << 4);
int sourceZ = (chunk.getZ() << 4);
for (int i = 0; i < 100; i++) {
int x = sourceX + random.nextInt(16);
int z = sourceZ + random.nextInt(16);
int y = random.nextInt(world.getHighestBlockYAt(x, z) + 32);
double noise = (noiseGen.noise(x, z, 0.5D, 2.0D) + 1.0D) / 2.0D;
noise = noise < 0 ? 0 : noise > 0.9999D ? 0.9999D : noise;
final FlowerType flower = FLOWERS[(int) (noise * FLOWERS.length)];
new Flower(flower).generate(world, random, x, y, z);
}
}
}