From 9609db9f9b1b6586742026e2e3da80618987b163 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 4 Dec 2021 12:00:31 +0300 Subject: [PATCH] Ceiling rules --- src/main/java/ru/bclib/BCLib.java | 3 ++- .../ru/bclib/api/biomes/SurfaceRuleBuilder.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/bclib/BCLib.java b/src/main/java/ru/bclib/BCLib.java index efaa5042..d5f34722 100644 --- a/src/main/java/ru/bclib/BCLib.java +++ b/src/main/java/ru/bclib/BCLib.java @@ -63,7 +63,8 @@ public class BCLib implements ModInitializer { .filler(Blocks.STONE.defaultBlockState()) .subsurface(Blocks.DIRT.defaultBlockState(), 3) .surface(Blocks.GRASS_BLOCK.defaultBlockState()) - .ceil(Blocks.DEEPSLATE.defaultBlockState()) + .aboveCeil(Blocks.DEEPSLATE.defaultBlockState(), 4) + .ceil(Blocks.BASALT.defaultBlockState()) .build(); BiomeAPI.addSurfaceRule(Biomes.END_HIGHLANDS.location(), rule); } diff --git a/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java b/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java index 2f75f94e..66f0edef 100644 --- a/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java @@ -104,6 +104,22 @@ public class SurfaceRuleBuilder { return this; } + /** + * Set biome ceiling material with specified {@link BlockState} and height. Example - sandstone in the Overworld deserts. + * @param state {@link BlockState} for the subterrain layer. + * @param height block layer height. + * @return same {@link SurfaceRuleBuilder} instance. + */ + public SurfaceRuleBuilder aboveCeil(BlockState state, int height) { + entryInstance = getFromCache("above_ceil_" + height + "_" + state.toString(), () -> { + RuleSource rule = SurfaceRules.state(state); + rule = SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(height, false, false, CaveSurface.CEILING), rule); + return new SurfaceRuleEntry(2, rule); + }); + rules.add(entryInstance); + return this; + } + /** * Allows to add custom rule. * @param priority rule priority, lower values = higher priority (rule will be applied before others).