From ae6c0e9aac3097b4e12b2479acb67421626332c3 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 3 Dec 2021 20:10:15 +0300 Subject: [PATCH] Surface builder for two blocks --- src/main/java/ru/bclib/BCLib.java | 17 ++++++++++++----- .../ru/bclib/api/biomes/BCLBiomeBuilder.java | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/bclib/BCLib.java b/src/main/java/ru/bclib/BCLib.java index 4478b912..5066dcd2 100644 --- a/src/main/java/ru/bclib/BCLib.java +++ b/src/main/java/ru/bclib/BCLib.java @@ -4,6 +4,8 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.Noises; +import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.TagAPI; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; @@ -40,11 +42,11 @@ public class BCLib implements ModInitializer { DataExchangeAPI.registerMod(MOD_ID); DataExchangeAPI.registerDescriptors(List.of( - HelloClient.DESCRIPTOR, - HelloServer.DESCRIPTOR, - RequestFiles.DESCRIPTOR, - SendFiles.DESCRIPTOR, - Chunker.DESCRIPTOR + HelloClient.DESCRIPTOR, + HelloServer.DESCRIPTOR, + RequestFiles.DESCRIPTOR, + SendFiles.DESCRIPTOR, + Chunker.DESCRIPTOR )); BCLibPatch.register(); @@ -62,4 +64,9 @@ public class BCLib implements ModInitializer { public static ResourceLocation makeID(String path) { return new ResourceLocation(MOD_ID, path); } + + private static SurfaceRules.ConditionSource surfaceNoiseAbove(double d) { + + return SurfaceRules.noiseCondition(Noises.SURFACE, d / 8.25, Double.MAX_VALUE); + } } diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index 2299d185..d0a28865 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -24,9 +24,11 @@ import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; +import net.minecraft.world.level.levelgen.Noises; 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.CaveSurface; import net.minecraft.world.level.levelgen.placement.PlacedFeature; import ru.bclib.util.ColorUtil; import ru.bclib.world.biomes.BCLBiome; @@ -40,6 +42,7 @@ 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); private List structures = new ArrayList<>(16); private BiomeGenerationSettings.Builder generationSettings; @@ -494,6 +497,21 @@ public class BCLBiomeBuilder { return surface(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.state(surfaceBlock.defaultBlockState()))); } + /** + * Adds blocks to the biome surface and below it (with specified depth). + * @param surfaceBlock {@link Block} that will cover biome. + * @param subterrainBlock {@link Block} below it with specified depth. + * @param depth thickness of bottom block layer. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder surface(Block surfaceBlock, Block subterrainBlock, int depth) { + SurfaceRules.RuleSource topRule = SurfaceRules.state(surfaceBlock.defaultBlockState()); + SurfaceRules.RuleSource subterrainRule = SurfaceRules.state(subterrainBlock.defaultBlockState()); + topRule = SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, topRule); + subterrainRule = SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(depth, false, false, CaveSurface.FLOOR), subterrainRule); + return surface(SurfaceRules.sequence(topRule, subterrainRule)); + } + /** * Adds surface rule to this biome. * @param surfaceRule {link SurfaceRules.RuleSource} surface rule.