Biome Builder structure features

This commit is contained in:
paulevsGitch 2021-12-02 12:45:35 +03:00
parent 1c3696fd02
commit 97473004a8
2 changed files with 58 additions and 6 deletions

View file

@ -1,6 +1,9 @@
package ru.bclib.api.biomes;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.minecraft.core.Registry;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.data.worldgen.BiomeDefaultFeatures;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.Music;
@ -20,6 +23,7 @@ import net.minecraft.world.level.biome.BiomeSpecialEffects;
import net.minecraft.world.level.biome.MobSpawnSettings;
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import ru.bclib.util.ColorUtil;
import ru.bclib.world.biomes.BCLBiome;
@ -441,11 +445,28 @@ public class BCLBiomeBuilder {
return feature(feature.getDecoration(), feature.getPlacedFeature());
}
// TODO Make feature registration
public BCLBiomeBuilder structure(BCLStructureFeature structure) {
/**
* Adds new structure feature into thr biome.
* @param structure {@link ConfiguredStructureFeature} to add.
* @return same {@link BCLBiomeBuilder} instance.
*/
public BCLBiomeBuilder structure(ConfiguredStructureFeature<?, ?> structure) {
BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE
.getResourceKey(structure)
.ifPresent(key -> BiomeModifications.addStructure(ctx -> ctx.getBiomeKey().location().equals(biomeID), key));
return this;
}
/**
* Adds new structure feature into thr biome. Will add building biome into the structure list.
* @param structure {@link BCLStructureFeature} to add.
* @return same {@link BCLBiomeBuilder} instance.
*/
public BCLBiomeBuilder structure(BCLStructureFeature structure) {
structure.addInternalBiome(biomeID);
return structure(structure.getFeatureConfigured());
}
/**
* Finalize biome creation.
* @return created {@link BCLBiome} instance.

View file

@ -1,5 +1,6 @@
package ru.bclib.world.structures;
import com.google.common.collect.Lists;
import net.fabricmc.fabric.api.structure.v1.FabricStructureBuilder;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceLocation;
@ -8,6 +9,7 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
import net.minecraft.world.level.levelgen.feature.StructureFeature;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import java.util.List;
import java.util.Random;
public class BCLStructureFeature {
@ -15,13 +17,17 @@ public class BCLStructureFeature {
private final StructureFeature<NoneFeatureConfiguration> structure;
private final ConfiguredStructureFeature<?, ?> featureConfigured;
private final GenerationStep.Decoration featureStep;
private final List<ResourceLocation> biomes = Lists.newArrayList();
private final ResourceLocation id;
public BCLStructureFeature(ResourceLocation id, StructureFeature<NoneFeatureConfiguration> structure, GenerationStep.Decoration step, int spacing, int separation) {
this.id = id;
this.featureStep = step;
this.structure = FabricStructureBuilder.create(id, structure)
.step(step)
.defaultConfig(spacing, separation, RANDOM.nextInt(8192))
.register();
this.structure = FabricStructureBuilder
.create(id, structure)
.step(step)
.defaultConfig(spacing, separation, RANDOM.nextInt(8192))
.register();
this.featureConfigured = this.structure.configured(NoneFeatureConfiguration.NONE);
BuiltinRegistries.register(BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE, id, this.featureConfigured);
//TODO: 1.18 check if structures are added correctly
@ -39,4 +45,29 @@ public class BCLStructureFeature {
public GenerationStep.Decoration getFeatureStep() {
return featureStep;
}
/**
* Get the structure ID;
* @return {@link ResourceLocation} id.
*/
public ResourceLocation getID() {
return id;
}
/**
* Adds biome into internal biome list, used in {@link ru.bclib.api.biomes.BCLBiomeBuilder}.
* @param biome {@link ResourceLocation} biome ID.
*/
public void addInternalBiome(ResourceLocation biome) {
biomes.add(biome);
}
/**
* Get biome list where this structure feature can generate. Only represents biomes made with {@link ru.bclib.api.biomes.BCLBiomeBuilder} and only
* if structure was added during building process. Modification of this list will not affect structure generation.
* @return {@link List} of biome {@link ResourceLocation}.
*/
public List<ResourceLocation> getBiomes() {
return biomes;
}
}