Finished untested biome generator.
Also: Changed plugin structure to adapt better to server API Refactored by reorganizing packages.
This commit is contained in:
		@@ -3,16 +3,16 @@ package ca.recrown.islandsurvivalcraft;
 | 
				
			|||||||
import org.bukkit.generator.ChunkGenerator;
 | 
					import org.bukkit.generator.ChunkGenerator;
 | 
				
			||||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
					import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ca.recrown.islandsurvivalcraft.worldgeneration.BiomePerIslandGenerator;
 | 
					import ca.recrown.islandsurvivalcraft.world.IslandSurvivalCraftChunkGenerator;
 | 
				
			||||||
import ca.recrown.islandsurvivalcraft.worldgeneration.IslandSurvivalCraftWorldGenerator;
 | 
					import ca.recrown.islandsurvivalcraft.world.IslandWorldGenerator;
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.generation.BiomePerIslandGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class IslandSurvivalCraft extends JavaPlugin {
 | 
					public class IslandSurvivalCraft extends JavaPlugin {
 | 
				
			||||||
    IslandSurvivalCraftWorldGenerator generator;
 | 
					    IslandSurvivalCraftChunkGenerator generator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onEnable() {
 | 
					    public void onEnable() {
 | 
				
			||||||
        generator = new IslandSurvivalCraftWorldGenerator(new BiomePerIslandGenerator());
 | 
					        generator = new IslandSurvivalCraftChunkGenerator(new BiomePerIslandGenerator());
 | 
				
			||||||
        generator.initialize();
 | 
					 | 
				
			||||||
        super.onEnable();
 | 
					        super.onEnable();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					package ca.recrown.islandsurvivalcraft.world;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
@@ -11,32 +11,27 @@ import ca.recrown.islandsurvivalcraft.Utilities;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class BiomeSelector {
 | 
					public class BiomeSelector {
 | 
				
			||||||
    private boolean initialized = false;
 | 
					    private boolean initialized = false;
 | 
				
			||||||
    private Random random;
 | 
					    private final Random random;
 | 
				
			||||||
    private final HashMap<Biome, Float> lands;
 | 
					    private final HashMap<Biome, Float> lands = new HashMap<>();
 | 
				
			||||||
    private HashMap<Float, ArrayList<Biome>> temperaturesForLand;
 | 
					    private HashMap<Float, ArrayList<Biome>> temperaturesForLand = new HashMap<>();
 | 
				
			||||||
    private final HashMap<Float, ArrayList<Biome>> temperaturePartitionedLandBiomes;
 | 
					    private final HashMap<Float, ArrayList<Biome>> temperaturePartitionedLandBiomes = new HashMap<>();
 | 
				
			||||||
    private final HashMap<Biome, Float> oceans;
 | 
					    private final HashMap<Biome, Float> oceans = new HashMap<>();
 | 
				
			||||||
    private HashMap<Float, ArrayList<Biome>> temperaturesForOcean;
 | 
					    private HashMap<Float, ArrayList<Biome>> temperaturesForOcean = new HashMap<>();
 | 
				
			||||||
    private final HashMap<Float, ArrayList<Biome>> temperaturePartitionedOceanBiomes;
 | 
					    private final HashMap<Float, ArrayList<Biome>> temperaturePartitionedOceanBiomes = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public BiomeSelector() {
 | 
					    public BiomeSelector(Random random) {
 | 
				
			||||||
        lands = new HashMap<>();
 | 
					        this.random = random;
 | 
				
			||||||
        oceans = new HashMap<>();
 | 
					        
 | 
				
			||||||
        temperaturePartitionedLandBiomes = new HashMap<>();
 | 
					 | 
				
			||||||
        temperaturePartitionedLandBiomes.put(0.05f, new ArrayList<>());
 | 
					        temperaturePartitionedLandBiomes.put(0.05f, new ArrayList<>());
 | 
				
			||||||
        temperaturePartitionedLandBiomes.put(0.30f, new ArrayList<>());
 | 
					        temperaturePartitionedLandBiomes.put(0.30f, new ArrayList<>());
 | 
				
			||||||
        temperaturePartitionedLandBiomes.put(0.95f, new ArrayList<>());
 | 
					        temperaturePartitionedLandBiomes.put(0.95f, new ArrayList<>());
 | 
				
			||||||
        temperaturePartitionedLandBiomes.put(2f, new ArrayList<>());
 | 
					        temperaturePartitionedLandBiomes.put(2f, new ArrayList<>());
 | 
				
			||||||
        temperaturePartitionedOceanBiomes = new HashMap<>();
 | 
					
 | 
				
			||||||
        temperaturePartitionedOceanBiomes.put(0.00f, new ArrayList<>());
 | 
					        temperaturePartitionedOceanBiomes.put(0.00f, new ArrayList<>());
 | 
				
			||||||
        temperaturePartitionedOceanBiomes.put(0.5f, new ArrayList<>());
 | 
					        temperaturePartitionedOceanBiomes.put(0.5f, new ArrayList<>());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setRandom(Random random) {
 | 
					 | 
				
			||||||
        this.random = random;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void initialize() {
 | 
					    public void initialize() {
 | 
				
			||||||
        if (initialized) throw new IllegalStateException("Biome selector is already initialized.");
 | 
					        if (initialized) throw new IllegalStateException("Biome selector is already initialized.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					package ca.recrown.islandsurvivalcraft.world;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Random;
 | 
					import java.util.Random;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -7,8 +7,7 @@ import org.bukkit.util.noise.SimplexOctaveGenerator;
 | 
				
			|||||||
import ca.recrown.islandsurvivalcraft.pathfinding.CoordinateValidatable;
 | 
					import ca.recrown.islandsurvivalcraft.pathfinding.CoordinateValidatable;
 | 
				
			||||||
import ca.recrown.islandsurvivalcraft.pathfinding.DepthFirstSearch;
 | 
					import ca.recrown.islandsurvivalcraft.pathfinding.DepthFirstSearch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class IslandLocationGenerator implements CoordinateValidatable {
 | 
					public class IslandLocationMapper implements CoordinateValidatable {
 | 
				
			||||||
    private Random random;
 | 
					 | 
				
			||||||
    private SimplexOctaveGenerator noiseGenerator;
 | 
					    private SimplexOctaveGenerator noiseGenerator;
 | 
				
			||||||
    private final int noiseOctaves = 8;
 | 
					    private final int noiseOctaves = 8;
 | 
				
			||||||
    private final int islandGenerationPercent = 47;
 | 
					    private final int islandGenerationPercent = 47;
 | 
				
			||||||
@@ -22,17 +21,11 @@ public class IslandLocationGenerator implements CoordinateValidatable {
 | 
				
			|||||||
    private int shallowDepth;
 | 
					    private int shallowDepth;
 | 
				
			||||||
    private final DepthFirstSearch dfs;
 | 
					    private final DepthFirstSearch dfs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public IslandLocationGenerator() {
 | 
					    public IslandLocationMapper(Random random, int seaLevel, int shallowDepth) {
 | 
				
			||||||
        dfs = new DepthFirstSearch(this);
 | 
					        dfs = new DepthFirstSearch(this);
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    public void updateParameters(Random random, int seaLevel, int shallowDepth) {
 | 
					 | 
				
			||||||
        this.seaLevel = seaLevel;
 | 
					        this.seaLevel = seaLevel;
 | 
				
			||||||
        this.shallowDepth = shallowDepth;
 | 
					        this.shallowDepth = shallowDepth;
 | 
				
			||||||
        if (!random.equals(this.random)) {
 | 
					 | 
				
			||||||
            this.random = random;
 | 
					 | 
				
			||||||
        this.noiseGenerator = new SimplexOctaveGenerator(random, noiseOctaves);
 | 
					        this.noiseGenerator = new SimplexOctaveGenerator(random, noiseOctaves);
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this.seaLevel = seaLevel;
 | 
					        this.seaLevel = seaLevel;
 | 
				
			||||||
        this.shallowDepth = shallowDepth;
 | 
					        this.shallowDepth = shallowDepth;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					package ca.recrown.islandsurvivalcraft.world;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Random;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					import org.bukkit.generator.ChunkGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.generation.IslandBiomeGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class IslandSurvivalCraftChunkGenerator extends ChunkGenerator {
 | 
				
			||||||
 | 
					    private final IslandWorldGeneratorAlternator alternator;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public IslandSurvivalCraftChunkGenerator(IslandBiomeGenerator biomeGenerator) {
 | 
				
			||||||
 | 
					        alternator = new IslandWorldGeneratorAlternator(biomeGenerator);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public ChunkData generateChunkData(World world, Random random, int chunkX, int chunkZ, BiomeGrid biome) {
 | 
				
			||||||
 | 
					        IslandWorldGenerator worldGenerator = alternator.getIslandChunkGeneratorSystemForWorld(world, random);
 | 
				
			||||||
 | 
					        ChunkData chunk = createChunkData(world);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (int localX = 0; localX < 16; localX++) {
 | 
				
			||||||
 | 
					            for (int localZ = 0; localZ < 16; localZ++) {
 | 
				
			||||||
 | 
					                worldGenerator.GenerateChunk(chunkX, chunkZ, localX, localZ, chunk, biome);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return chunk;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					package ca.recrown.islandsurvivalcraft.world;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Random;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.Material;
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					import org.bukkit.generator.ChunkGenerator.BiomeGrid;
 | 
				
			||||||
 | 
					import org.bukkit.generator.ChunkGenerator.ChunkData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.generation.BedrockGenerator;
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.generation.IslandBiomeGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A world generator.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class IslandWorldGenerator {
 | 
				
			||||||
 | 
					    private final int maxHeight;
 | 
				
			||||||
 | 
					    private final BedrockGenerator bedrockGenerator;
 | 
				
			||||||
 | 
					    private final BiomeSelector biomeSelector;
 | 
				
			||||||
 | 
					    private final IslandBiomeGenerator biomeGenerator;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public final World world;
 | 
				
			||||||
 | 
					    public final IslandLocationMapper islandMapGenerator;
 | 
				
			||||||
 | 
					    public final Random random;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public IslandWorldGenerator(World world, IslandBiomeGenerator generator, Random random) {
 | 
				
			||||||
 | 
					        this.world = world;
 | 
				
			||||||
 | 
					        this.maxHeight = world.getMaxHeight();
 | 
				
			||||||
 | 
					        this.random = random;
 | 
				
			||||||
 | 
					        this.biomeSelector = new BiomeSelector(random);
 | 
				
			||||||
 | 
					        this.bedrockGenerator = new BedrockGenerator(random);
 | 
				
			||||||
 | 
					        this.islandMapGenerator = new IslandLocationMapper(random, world.getSeaLevel(), 4);
 | 
				
			||||||
 | 
					        this.biomeGenerator = generator;
 | 
				
			||||||
 | 
					        biomeSelector.initialize();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void GenerateChunk(int chunkX, int chunkZ, int localX, int localZ, ChunkData chunk, BiomeGrid biomeGrid) {
 | 
				
			||||||
 | 
					        int worldX = 16 * chunkX + localX;
 | 
				
			||||||
 | 
					        int worldZ = 16 * chunkZ + localZ;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        //Sets the biome.
 | 
				
			||||||
 | 
					        biomeGenerator.GenerateBiome(chunkX, chunkZ, localX, localZ, biomeGrid);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        //Sets the bedrock.
 | 
				
			||||||
 | 
					        int bedrockHeight = bedrockGenerator.getBedrockHeight(worldX, worldZ);
 | 
				
			||||||
 | 
					        chunk.setRegion(localX, 0, localZ, localX, bedrockHeight, localZ, Material.BEDROCK);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package ca.recrown.islandsurvivalcraft.world;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Random;
 | 
				
			||||||
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.generation.IslandBiomeGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Alternates the data used on a per world basis.
 | 
				
			||||||
 | 
					 * Uses IslandWorldGenerator as the container for each world.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class IslandWorldGeneratorAlternator {
 | 
				
			||||||
 | 
					    private HashMap<UUID, IslandWorldGenerator> chunkGenerator;
 | 
				
			||||||
 | 
					    private IslandBiomeGenerator islandBiomeGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public IslandWorldGeneratorAlternator(IslandBiomeGenerator biomeGenerator) {
 | 
				
			||||||
 | 
					        chunkGenerator = new HashMap<>();
 | 
				
			||||||
 | 
					        this.islandBiomeGenerator = biomeGenerator;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public IslandWorldGenerator getIslandChunkGeneratorSystemForWorld(World world, Random random) {
 | 
				
			||||||
 | 
					        if (!chunkGenerator.containsKey(world.getUID())) {
 | 
				
			||||||
 | 
					            chunkGenerator.put(world.getUID(), new IslandWorldGenerator(world, islandBiomeGenerator.getInstance(), random));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return chunkGenerator.get(world.getUID());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					package ca.recrown.islandsurvivalcraft.world.generation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Random;
 | 
					import java.util.Random;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,8 +10,7 @@ public class BedrockGenerator {
 | 
				
			|||||||
    private final int maxBedrockHeight = 5;
 | 
					    private final int maxBedrockHeight = 5;
 | 
				
			||||||
    private final int minBedrockHeight = 1;
 | 
					    private final int minBedrockHeight = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setRandom(Random random) {
 | 
					    public BedrockGenerator(Random random) {
 | 
				
			||||||
        if (random.equals(this.random)) return;
 | 
					 | 
				
			||||||
        this.random = random;
 | 
					        this.random = random;
 | 
				
			||||||
        noiseGenerator = new SimplexOctaveGenerator(random, 8);
 | 
					        noiseGenerator = new SimplexOctaveGenerator(random, 8);
 | 
				
			||||||
        noiseGenerator.setScale(0.1D);
 | 
					        noiseGenerator.setScale(0.1D);
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					package ca.recrown.islandsurvivalcraft.world.generation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
import org.bukkit.block.Biome;
 | 
					import org.bukkit.block.Biome;
 | 
				
			||||||
@@ -6,9 +6,12 @@ import org.bukkit.generator.ChunkGenerator.BiomeGrid;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import ca.recrown.islandsurvivalcraft.pathfinding.CoordinateTargetValidatable;
 | 
					import ca.recrown.islandsurvivalcraft.pathfinding.CoordinateTargetValidatable;
 | 
				
			||||||
import ca.recrown.islandsurvivalcraft.pathfinding.DepthFirstSearch;
 | 
					import ca.recrown.islandsurvivalcraft.pathfinding.DepthFirstSearch;
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.BiomeSelector;
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.IslandLocationMapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class BiomePerIslandGenerator implements IslandBiomeGenerator, CoordinateTargetValidatable {
 | 
					public class BiomePerIslandGenerator implements IslandBiomeGenerator, CoordinateTargetValidatable {
 | 
				
			||||||
    private IslandLocationGenerator islandLocator;
 | 
					    private boolean initialized;
 | 
				
			||||||
 | 
					    private IslandLocationMapper islandLocator;
 | 
				
			||||||
    private BiomeSelector biomeSelector;
 | 
					    private BiomeSelector biomeSelector;
 | 
				
			||||||
    private TemperatureMapGenerator temperatureMapGenerator;
 | 
					    private TemperatureMapGenerator temperatureMapGenerator;
 | 
				
			||||||
    private int buildHeight;
 | 
					    private int buildHeight;
 | 
				
			||||||
@@ -18,20 +21,20 @@ public class BiomePerIslandGenerator implements IslandBiomeGenerator, Coordinate
 | 
				
			|||||||
    private Biome shoreBiome;
 | 
					    private Biome shoreBiome;
 | 
				
			||||||
    private float temperature;
 | 
					    private float temperature;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private BiomeGrid currentBiomeGrid;
 | 
				
			||||||
 | 
					    private int currentChunkX, currentChunkZ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public BiomePerIslandGenerator() {
 | 
					    public BiomePerIslandGenerator() {
 | 
				
			||||||
        this.temperatureMapGenerator = new TemperatureMapGenerator();
 | 
					        this.temperatureMapGenerator = new TemperatureMapGenerator();
 | 
				
			||||||
        dfs = new DepthFirstSearch(islandLocator);
 | 
					        dfs = new DepthFirstSearch(islandLocator);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void initialize(IslandLocationGenerator mapGenerator, BiomeSelector biomeSelector) {
 | 
					    public void initialize(World world, IslandLocationMapper mapGenerator, BiomeSelector biomeSelector) {
 | 
				
			||||||
 | 
					        if (initialized) throw new IllegalStateException("Biome generator already initialized.");
 | 
				
			||||||
 | 
					        initialized = true;
 | 
				
			||||||
        this.islandLocator = mapGenerator;
 | 
					        this.islandLocator = mapGenerator;
 | 
				
			||||||
        this.biomeSelector = biomeSelector;
 | 
					        this.biomeSelector = biomeSelector;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void setWorld(World world) {
 | 
					 | 
				
			||||||
        if (world.equals(this.world)) return;
 | 
					 | 
				
			||||||
        this.world = world;
 | 
					        this.world = world;
 | 
				
			||||||
        this.temperatureMapGenerator.setSeed(world.getSeed());
 | 
					        this.temperatureMapGenerator.setSeed(world.getSeed());
 | 
				
			||||||
        this.buildHeight = world.getMaxHeight();
 | 
					        this.buildHeight = world.getMaxHeight();
 | 
				
			||||||
@@ -49,29 +52,44 @@ public class BiomePerIslandGenerator implements IslandBiomeGenerator, Coordinate
 | 
				
			|||||||
            if (mainBiome != null && shoreBiome != null) {
 | 
					            if (mainBiome != null && shoreBiome != null) {
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (x/16 == currentChunkX && y/16 == currentChunkZ) {
 | 
				
			||||||
 | 
					            int localX = x - (currentChunkX * 16);
 | 
				
			||||||
 | 
					            int localZ = y - (currentChunkZ * 16);
 | 
				
			||||||
 | 
					            Biome foundBiome = currentBiomeGrid.getBiome(localX, 0, localZ);
 | 
				
			||||||
 | 
					            if (islandLocator.isShore(x, y)) {
 | 
				
			||||||
 | 
					                shoreBiome = foundBiome;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                mainBiome = foundBiome;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (mainBiome != null && shoreBiome != null) {
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void GenerateBiome(int chunkX, int chunkZ, int localX, int localZ, BiomeGrid biome) {
 | 
					    public void GenerateBiome(int chunkX, int chunkZ, int localX, int localZ, BiomeGrid biomeGrid) {
 | 
				
			||||||
        int worldX = chunkX * 16 + localX;
 | 
					        int worldX = chunkX * 16 + localX;
 | 
				
			||||||
        int worldZ = chunkZ * 16 + localZ;
 | 
					        int worldZ = chunkZ * 16 + localZ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (islandLocator.isIsland(worldX, worldZ)) {
 | 
					        if (islandLocator.isIsland(worldX, worldZ)) {
 | 
				
			||||||
            if (mainBiome == null && shoreBiome == null) {
 | 
					            if (mainBiome == null && shoreBiome == null) {
 | 
				
			||||||
 | 
					                this.currentBiomeGrid = biomeGrid;
 | 
				
			||||||
 | 
					                this.currentChunkX = chunkX;
 | 
				
			||||||
 | 
					                this.currentChunkZ = chunkZ;
 | 
				
			||||||
                if (!dfs.findTarget(this)) {
 | 
					                if (!dfs.findTarget(this)) {
 | 
				
			||||||
                    temperature = temperatureMapGenerator.getTemperature(worldX, worldZ);
 | 
					                    temperature = temperatureMapGenerator.getTemperature(worldX, worldZ);
 | 
				
			||||||
                    mainBiome = biomeSelector.getLandBiome(temperature);
 | 
					                    mainBiome = biomeSelector.getLandBiome(temperature);
 | 
				
			||||||
                    shoreBiome = biomeSelector.getShoreBiome(mainBiome, temperature);
 | 
					                    shoreBiome = biomeSelector.getShoreBiome(mainBiome, temperature);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            mainBiome = null;
 | 
					            mainBiome = null;
 | 
				
			||||||
            shoreBiome = null;
 | 
					            shoreBiome = null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for (int y = 0; y < buildHeight; y++) {
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        Biome designatedBiome = mainBiome;
 | 
					        Biome designatedBiome = mainBiome;
 | 
				
			||||||
        if (mainBiome == null) {
 | 
					        if (mainBiome == null) {
 | 
				
			||||||
            designatedBiome = Biome.OCEAN;
 | 
					            designatedBiome = Biome.OCEAN;
 | 
				
			||||||
@@ -79,7 +97,13 @@ public class BiomePerIslandGenerator implements IslandBiomeGenerator, Coordinate
 | 
				
			|||||||
                designatedBiome = shoreBiome;
 | 
					                designatedBiome = shoreBiome;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            biome.setBiome(localX, y, localZ, designatedBiome);
 | 
					        for (int y = 0; y < buildHeight; y++) {
 | 
				
			||||||
 | 
					            biomeGrid.setBiome(localX, y, localZ, designatedBiome);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public IslandBiomeGenerator getInstance() {
 | 
				
			||||||
 | 
					        return new BiomePerIslandGenerator();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					package ca.recrown.islandsurvivalcraft.world.generation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					import org.bukkit.block.Biome;
 | 
				
			||||||
 | 
					import org.bukkit.generator.ChunkGenerator.BiomeGrid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.BiomeSelector;
 | 
				
			||||||
 | 
					import ca.recrown.islandsurvivalcraft.world.IslandLocationMapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface IslandBiomeGenerator {
 | 
				
			||||||
 | 
					    public void initialize(World world, IslandLocationMapper mapGenerator, BiomeSelector biome);
 | 
				
			||||||
 | 
					    public void GenerateBiome(int chunkX, int chunkZ, int localX, int localZ, BiomeGrid biomeGrid);
 | 
				
			||||||
 | 
					    public IslandBiomeGenerator getInstance();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					package ca.recrown.islandsurvivalcraft.world.generation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Random;
 | 
					import java.util.Random;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					package ca.recrown.islandsurvivalcraft.world.shapers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class IslandShaper {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.World;
 | 
					 | 
				
			||||||
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public interface IslandBiomeGenerator {
 | 
					 | 
				
			||||||
    public void initialize(IslandLocationGenerator mapGenerator, BiomeSelector biome);
 | 
					 | 
				
			||||||
    public void setWorld(World world);
 | 
					 | 
				
			||||||
    public void GenerateBiome(int chunkX, int chunkZ, int localX, int localZ, BiomeGrid biome);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,50 +0,0 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.Random;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.Material;
 | 
					 | 
				
			||||||
import org.bukkit.World;
 | 
					 | 
				
			||||||
import org.bukkit.generator.ChunkGenerator;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class IslandSurvivalCraftWorldGenerator extends ChunkGenerator {
 | 
					 | 
				
			||||||
    private final BedrockGenerator bedrockGenerator;
 | 
					 | 
				
			||||||
    private final BiomeSelector biomeSelector;
 | 
					 | 
				
			||||||
    private final IslandBiomeGenerator biomeGenerator;
 | 
					 | 
				
			||||||
    private final IslandLocationGenerator islandMapGenerator;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public IslandSurvivalCraftWorldGenerator(IslandBiomeGenerator generator) {
 | 
					 | 
				
			||||||
        this.biomeSelector = new BiomeSelector();
 | 
					 | 
				
			||||||
        this.bedrockGenerator = new BedrockGenerator();
 | 
					 | 
				
			||||||
        this.islandMapGenerator = new IslandLocationGenerator();
 | 
					 | 
				
			||||||
        this.biomeGenerator = generator;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    public void initialize() {
 | 
					 | 
				
			||||||
        biomeSelector.initialize();
 | 
					 | 
				
			||||||
        biomeGenerator.initialize(islandMapGenerator, biomeSelector);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome) {
 | 
					 | 
				
			||||||
        bedrockGenerator.setRandom(random);
 | 
					 | 
				
			||||||
        biomeSelector.setRandom(random);
 | 
					 | 
				
			||||||
        biomeGenerator.setWorld(world);
 | 
					 | 
				
			||||||
        islandMapGenerator.updateParameters(random, world.getSeaLevel(), 4);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ChunkData chunk = createChunkData(world);
 | 
					 | 
				
			||||||
        for (int localX = 0; localX < 16; localX++) {
 | 
					 | 
				
			||||||
            for (int localZ = 0; localZ < 16; localZ++) {
 | 
					 | 
				
			||||||
                int worldX = 16*x + localX;
 | 
					 | 
				
			||||||
                int worldZ = 16*z + localZ;
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                //generate bedrock layer
 | 
					 | 
				
			||||||
                int bedrockHeight = bedrockGenerator.getBedrockHeight(worldX, worldZ);
 | 
					 | 
				
			||||||
                chunk.setBlock(localX, bedrockHeight, localZ, Material.BEDROCK);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                //Set biomes
 | 
					 | 
				
			||||||
                biomeGenerator.GenerateBiome(x, z, localX, localZ, biome);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return chunk;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package ca.recrown.islandsurvivalcraft.worldgeneration;
 | 
					package ca.recrown.islandsurvivalcraft.world;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,8 +18,7 @@ public class BiomeSelectorTest {
 | 
				
			|||||||
    @BeforeAll
 | 
					    @BeforeAll
 | 
				
			||||||
    public void setUp() {
 | 
					    public void setUp() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        biomeSelector = new BiomeSelector();
 | 
					        biomeSelector = new BiomeSelector(new Random());
 | 
				
			||||||
        biomeSelector.setRandom(new Random());
 | 
					 | 
				
			||||||
        biomeSelector.initialize();
 | 
					        biomeSelector.initialize();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user