Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.jetp250.skylands;
- import java.util.Collections;
- import java.util.List;
- import java.util.Random;
- import org.bukkit.Bukkit;
- import org.bukkit.Material;
- import org.bukkit.World;
- import org.bukkit.generator.BlockPopulator;
- import org.bukkit.generator.ChunkGenerator;
- import org.bukkit.material.MaterialData;
- import me.jetp250.skylands.utility.FastRandom;
- import me.jetp250.skylands.utility.MathHelper;
- import me.jetp250.skylands.utility.OctaveNoiseGenerator;
- @SuppressWarnings("deprecation")
- public class BukkitIslandChunkGenerator extends ChunkGenerator {
- private static final MaterialData[] MATERIALS;
- private static final MaterialData[] MISC;
- protected final FastRandom random;
- protected final OctaveNoiseGenerator noise;
- public BukkitIslandChunkGenerator(final FastRandom random, final int octaves) {
- this.noise = new OctaveNoiseGenerator(random, octaves, 1 / 64.0F);
- this.random = random;
- }
- @Override
- public List<BlockPopulator> getDefaultPopulators(final World world) {
- return Collections.emptyList();
- }
- @Override
- public boolean canSpawn(final World world, final int x, final int z) {
- return world.getHighestBlockYAt(x, z) > 0;
- }
- @Override
- public ChunkData generateChunkData(final World world, Random NOT_IN_USE, final int chunkX, final int chunkZ,
- final BiomeGrid biome) {
- final ChunkData data = Bukkit.createChunkData(world);
- final int rX = chunkX * 16;
- final int rZ = chunkZ * 16;
- for (int x = 0; x < 16; ++x) {
- final int realX = rX + x;
- for (int z = 0; z < 16; ++z) {
- final int realZ = rZ + z;
- final float bottom = noise.noise(realX, realZ, 1.4F, 0.81F) * 40 + 90;
- float top = noise.noise(realX, realZ, 0.2F, 0.1F) * 14 + 90;
- final float sub = top - bottom;
- if (sub < 50F) {
- top -= (50F - sub) * 0.02;
- }
- if (top - bottom >= 3) {
- int y = top > 255 ? 255 : MathHelper.ceil(top);
- final int decorationHeight = y - 3;
- data.setBlock(x, y--, z, MISC[1]);
- final MaterialData decoration = MISC[2];
- for (; y > decorationHeight; --y)
- data.setBlock(x, y, z, decoration);
- for (; y > bottom; --y) {
- final MaterialData type = MATERIALS[random.nextInt(MATERIALS.length)];
- data.setBlock(x, y, z, type.getItemTypeId(), type.getData());
- }
- }
- }
- }
- return data;
- }
- static {
- MATERIALS = new MaterialData[] { new MaterialData(Material.COBBLESTONE), new MaterialData(Material.STONE),
- new MaterialData(Material.STONE, (byte) 5) };
- MISC = new MaterialData[] { new MaterialData(Material.STONE), new MaterialData(Material.GRASS),
- new MaterialData(Material.DIRT) };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement