package net.glowstone.generator.populators.overworld;
import net.glowstone.generator.structures.GlowDungeon;
import net.glowstone.generator.structures.util.StructureBoundingBox;
import net.glowstone.util.BlockStateDelegate;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.util.Vector;
import org.bukkit.util.noise.SimplexNoiseGenerator;
import java.util.Random;
/**
* A BlockPopulator that places dungeons around the map.
*/
public class DungeonPopulator extends BlockPopulator {
@Override
public void populate(World world, Random random, Chunk source) {
SimplexNoiseGenerator noise = new SimplexNoiseGenerator(world);
double density = noise.noise(source.getX(), source.getZ());
if (density > 0.8) {
// TODO later switch to this loop to have 8 attempts of dungeon placement per chunk, once we get caves and ravines
//for (int i = 0; i < 8; i++) {
int x = (source.getX() << 4) + random.nextInt(16);
int z = (source.getZ() << 4) + random.nextInt(16);
int y = random.nextInt(256);
final GlowDungeon dungeon = new GlowDungeon(random, new Location(world, x, y, z));
final BlockStateDelegate delegate = new BlockStateDelegate();
if (dungeon.generate(world, random, new StructureBoundingBox(new Vector(x - 15, 1, z - 15), new Vector(x + 15, 511, z + 15)), delegate)) {
delegate.updateBlockStates();
}
//}
}
}
}