From c7c11d0b4c147ed2d9f498355de5d400ba0820ab Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Wed, 1 Dec 2021 13:56:37 +0300 Subject: [PATCH] More biome builder functions (generation settings, music) --- .../ru/bclib/api/biomes/BCLBiomeBuilder.java | 66 +++++++++++++++++++ .../java/ru/bclib/api/biomes/BiomeAPI.java | 4 +- .../bclib/mixin/common/BoneMealItemMixin.java | 2 +- .../bclib/mixin/common/ServerLevelMixin.java | 2 +- .../ru/bclib/world/biomes/BCLBiomeDef.java | 2 +- .../ru/bclib/world/features/BCLFeature.java | 2 +- .../world/features/NBTStructureFeature.java | 2 +- 7 files changed, 73 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index 4b103ea9..f49e6935 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -8,19 +8,25 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.level.biome.AmbientAdditionsSettings; +import net.minecraft.world.level.biome.AmbientMoodSettings; import net.minecraft.world.level.biome.AmbientParticleSettings; import net.minecraft.world.level.biome.Biome.BiomeBuilder; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.biome.Biome.Precipitation; +import net.minecraft.world.level.biome.BiomeGenerationSettings; 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.placement.PlacedFeature; import ru.bclib.util.ColorUtil; import ru.bclib.world.biomes.BCLBiome; +import ru.bclib.world.features.BCLFeature; public class BCLBiomeBuilder { private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder(); + private BiomeGenerationSettings.Builder generationSettings; private BiomeSpecialEffects.Builder effectsBuilder; private MobSpawnSettings.Builder spawnSettings; private Precipitation precipitation; @@ -39,10 +45,12 @@ public class BCLBiomeBuilder { INSTANCE.biomeID = biomeID; INSTANCE.precipitation = Precipitation.NONE; INSTANCE.category = BiomeCategory.NONE; + INSTANCE.generationSettings = null; INSTANCE.effectsBuilder = null; INSTANCE.spawnSettings = null; INSTANCE.temperature = 1.0F; INSTANCE.fogDensity = 1.0F; + INSTANCE.downfall = 1.0F; return INSTANCE; } @@ -339,6 +347,28 @@ public class BCLBiomeBuilder { return this; } + /** + * Sets biome mood sound. Can be used for biome environment. + * @param mood {@link SoundEvent} to use as a mood. + * @param tickDelay delay between sound events in ticks. + * @param blockSearchExtent block search radius (for area available for sound). + * @param soundPositionOffset offset in sound. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder mood(SoundEvent mood, int tickDelay, int blockSearchExtent, float soundPositionOffset) { + getEffects().ambientMoodSound(new AmbientMoodSettings(mood, tickDelay, blockSearchExtent, soundPositionOffset)); + return this; + } + + /** + * Sets biome mood sound. Can be used for biome environment. + * @param mood {@link SoundEvent} to use as a mood. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder mood(SoundEvent mood) { + return mood(mood, 6000, 8, 2.0F); + } + /** * Sets biome additionsl ambient sounds. * @param additions {@link SoundEvent} to use. @@ -359,6 +389,26 @@ public class BCLBiomeBuilder { return additions(additions, 0.0111F); } + /** + * Adds new feature to the biome. + * @param decoration {@link Decoration} feature step. + * @param feature {@link PlacedFeature}. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder feature(Decoration decoration, PlacedFeature feature) { + getGeneration().addFeature(decoration, feature); + return this; + } + + /** + * Adds new feature to the biome. + * @param feature {@link BCLFeature}. + * @return same {@link BCLBiomeBuilder} instance. + */ + public BCLBiomeBuilder feature(BCLFeature feature) { + return feature(feature.getDecoration(), feature.getPlacedFeature()); + } + /** * Finalize biome creation. * @return created {@link BCLBiome} instance. @@ -378,6 +428,10 @@ public class BCLBiomeBuilder { builder.specialEffects(effectsBuilder.build()); } + if (generationSettings != null) { + builder.generationSettings(generationSettings.build()); + } + return new BCLBiome(biomeID, builder.build()).setFogDensity(fogDensity); } @@ -404,4 +458,16 @@ public class BCLBiomeBuilder { } return spawnSettings; } + + /** + * Get or create {@link BiomeGenerationSettings.Builder} for biome features and generation. + * For internal usage only. + * @return new or same {@link BiomeGenerationSettings.Builder} instance. + */ + private BiomeGenerationSettings.Builder getGeneration() { + if (generationSettings == null) { + generationSettings = new BiomeGenerationSettings.Builder(); + } + return generationSettings; + } } diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 60005087..1ef912f2 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -412,7 +412,7 @@ public class BiomeAPI { * */ public static void addBiomeFeature(Biome biome, BCLFeature feature) { - addBiomeFeature(biome, feature.getPlacedFeature(), feature.getFeatureStep()); + addBiomeFeature(biome, feature.getPlacedFeature(), feature.getDecoration()); } /** @@ -434,7 +434,7 @@ public class BiomeAPI { */ public static void addBiomeFeatures(Biome biome, BCLFeature... features) { for (BCLFeature feature: features) { - addBiomeFeature(biome, feature.getPlacedFeature(), feature.getFeatureStep()); + addBiomeFeature(biome, feature.getPlacedFeature(), feature.getDecoration()); } } diff --git a/src/main/java/ru/bclib/mixin/common/BoneMealItemMixin.java b/src/main/java/ru/bclib/mixin/common/BoneMealItemMixin.java index 78ad381b..1ad99193 100644 --- a/src/main/java/ru/bclib/mixin/common/BoneMealItemMixin.java +++ b/src/main/java/ru/bclib/mixin/common/BoneMealItemMixin.java @@ -15,8 +15,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.BonemealAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; diff --git a/src/main/java/ru/bclib/mixin/common/ServerLevelMixin.java b/src/main/java/ru/bclib/mixin/common/ServerLevelMixin.java index 60c82e64..d22aceec 100644 --- a/src/main/java/ru/bclib/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/bclib/mixin/common/ServerLevelMixin.java @@ -16,8 +16,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.LifeCycleAPI; +import ru.bclib.api.biomes.BiomeAPI; import java.util.List; import java.util.concurrent.Executor; diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java b/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java index a95b3e1b..69a57055 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java @@ -217,7 +217,7 @@ public class BCLBiomeDef { public BCLBiomeDef addFeature(BCLFeature feature) { FeatureInfo info = new FeatureInfo(); - info.featureStep = feature.getFeatureStep(); + info.featureStep = feature.getDecoration(); info.feature = feature.getPlacedFeature(); features.add(info); return this; diff --git a/src/main/java/ru/bclib/world/features/BCLFeature.java b/src/main/java/ru/bclib/world/features/BCLFeature.java index 0987c81a..9f82066b 100644 --- a/src/main/java/ru/bclib/world/features/BCLFeature.java +++ b/src/main/java/ru/bclib/world/features/BCLFeature.java @@ -58,7 +58,7 @@ public class BCLFeature { * Get feature decoration step. * @return {@link Decoration}. */ - public Decoration getFeatureStep() { + public Decoration getDecoration() { return featureStep; } /** diff --git a/src/main/java/ru/bclib/world/features/NBTStructureFeature.java b/src/main/java/ru/bclib/world/features/NBTStructureFeature.java index f8f7dabe..e0b44884 100644 --- a/src/main/java/ru/bclib/world/features/NBTStructureFeature.java +++ b/src/main/java/ru/bclib/world/features/NBTStructureFeature.java @@ -19,8 +19,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConf import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; -import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.api.TagAPI; +import ru.bclib.api.biomes.BiomeAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.world.processors.DestructionStructureProcessor;