package net.glowstone.generator.populators.overworld;
import net.glowstone.generator.objects.DoubleTallPlant;
import net.glowstone.generator.objects.Flower;
import net.glowstone.generator.objects.FlowerType;
import net.glowstone.generator.objects.TallGrass;
import net.glowstone.util.noise.SimplexOctaveGenerator;
import org.bukkit.Chunk;
import org.bukkit.DoublePlantSpecies;
import org.bukkit.GrassSpecies;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.material.LongGrass;
import org.bukkit.util.noise.OctaveGenerator;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Random;
public class PlainsPopulator extends BiomePopulator {
private static final FlowerType[] FLOWERS = {FlowerType.POPPY, FlowerType.HOUSTONIA, FlowerType.OXEYE_DAISY};
private static final FlowerType[] TULIPS = {FlowerType.TULIP_RED, FlowerType.TULIP_ORANGE, FlowerType.TULIP_WHITE, FlowerType.TULIP_PINK};
private final OctaveGenerator noiseGen;
public PlainsPopulator() {
super();
flowerDecorator.setAmount(0);
tallGrassDecorator.setAmount(0);
noiseGen = new SimplexOctaveGenerator(new Random(2345), 1);
noiseGen.setScale(1 / 200.0D);
}
@Override
public Collection<Biome> getBiomes() {
return Collections.unmodifiableList(Arrays.asList(new Biome[] {Biome.PLAINS}));
}
@Override
public void populateOnGround(World world, Random random, Chunk chunk) {
int sourceX = (chunk.getX() << 4);
int sourceZ = (chunk.getZ() << 4);
int flowerAmount = 15;
int tallGrassAmount = 5;
if (noiseGen.noise(sourceX + 8, sourceZ + 8, 0.5D, 2.0D) >= -0.8D) {
flowerAmount = 4;
tallGrassAmount = 10;
for (int i = 0; i < 7; i++) {
int x = sourceX + random.nextInt(16);
int z = sourceZ + random.nextInt(16);
int y = random.nextInt(world.getHighestBlockYAt(x, z) + 32);
new DoubleTallPlant(DoublePlantSpecies.DOUBLE_TALLGRASS).generate(world, random, x, y, z);
}
}
FlowerType flower = FlowerType.DANDELION;
if (noiseGen.noise(sourceX + 8, sourceZ + 8, 0.5D, 2.0D) < -0.8D) {
flower = TULIPS[random.nextInt(TULIPS.length)];
} else if (random.nextInt(3) > 0) {
flower = FLOWERS[random.nextInt(FLOWERS.length)];
}
for (int i = 0; i < flowerAmount; i++) {
int x = sourceX + random.nextInt(16);
int z = sourceZ + random.nextInt(16);
int y = random.nextInt(world.getHighestBlockYAt(x, z) + 32);
new Flower(flower).generate(world, random, x, y, z);
}
for (int i = 0; i < tallGrassAmount; i++) {
int x = sourceX + random.nextInt(16);
int z = sourceZ + random.nextInt(16);
int y = random.nextInt(world.getHighestBlockYAt(x, z) << 1);
new TallGrass(new LongGrass(GrassSpecies.NORMAL)).generate(world, random, x, y, z);
}
super.populateOnGround(world, random, chunk);
}
}