diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index eb53ef05..cbbf40c5 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -1,5 +1,10 @@ package ru.bclib.api.biomes; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Consumer; + import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.data.BuiltinRegistries; @@ -34,11 +39,6 @@ import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.structures.BCLStructureFeature; -import java.util.ArrayList; -import java.util.List; -import java.util.function.BiFunction; -import java.util.function.Consumer; - public class BCLBiomeBuilder { private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder(); private static final SurfaceRules.ConditionSource SURFACE_NOISE = SurfaceRules.noiseCondition(Noises.SOUL_SAND_LAYER, -0.012); @@ -53,6 +53,7 @@ public class BCLBiomeBuilder { private BiomeCategory category; private float temperature; private float fogDensity; + private float genChance; private float downfall; /** @@ -71,6 +72,7 @@ public class BCLBiomeBuilder { INSTANCE.temperature = 1.0F; INSTANCE.fogDensity = 1.0F; INSTANCE.downfall = 1.0F; + INSTANCE.genChance = 1.0F; return INSTANCE; } @@ -195,6 +197,16 @@ public class BCLBiomeBuilder { this.fogDensity = density; return this; } + + /** + * Sets generation chance for this biome. + * @param genChance + * @return same {@link BCLBiomeBuilder}. + */ + public BCLBiomeBuilder genChance(float genChance) { + this.genChance = genChance; + return this; + } /** * Sets water color for the biome. Color is in ARGB int format. @@ -510,6 +522,18 @@ public class BCLBiomeBuilder { .subsurface(subterrainBlock.defaultBlockState(), depth) .build()); } + + 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 + )); + } /** * Adds surface rule to this biome. @@ -541,7 +565,7 @@ public class BCLBiomeBuilder { .temperature(temperature) .downfall(downfall); - if (spawnSettings != null) { + if (getSpawns() != null) { builder.mobSpawnSettings(spawnSettings.build()); } @@ -557,6 +581,7 @@ public class BCLBiomeBuilder { res.attachStructures(structures); res.setSurface(surfaceRule); res.setFogDensity(fogDensity); + res.setGenChance(genChance); return res; } diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiome.java b/src/main/java/ru/bclib/world/biomes/BCLBiome.java index 8e823b63..33ea53e7 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiome.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiome.java @@ -1,7 +1,15 @@ package ru.bclib.world.biomes; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.function.Consumer; + +import org.jetbrains.annotations.Nullable; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceKey; @@ -10,15 +18,9 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; -import org.jetbrains.annotations.Nullable; import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.WeightedList; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.function.Consumer; - public class BCLBiome { private final List structures = Lists.newArrayList(); private final WeightedList subbiomes = new WeightedList<>();