From 9ae9c318bd9e1c1e4f7622c56406be8352200426 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 21 Dec 2021 20:49:33 +0300 Subject: [PATCH] Builder count modifiers --- .../bclib/api/features/BCLFeatureBuilder.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/java/ru/bclib/api/features/BCLFeatureBuilder.java b/src/main/java/ru/bclib/api/features/BCLFeatureBuilder.java index 9a7c16d1..cdd54944 100644 --- a/src/main/java/ru/bclib/api/features/BCLFeatureBuilder.java +++ b/src/main/java/ru/bclib/api/features/BCLFeatureBuilder.java @@ -4,8 +4,10 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.placement.CountPlacement; import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import net.minecraft.world.level.levelgen.placement.RarityFilter; import ru.bclib.world.features.BCLFeature; import java.util.ArrayList; @@ -54,6 +56,43 @@ public class BCLFeatureBuilder { return this; } + /** + * Generate feature in certain iterations (per chunk). + * @param count how many times feature will be generated in chunk. + * @return same {@link BCLFeatureBuilder} instance. + */ + public BCLFeatureBuilder count(int count) { + return modifier(CountPlacement.of(count)); + } + + /** + * Generate feature in certain iterations (per chunk), count can be different in different chunks. + * @param average how many times feature will be generated in chunk (in average). + * @return same {@link BCLFeatureBuilder} instance. + */ + public BCLFeatureBuilder countAverage(int average) { + return modifier(RarityFilter.onAverageOnceEvery(average)); + } + + /** + * Generate feature in certain iterations (per chunk), count can be different in different chunks. + * Feature will be generated on all layers (example - Nether plants). + * @param average how many times feature will be generated in chunk (in average). + * @return same {@link BCLFeatureBuilder} instance. + */ + public BCLFeatureBuilder countLayers(int average) { + return modifier(RarityFilter.onAverageOnceEvery(average)); + } + + /** + * Will place feature once in certain amount of chunks (in average). + * @param chunks amount of chunks. + * @return same {@link BCLFeatureBuilder} instance. + */ + public BCLFeatureBuilder oncePerChunks(int chunks) { + return modifier(RarityFilter.onAverageOnceEvery(chunks)); + } + /** * Builds a new {@link BCLFeature} instance. Features will be registered during this process. * @param configuration any {@link FeatureConfiguration} for provided {@link Feature}.