diff --git a/src/main/java/ca/recrown/islandsurvivalcraft/world/BiomeMap.java b/src/main/java/ca/recrown/islandsurvivalcraft/world/BiomeMap.java index 10a6525..66be54b 100644 --- a/src/main/java/ca/recrown/islandsurvivalcraft/world/BiomeMap.java +++ b/src/main/java/ca/recrown/islandsurvivalcraft/world/BiomeMap.java @@ -9,8 +9,151 @@ import org.bukkit.block.Biome; import org.bukkit.util.noise.SimplexOctaveGenerator; import ca.recrown.islandsurvivalcraft.utilities.GeneralUtilities; +import ca.recrown.islandsurvivalcraft.world.TemperatureMap.TemperatureRegion; public class BiomeMap { + public enum MainBiomes { + SNOWY_TUNDRA(0.0f, TemperatureRegion.SNOWY, ShoreBiomes.SNOWY_BEACH), + ICE_SPIKES(0.0f, TemperatureRegion.SNOWY, ShoreBiomes.SNOWY_BEACH), + SNOWY_TAIGA(-0.5f, TemperatureRegion.SNOWY, ShoreBiomes.SNOWY_BEACH), + SNOWY_TAIGA_MOUNTAINS(-0.5f, TemperatureRegion.SNOWY, ShoreBiomes.SNOWY_BEACH), + MOUNTAINS(0.2f, TemperatureRegion.COLD, ShoreBiomes.STONE_SHORE), + GRAVELLY_MOUNTAINS(0.2f, TemperatureRegion.COLD), + WOODED_MOUNTAINS(0.2f, TemperatureRegion.COLD, ShoreBiomes.STONE_SHORE), + MODIFIED_GRAVELLY_MOUNTAINS(0.2f, TemperatureRegion.COLD), + TAIGA(0.25f, TemperatureRegion.COLD), + TAIGA_MOUNTAINS(0.25f, TemperatureRegion.COLD), + GIANT_TREE_TAIGA(0.3f, TemperatureRegion.COLD), + GIANT_SPRUCE_TAIGA(0.25f, TemperatureRegion.COLD), + PLAINS(0.8f, TemperatureRegion.LUSH), + SUNFLOWER_PLAINS(0.8f, TemperatureRegion.LUSH), + FOREST(0.7f, TemperatureRegion.LUSH), + FLOWER_FOREST(0.7f, TemperatureRegion.LUSH), + BIRCH_FOREST(0.6f, TemperatureRegion.LUSH), + TALL_BIRCH_FOREST(0.7f, TemperatureRegion.LUSH), + DARK_FOREST(0.7f, TemperatureRegion.LUSH), + DARK_FOREST_HILLS(0.7f, TemperatureRegion.LUSH), + SWAMP(0.8f, TemperatureRegion.LUSH), + SWAMP_HILLS(0.8f, TemperatureRegion.LUSH), + JUNGLE(0.95f, TemperatureRegion.LUSH), + MODIFIED_JUNGLE(0.95f, TemperatureRegion.LUSH), + JUNGLE_EDGE(0.95f, TemperatureRegion.LUSH), + MODIFIED_JUNGLE_EDGE(0.95f, TemperatureRegion.LUSH), + BAMBOO_JUNGLE(0.95f, TemperatureRegion.LUSH), + MUSHROOM_FIELDS(0.9f, TemperatureRegion.LUSH, ShoreBiomes.MUSHROOM_SHORE), + DESERT(2.0f, TemperatureRegion.WARM), + SAVANNA(1.2f, TemperatureRegion.WARM), + SHATTERED_SAVANNA(1.1f, TemperatureRegion.WARM), + BADLANDS(2.0f, TemperatureRegion.WARM), + ERODED_BADLANDS(2.0f, TemperatureRegion.WARM), + WOODED_BADLANDS_PLATEAU(2.0f, TemperatureRegion.WARM), + MODIFIED_WOODED_BADLANDS_PLATEAU(2.0f, TemperatureRegion.WARM), + BADLANDS_PLATEAU(2.0f, TemperatureRegion.WARM), + SAVANNA_PLATEAU(1.0f, TemperatureRegion.WARM), + MODIFIED_BADLANDS_PLATEAU(2.0f, TemperatureRegion.WARM), + SHATTERED_SAVANNA_PLATEAU(1.0f, TemperatureRegion.WARM), + ; + private final float temperature; + private final TemperatureRegion temperatureRegion; + private final ShoreBiomes[] preferredShores; + + private MainBiomes(float temperature, TemperatureRegion temperatureRegion, ShoreBiomes... preferredShore) { + this.temperature = temperature; + this.preferredShores = preferredShore; + this.temperatureRegion = temperatureRegion; + } + + /** + * @return the temperature + */ + public float getTemperature() { + return temperature; + } + + /** + * @return the preferredShore + */ + public ShoreBiomes[] getPreferredShores() { + return preferredShores; + } + + /** + * @return the temperatureRegion + */ + public TemperatureRegion getTemperatureRegion() { + return temperatureRegion; + } + } + + public enum OceanBiomes { + WARM_OCEAN(0.5f, TemperatureRegion.WARM), + LUKEWARM_OCEAN(0.5f, TemperatureRegion.LUSH), + OCEAN(0.5f, TemperatureRegion.LUSH), + COLD_OCEAN(0.5f, TemperatureRegion.COLD), + FROZEN_OCEAN(0.0f, TemperatureRegion.SNOWY); + + private final float temperature; + private final TemperatureRegion temperatureRegion; + + private OceanBiomes(float temperature, TemperatureRegion temperatureRegion) { + this.temperature = temperature; + this.temperatureRegion = temperatureRegion; + } + + /** + * @return the temperature + */ + public float getTemperature() { + return temperature; + } + + /** + * @return the temperatureRegion + */ + public TemperatureRegion getTemperatureRegion() { + return temperatureRegion; + } + } + + public enum ShoreBiomes { + BEACH(0.8f, TemperatureRegion.LUSH), + SNOWY_BEACH(0.05f, TemperatureRegion.SNOWY), + MUSHROOM_SHORE(0.05f, TemperatureRegion.LUSH, true), + STONE_SHORE(0.2f, TemperatureRegion.COLD); + + private final float temperature; + private final TemperatureRegion temperatureRegion; + private final boolean special; + private ShoreBiomes(float temperature, TemperatureRegion associatedTemperatureRegion, boolean special) { + this.temperature = temperature; + this.temperatureRegion = associatedTemperatureRegion; + this.special = special; + } + private ShoreBiomes(float temperature, TemperatureRegion associatedTemperatureRegion) { + this(temperature, associatedTemperatureRegion, false); + } + + /** + * @return the temperature + */ + public float getTemperature() { + return temperature; + } + + /** + * @return the temperatureRegion + */ + public TemperatureRegion getTemperatureRegion() { + return temperatureRegion; + } + + /** + * @return the special + */ + public boolean isSpecial() { + return special; + } + } private final SimplexOctaveGenerator noise; private final HashMap landBiomeTemperatures = new HashMap<>(); private volatile HashMap> temperaturesForLand = new HashMap<>(); diff --git a/src/main/java/ca/recrown/islandsurvivalcraft/world/TemperatureMap.java b/src/main/java/ca/recrown/islandsurvivalcraft/world/TemperatureMap.java index f63a67b..915b79a 100644 --- a/src/main/java/ca/recrown/islandsurvivalcraft/world/TemperatureMap.java +++ b/src/main/java/ca/recrown/islandsurvivalcraft/world/TemperatureMap.java @@ -8,6 +8,12 @@ import ca.recrown.islandsurvivalcraft.utilities.caching.Cache; import ca.recrown.islandsurvivalcraft.utilities.datatypes.Point2; public class TemperatureMap { + public enum TemperatureRegion { + SNOWY, + COLD, + LUSH, + WARM, + } private final Cache temperatureCache; private final double frequency = 0.5D; private final double amplitude = 0.5D;