From 6d279852f0095e672cbb81cdc66799d1dffdb573 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 23 Dec 2021 05:54:31 +0300 Subject: [PATCH] Terrain height setter --- .../ru/bclib/api/biomes/BCLBiomeBuilder.java | 29 ++++++++++++++----- .../java/ru/bclib/world/biomes/BCLBiome.java | 10 +++++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index 3b393cef..d917ae42 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -63,6 +63,7 @@ public class BCLBiomeBuilder { private float fogDensity; private float genChance; private float downfall; + private float height; /** * Starts new biome building process. @@ -81,6 +82,7 @@ public class BCLBiomeBuilder { INSTANCE.fogDensity = 1.0F; INSTANCE.downfall = 1.0F; INSTANCE.genChance = 1.0F; + INSTANCE.height = 0.1F; return INSTANCE; } @@ -566,6 +568,16 @@ public class BCLBiomeBuilder { return this; } + /** + * Set terrain height for the biome. Can be used in custom generators, doesn't change vanilla biome distribution or generation. + * @param height a relative float terrain height value. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder terrainHeight(float height) { + this.height = height; + return this; + } + /** * Finalize biome creation. * @return created {@link BCLBiome} instance. @@ -590,26 +602,27 @@ public class BCLBiomeBuilder { builder.specialEffects(getEffects().build()); Map>> defferedFeatures = new HashMap<>(); - BiomeGenerationSettingsAccessor acc = (BiomeGenerationSettingsAccessor)getGeneration().build(); - if (acc!=null){ + BiomeGenerationSettingsAccessor acc = BiomeGenerationSettingsAccessor.class.cast(getGeneration().build()); + if (acc != null) { builder.generationSettings(new BiomeGenerationSettings.Builder().build()); var decorations = acc.bclib_getFeatures(); - - for (Decoration d : Decoration.values()){ + for (Decoration d : Decoration.values()) { int i = d.ordinal(); - - if (i>=0 && i= 0 && i < decorations.size()) { var features = decorations.get(i); defferedFeatures.put(d, features.stream().collect(Collectors.toList())); - } else { + } + else { defferedFeatures.put(d, new ArrayList<>(0)); } } - } else { + } + else { builder.generationSettings(getGeneration().build()); } final T res = biomeConstructor.apply(biomeID, builder.build()); + res.setTerrainHeight(height); res.attachStructures(structures); res.setSurface(surfaceRule); res.setFogDensity(fogDensity); diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiome.java b/src/main/java/ru/bclib/world/biomes/BCLBiome.java index 0060f398..ef059fe6 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiome.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiome.java @@ -289,6 +289,16 @@ public class BCLBiome { return this; } + /** + * Setter for terrain height, can be used in custom terrain generator. + * @param terrainHeight a relative float terrain height value. + * @return same {@link BCLBiome}. + */ + public BCLBiome setTerrainHeight(float terrainHeight) { + this.terrainHeight = terrainHeight; + return this; + } + /** * Getter for terrain height, can be used in custom terrain generator. * @return terrain height.