BCLFeature enhancements and javadocs

This commit is contained in:
paulevsGitch 2021-11-29 18:48:04 +03:00
parent 2708eb989a
commit c734f83c13

View file

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