diff --git a/src/main/java/ru/bclib/world/features/BCLFeature.java b/src/main/java/ru/bclib/world/features/BCLFeature.java index b3fa29a9..8d41c94e 100644 --- a/src/main/java/ru/bclib/world/features/BCLFeature.java +++ b/src/main/java/ru/bclib/world/features/BCLFeature.java @@ -4,7 +4,7 @@ import net.minecraft.core.Registry; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; 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.VerticalAnchor; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; @@ -15,58 +15,80 @@ import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguratio import net.minecraft.world.level.levelgen.placement.ChanceDecoratorConfiguration; import net.minecraft.world.level.levelgen.placement.FeatureDecorator; import net.minecraft.world.level.levelgen.structure.templatesystem.BlockMatchTest; -import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; -import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; -import ru.bclib.api.TagAPI; public class BCLFeature { - private static final RuleTest ANY_TERRAIN = new TagMatchTest(TagAPI.BLOCK_GEN_TERRAIN); private ConfiguredFeature featureConfigured; - private GenerationStep.Decoration featureStep; + private Decoration featureStep; private Feature feature; - public BCLFeature(Feature feature, ConfiguredFeature configuredFeature, GenerationStep.Decoration featureStep) { + public BCLFeature(Feature feature, ConfiguredFeature configuredFeature, Decoration featureStep) { this.featureConfigured = configuredFeature; this.featureStep = featureStep; this.feature = feature; } - public BCLFeature(ResourceLocation id, Feature feature, GenerationStep.Decoration featureStep, ConfiguredFeature configuredFeature) { + public BCLFeature(ResourceLocation id, Feature feature, Decoration featureStep, ConfiguredFeature configuredFeature) { this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, configuredFeature); this.feature = Registry.register(Registry.FEATURE, id, feature); this.featureStep = featureStep; } + /** + * Get raw feature. + * @return {@link Feature}. + */ + public Feature getFeature() { + return feature; + } + + /** + * Get configured feature. + * @return {@link ConfiguredFeature}. + */ + public ConfiguredFeature getFeatureConfigured() { + return featureConfigured; + } + + /** + * Get feature decoration step. + * @return {@link Decoration}. + */ + public Decoration getFeatureStep() { + return featureStep; + } + + /** + * Will create a basic plant feature. + * @param id {@link ResourceLocation} feature ID. + * @param feature {@link Feature} with {@link NoneFeatureConfiguration} config. + * @param density iterations per chunk. + * @return new BCLFeature instance. + */ public static BCLFeature makeVegetationFeature(ResourceLocation id, Feature feature, int density) { ConfiguredFeature configured = feature .configured(FeatureConfiguration.NONE) .decorated(BCLDecorators.HEIGHTMAP_SQUARE) .countRandom(density); - return new BCLFeature(id, feature, GenerationStep.Decoration.VEGETAL_DECORATION, configured); + return new BCLFeature(id, feature, Decoration.VEGETAL_DECORATION, configured); } - public static BCLFeature makeRawGenFeature(ResourceLocation id, Feature feature, int chance) { - ConfiguredFeature configured = feature - .configured(FeatureConfiguration.NONE) - .decorated(FeatureDecorator.CHANCE.configured(new ChanceDecoratorConfiguration(chance))); - return new BCLFeature(id, feature, GenerationStep.Decoration.RAW_GENERATION, configured); - } - - @Deprecated - public static BCLFeature makeLakeFeature(ResourceLocation id, Feature feature, int chance) { - ConfiguredFeature configured = feature - .configured(FeatureConfiguration.NONE) - .decorated(FeatureDecorator.LAVA_LAKE.configured(new ChanceDecoratorConfiguration(chance))); - return new BCLFeature(id, feature, GenerationStep.Decoration.LAKES, configured); - } - - public static BCLFeature makeOreFeature(ResourceLocation id, Block blockOre, Block hostBlock, int veins, int veinSize, int offset, int minY, int maxY) { + /** + * Will create a basic ore feature. + * @param id {@link ResourceLocation} feature ID. + * @param blockOre {@link Decoration} feature step. + * @param hostBlock {@link Block} to generate feature in. + * @param veins iterations per chunk. + * @param veinSize size of ore vein. + * @param minY minimum height. + * @param maxY maximum height. + * @return new BCLFeature instance. + */ + public static BCLFeature makeOreFeature(ResourceLocation id, Block blockOre, Block hostBlock, int veins, int veinSize, int minY, int maxY) { OreConfiguration featureConfig = new OreConfiguration( new BlockMatchTest(hostBlock), blockOre.defaultBlockState(), veinSize ); - //OreConfiguration config = new OreConfiguration(ANY_TERRAIN, blockOre.defaultBlockState(), 33); ConfiguredFeature oreFeature = Feature.ORE .configured(featureConfig) .rangeUniform( @@ -78,56 +100,81 @@ public class BCLFeature { return new BCLFeature( Feature.ORE, Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, oreFeature), - GenerationStep.Decoration.UNDERGROUND_ORES + Decoration.UNDERGROUND_ORES ); } /** * Will create feature which will be generated once in each chunk. * @param id {@link ResourceLocation} feature ID. - * @param step {@link GenerationStep.Decoration} feature step. + * @param step {@link Decoration} feature step. * @param feature {@link Feature} with {@link NoneFeatureConfiguration} config. * @return new BCLFeature instance. */ - public static BCLFeature makeChunkFeature(ResourceLocation id, GenerationStep.Decoration step, Feature feature) { + public static BCLFeature makeChunkFeature(ResourceLocation id, Decoration step, Feature feature) { ConfiguredFeature configured = feature .configured(FeatureConfiguration.NONE) .decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(1))); return new BCLFeature(id, feature, step, configured); } - @Deprecated(forRemoval = true) - public static BCLFeature makeChunkFeature(ResourceLocation id, Feature feature) { - return makeChunkFeature(id, GenerationStep.Decoration.LOCAL_MODIFICATIONS, feature); - } - - public static BCLFeature makeChansedFeature(ResourceLocation id, Feature feature, int chance) { + /** + * Will create feature with chanced decoration, chance for feature to generate per chunk is 1 / chance. + * @param id {@link ResourceLocation} feature ID. + * @param step {@link Decoration} feature step. + * @param feature {@link Feature} with {@link NoneFeatureConfiguration} config. + * @param chance chance for feature to be generated in. + * @return new BCLFeature instance. + */ + public static BCLFeature makeChancedFeature(ResourceLocation id, Decoration step, Feature feature, int chance) { ConfiguredFeature configured = feature .configured(FeatureConfiguration.NONE) .decorated(FeatureDecorator.CHANCE.configured(new ChanceDecoratorConfiguration(chance))); - return new BCLFeature(id, feature, GenerationStep.Decoration.SURFACE_STRUCTURES, configured); + return new BCLFeature(id, feature, step, configured); } + /** + * Will create feature with specified generation iterations per chunk. + * @param id {@link ResourceLocation} feature ID. + * @param step {@link Decoration} feature step. + * @param feature {@link Feature} with {@link NoneFeatureConfiguration} config. + * @param count iterations steps. + * @return new BCLFeature instance. + */ + public static BCLFeature makeCountFeature(ResourceLocation id, Decoration step, Feature feature, int count) { + ConfiguredFeature configured = feature + .configured(FeatureConfiguration.NONE) + .decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count))); + return new BCLFeature(id, feature, step, configured); + } + + @Deprecated(forRemoval = true) + public static BCLFeature makeOreFeature(ResourceLocation id, Block blockOre, Block hostBlock, int veins, int veinSize, int offset, int minY, int maxY) { + return makeOreFeature(id, blockOre, hostBlock, veins, veinSize, minY, maxY); + } + + @Deprecated(forRemoval = true) + public static BCLFeature makeRawGenFeature(ResourceLocation id, Feature feature, int chance) { + return makeChancedFeature(id, Decoration.RAW_GENERATION, feature, chance); + } + + @Deprecated(forRemoval = true) + public static BCLFeature makeChunkFeature(ResourceLocation id, Feature feature) { + return makeChunkFeature(id, Decoration.LOCAL_MODIFICATIONS, feature); + } + + @Deprecated(forRemoval = true) + public static BCLFeature makeChansedFeature(ResourceLocation id, Feature feature, int chance) { + return makeChancedFeature(id, Decoration.SURFACE_STRUCTURES, feature, chance); + } + + @Deprecated(forRemoval = true) public static BCLFeature makeCountRawFeature(ResourceLocation id, Feature feature, int chance) { - ConfiguredFeature configured = feature.configured(FeatureConfiguration.NONE) - .decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(chance))); - return new BCLFeature(id, feature, GenerationStep.Decoration.RAW_GENERATION, configured); + return makeCountFeature(id, Decoration.RAW_GENERATION, feature, chance); } public static BCLFeature makeFeatureConfigured(ResourceLocation id, Feature feature) { ConfiguredFeature configured = feature.configured(FeatureConfiguration.NONE); - return new BCLFeature(id, feature, GenerationStep.Decoration.RAW_GENERATION, configured); - } - - public Feature getFeature() { - return feature; - } - - public ConfiguredFeature getFeatureConfigured() { - return featureConfigured; - } - - public GenerationStep.Decoration getFeatureStep() { - return featureStep; + return new BCLFeature(id, feature, Decoration.RAW_GENERATION, configured); } }