diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index d3671fc2..def48179 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -29,8 +29,6 @@ import net.minecraft.world.level.levelgen.SurfaceRules; import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import ru.bclib.mixin.common.BiomeGenerationSettingsAccessor; -import ru.bclib.util.CollectionsUtil; import ru.bclib.util.ColorUtil; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; @@ -40,7 +38,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; import java.util.function.Consumer; -import java.util.function.Supplier; public class BCLBiomeBuilder { private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder(); @@ -572,18 +569,7 @@ public class BCLBiomeBuilder { builder.mobSpawnSettings(getSpawns().build()); builder.specialEffects(getEffects().build()); - - BiomeGenerationSettings settings = getGeneration().build(); - BiomeGenerationSettingsAccessor accessor = BiomeGenerationSettingsAccessor.class.cast(settings); - List>> featureLists = CollectionsUtil.getMutable(accessor.bclib_getFeatures()); - final int size = featureLists.size(); - for (int i = 0; i < size; i++) { - List> list = CollectionsUtil.getMutable(featureLists.get(i)); - BiomeAPI.sortFeatures(list); - featureLists.add(i, list); - } - accessor.bclib_setFeatures(featureLists); - builder.generationSettings(settings); + builder.generationSettings(getGeneration().build()); final T res = biomeConstructor.apply(biomeID, builder.build()); res.attachStructures(structures); diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 5d0aebb5..fc128dc9 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -24,6 +24,7 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeGenerationSettings; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.Climate; @@ -479,6 +480,7 @@ public class BiomeAPI { List> modifications = MODIFICATIONS.get(level.dimension()); if (modifications == null) { + biomes.forEach(biome -> sortBiomeFeatures(biome)); return; } @@ -497,9 +499,23 @@ public class BiomeAPI { consumer.accept(biomeID, biome); }); } + sortBiomeFeatures(biome); }); } + private static void sortBiomeFeatures(Biome biome) { + BiomeGenerationSettings settings = biome.getGenerationSettings(); + BiomeGenerationSettingsAccessor accessor = BiomeGenerationSettingsAccessor.class.cast(settings); + List>> featureList = CollectionsUtil.getMutable(accessor.bclib_getFeatures()); + final int size = featureList.size(); + for (int i = 0; i < size; i++) { + List> features = CollectionsUtil.getMutable(featureList.get(i)); + sortFeatures(features); + featureList.add(i, features); + } + accessor.bclib_setFeatures(featureList); + } + private static List getRuleSources(Set biomes, ResourceKey dimensionType) { Set biomeIDs = biomes.stream().map(biome -> getBiomeID(biome)).collect(Collectors.toSet()); List rules = Lists.newArrayList(); @@ -615,17 +631,6 @@ public class BiomeAPI { }); } - private static void changeStructureStarts(Consumer, Multimap, ResourceKey>>> modifier) { - Registry chunkGenSettingsRegistry = BuiltinRegistries.NOISE_GENERATOR_SETTINGS; - - for (Map.Entry, NoiseGeneratorSettings> entry : chunkGenSettingsRegistry.entrySet()) { - Map, Multimap, ResourceKey>> structureMap = getMutableStructureConfig(entry.getValue()); - - modifier.accept(structureMap); - setMutableStructureConfig(entry.getValue(), structureMap); - } - } - /** * Adds new structure feature to existing biome. * @param biomeKey {@link ResourceKey} for the {@link Biome} to add structure feature in. @@ -714,7 +719,18 @@ public class BiomeAPI { return Blocks.AIR.defaultBlockState(); } - public static void sortFeatures(List> features) { + private static void changeStructureStarts(Consumer, Multimap, ResourceKey>>> modifier) { + Registry chunkGenSettingsRegistry = BuiltinRegistries.NOISE_GENERATOR_SETTINGS; + + for (Map.Entry, NoiseGeneratorSettings> entry : chunkGenSettingsRegistry.entrySet()) { + Map, Multimap, ResourceKey>> structureMap = getMutableStructureConfig(entry.getValue()); + + modifier.accept(structureMap); + setMutableStructureConfig(entry.getValue(), structureMap); + } + } + + private static void sortFeatures(List> features) { initFeatureOrder(); features.forEach(provider -> { PlacedFeature feature = provider.get();