diff --git a/src/main/java/org/betterx/bclib/world/features/TemplateFeature.java b/src/main/java/org/betterx/bclib/world/features/TemplateFeature.java index 9824da2c..34bc01b8 100644 --- a/src/main/java/org/betterx/bclib/world/features/TemplateFeature.java +++ b/src/main/java/org/betterx/bclib/world/features/TemplateFeature.java @@ -21,13 +21,14 @@ public class TemplateFeature extends Feature BCLFeature createAndRegister(ResourceLocation location, - TemplateFeatureConfig configuration, - int onveEveryChunk) { + public static BCLFeature createAndRegisterRare(ResourceLocation location, + TemplateFeatureConfig configuration, + int onceEveryChunk) { + + return BCLFeatureBuilder .start(location, INSTANCE) .decoration(GenerationStep.Decoration.SURFACE_STRUCTURES) - .oncePerChunks(onveEveryChunk) .squarePlacement() .distanceToTopAndBottom10() .modifier(EnvironmentScanPlacement.scanningFor(Direction.DOWN, @@ -37,6 +38,22 @@ public class TemplateFeature extends Feature BCLFeature createAndRegister(ResourceLocation location, + TemplateFeatureConfig configuration, + int count) { + + + return BCLFeatureBuilder + .start(location, INSTANCE) + .decoration(GenerationStep.Decoration.SURFACE_STRUCTURES) + .count(count) + .squarePlacement() + .distanceToTopAndBottom10() + .onlyInBiome() .buildAndRegister(configuration); } diff --git a/src/main/java/org/betterx/bclib/world/structures/StructurePlacementType.java b/src/main/java/org/betterx/bclib/world/structures/StructurePlacementType.java index adb48ad7..33767cd2 100644 --- a/src/main/java/org/betterx/bclib/world/structures/StructurePlacementType.java +++ b/src/main/java/org/betterx/bclib/world/structures/StructurePlacementType.java @@ -5,7 +5,7 @@ import net.minecraft.util.StringRepresentable; import com.mojang.serialization.Codec; public enum StructurePlacementType implements StringRepresentable { - FLOOR, WALL, CEIL, LAVA, UNDER; + FLOOR, WALL, CEIL, LAVA, UNDER, FLOOR_FREE_ABOVE; public static final Codec CODEC = StringRepresentable.fromEnum(StructurePlacementType::values); diff --git a/src/main/java/org/betterx/bclib/world/structures/StructureWorldNBT.java b/src/main/java/org/betterx/bclib/world/structures/StructureWorldNBT.java index 7e50e2a5..b6010fe0 100644 --- a/src/main/java/org/betterx/bclib/world/structures/StructureWorldNBT.java +++ b/src/main/java/org/betterx/bclib/world/structures/StructureWorldNBT.java @@ -104,6 +104,8 @@ public class StructureWorldNBT extends StructureNBT { return canGenerateUnder(level, pos, rotation); else if (type == StructurePlacementType.CEIL) return canGenerateCeil(level, pos, rotation); + else if (type == StructurePlacementType.FLOOR_FREE_ABOVE) + return canGenerateFloorFreeAbove(level, pos, rotation); else return false; } @@ -117,6 +119,14 @@ public class StructureWorldNBT extends StructureNBT { return false; } + protected boolean canGenerateFloorFreeAbove(LevelAccessor world, BlockPos pos, Rotation rotation) { + if (containsBedrock(world, pos)) return false; + + return getAirFractionFoundation(world, pos, rotation) < 0.5 + && world.getBlockState(pos.above(2)).is(Blocks.AIR) + && world.getBlockState(pos.above(4)).is(Blocks.AIR); + } + protected boolean canGenerateFloor(LevelAccessor world, BlockPos pos, Rotation rotation) { if (containsBedrock(world, pos)) return false;