From 178bf6d27033e415bf332c0b66602fd866365b4c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 7 Dec 2021 20:47:33 +0300 Subject: [PATCH] Feature lists --- .../ru/bclib/api/biomes/BCLBiomeBuilder.java | 53 +++++++++++++++---- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index cbbf40c5..b8d2a828 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -1,6 +1,7 @@ package ru.bclib.api.biomes; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.BiFunction; import java.util.function.Consumer; @@ -34,6 +35,7 @@ import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import org.jetbrains.annotations.NotNull; import ru.bclib.util.ColorUtil; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; @@ -44,6 +46,8 @@ public class BCLBiomeBuilder { private static final SurfaceRules.ConditionSource SURFACE_NOISE = SurfaceRules.noiseCondition(Noises.SOUL_SAND_LAYER, -0.012); private List structures = new ArrayList<>(16); + private List features = new ArrayList<>(32); + private BiomeGenerationSettings.Builder generationSettings; private BiomeSpecialEffects.Builder effectsBuilder; private MobSpawnSettings.Builder spawnSettings; @@ -69,6 +73,7 @@ public class BCLBiomeBuilder { INSTANCE.effectsBuilder = null; INSTANCE.spawnSettings = null; INSTANCE.structures.clear(); + INSTANCE.features.clear(); INSTANCE.temperature = 1.0F; INSTANCE.fogDensity = 1.0F; INSTANCE.downfall = 1.0F; @@ -428,7 +433,8 @@ public class BCLBiomeBuilder { * @return same {@link BCLBiomeBuilder} instance. */ public BCLBiomeBuilder feature(Decoration decoration, PlacedFeature feature) { - getGeneration().addFeature(decoration, feature); + //getGeneration().addFeature(decoration, feature); + features.add(new FeatureInfo(feature, decoration)); return this; } @@ -436,6 +442,7 @@ public class BCLBiomeBuilder { * Adds vanilla Mushrooms. * @return same {@link BCLBiomeBuilder} instance. */ + @Deprecated public BCLBiomeBuilder defaultMushrooms() { return feature(BiomeDefaultFeatures::addDefaultMushrooms); } @@ -444,6 +451,7 @@ public class BCLBiomeBuilder { * Adds vanilla Nether Ores. * @return same {@link BCLBiomeBuilder} instance. */ + @Deprecated public BCLBiomeBuilder netherDefaultOres() { return feature(BiomeDefaultFeatures::addNetherDefaultOres); } @@ -453,6 +461,7 @@ public class BCLBiomeBuilder { * @param featureAdd {@link Consumer} with {@link BiomeGenerationSettings.Builder}. * @return same {@link BCLBiomeBuilder} instance. */ + @Deprecated public BCLBiomeBuilder feature(Consumer featureAdd) { featureAdd.accept(getGeneration()); return this; @@ -524,15 +533,17 @@ public class BCLBiomeBuilder { } public BCLBiomeBuilder chancedSurface(SurfaceRules.RuleSource surfaceBlockA, SurfaceRules.RuleSource surfaceBlockB, SurfaceRules.RuleSource underBlock){ - return surface(SurfaceRules.sequence( - SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, - SurfaceRules.sequence( - SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SURFACE, -0.1818, 0.1818), surfaceBlockA), - surfaceBlockB - ) - ), - underBlock - )); + return surface( + SurfaceRules.sequence( + SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, + SurfaceRules.sequence( + SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SURFACE, -0.1818, 0.1818), surfaceBlockA), + surfaceBlockB + ) + ), + underBlock + ) + ); } /** @@ -559,13 +570,18 @@ public class BCLBiomeBuilder { * @return created {@link BCLBiome} instance. */ public T build(BiFunction biomeConstructor) { + if (!features.isEmpty()) { + Collections.sort(features); + features.forEach(info -> getGeneration().addFeature(info.step, info.feature)); + } + BiomeBuilder builder = new BiomeBuilder() .precipitation(precipitation) .biomeCategory(category) .temperature(temperature) .downfall(downfall); - if (getSpawns() != null) { + if (spawnSettings != null) { builder.mobSpawnSettings(spawnSettings.build()); } @@ -621,4 +637,19 @@ public class BCLBiomeBuilder { } return generationSettings; } + + private class FeatureInfo implements Comparable { + final PlacedFeature feature; + final Decoration step; + + FeatureInfo(PlacedFeature feature, Decoration step) { + this.feature = feature; + this.step = step; + } + + @Override + public int compareTo(FeatureInfo info) { + return 0; + } + } }