package net.glowstone.generator.populators.overworld; import net.glowstone.generator.objects.OreType; import net.glowstone.generator.objects.OreVein; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.StoneType; import org.bukkit.World; import org.bukkit.generator.BlockPopulator; import org.bukkit.material.Stone; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Random; /** * Populates the world with ores. */ public class OrePopulator extends BlockPopulator { private final Map<OreType, Integer> ores = new LinkedHashMap<>(); public OrePopulator() { ores.put(new OreType(Material.DIRT, 0, 256, 32), 10); ores.put(new OreType(Material.GRAVEL, 0, 256, 32), 8); ores.put(new OreType(Material.STONE, new Stone(StoneType.GRANITE), 0, 80, 32), 10); ores.put(new OreType(Material.STONE, new Stone(StoneType.DIORITE), 0, 80, 32), 10); ores.put(new OreType(Material.STONE, new Stone(StoneType.ANDESITE), 0, 80, 32), 10); ores.put(new OreType(Material.COAL_ORE, 0, 128, 16), 20); ores.put(new OreType(Material.IRON_ORE, 0, 64, 8), 20); ores.put(new OreType(Material.GOLD_ORE, 0, 32, 8), 2); ores.put(new OreType(Material.REDSTONE_ORE, 0, 16, 7), 8); ores.put(new OreType(Material.DIAMOND_ORE, 0, 16, 7), 1); ores.put(new OreType(Material.LAPIS_ORE, 16, 16, 6), 1); } @Override public void populate(World world, Random random, Chunk chunk) { final int cx = (chunk.getX() << 4); final int cz = (chunk.getZ() << 4); for (Entry<OreType, Integer> entry : ores.entrySet()) { final OreType oreType = entry.getKey(); for (int n = 0; n < entry.getValue(); n++) { int sourceX = cx + random.nextInt(16); int sourceZ = cz + random.nextInt(16); int sourceY = oreType.getMinY() == oreType.getMaxY() ? random.nextInt(oreType.getMinY()) + random.nextInt(oreType.getMinY()) : random.nextInt(oreType.getMaxY() - oreType.getMinY()) + oreType.getMinY(); new OreVein(oreType).generate(world, random, sourceX, sourceY, sourceZ); } } } }