Feature sorting changes

This commit is contained in:
paulevsGitch 2021-12-08 17:21:52 +03:00
parent f817981e91
commit 77cc26d548
2 changed files with 29 additions and 27 deletions

View file

@ -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<List<Supplier<PlacedFeature>>> featureLists = CollectionsUtil.getMutable(accessor.bclib_getFeatures());
final int size = featureLists.size();
for (int i = 0; i < size; i++) {
List<Supplier<PlacedFeature>> 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);

View file

@ -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<BiConsumer<ResourceLocation, Biome>> 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<List<Supplier<PlacedFeature>>> featureList = CollectionsUtil.getMutable(accessor.bclib_getFeatures());
final int size = featureList.size();
for (int i = 0; i < size; i++) {
List<Supplier<PlacedFeature>> features = CollectionsUtil.getMutable(featureList.get(i));
sortFeatures(features);
featureList.add(i, features);
}
accessor.bclib_setFeatures(featureList);
}
private static List<SurfaceRules.RuleSource> getRuleSources(Set<Biome> biomes, ResourceKey<Level> dimensionType) {
Set<ResourceLocation> biomeIDs = biomes.stream().map(biome -> getBiomeID(biome)).collect(Collectors.toSet());
List<SurfaceRules.RuleSource> rules = Lists.newArrayList();
@ -615,17 +631,6 @@ public class BiomeAPI {
});
}
private static void changeStructureStarts(Consumer<Map<StructureFeature<?>, Multimap<ConfiguredStructureFeature<?, ?>, ResourceKey<Biome>>>> modifier) {
Registry<NoiseGeneratorSettings> chunkGenSettingsRegistry = BuiltinRegistries.NOISE_GENERATOR_SETTINGS;
for (Map.Entry<ResourceKey<NoiseGeneratorSettings>, NoiseGeneratorSettings> entry : chunkGenSettingsRegistry.entrySet()) {
Map<StructureFeature<?>, Multimap<ConfiguredStructureFeature<?, ?>, ResourceKey<Biome>>> 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<Supplier<PlacedFeature>> features) {
private static void changeStructureStarts(Consumer<Map<StructureFeature<?>, Multimap<ConfiguredStructureFeature<?, ?>, ResourceKey<Biome>>>> modifier) {
Registry<NoiseGeneratorSettings> chunkGenSettingsRegistry = BuiltinRegistries.NOISE_GENERATOR_SETTINGS;
for (Map.Entry<ResourceKey<NoiseGeneratorSettings>, NoiseGeneratorSettings> entry : chunkGenSettingsRegistry.entrySet()) {
Map<StructureFeature<?>, Multimap<ConfiguredStructureFeature<?, ?>, ResourceKey<Biome>>> structureMap = getMutableStructureConfig(entry.getValue());
modifier.accept(structureMap);
setMutableStructureConfig(entry.getValue(), structureMap);
}
}
private static void sortFeatures(List<Supplier<PlacedFeature>> features) {
initFeatureOrder();
features.forEach(provider -> {
PlacedFeature feature = provider.get();