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.carver.ConfiguredWorldCarver;
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
import net.minecraft.world.level.levelgen.placement.PlacedFeature; 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.util.ColorUtil;
import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.BCLFeature;
@ -40,7 +38,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier;
public class BCLBiomeBuilder { public class BCLBiomeBuilder {
private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder(); private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder();
@ -572,18 +569,7 @@ public class BCLBiomeBuilder {
builder.mobSpawnSettings(getSpawns().build()); builder.mobSpawnSettings(getSpawns().build());
builder.specialEffects(getEffects().build()); builder.specialEffects(getEffects().build());
builder.generationSettings(getGeneration().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);
final T res = biomeConstructor.apply(biomeID, builder.build()); final T res = biomeConstructor.apply(biomeID, builder.build());
res.attachStructures(structures); 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.entity.MobCategory;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome; 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.BiomeSource;
import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.biome.Climate;
@ -479,6 +480,7 @@ public class BiomeAPI {
List<BiConsumer<ResourceLocation, Biome>> modifications = MODIFICATIONS.get(level.dimension()); List<BiConsumer<ResourceLocation, Biome>> modifications = MODIFICATIONS.get(level.dimension());
if (modifications == null) { if (modifications == null) {
biomes.forEach(biome -> sortBiomeFeatures(biome));
return; return;
} }
@ -497,9 +499,23 @@ public class BiomeAPI {
consumer.accept(biomeID, biome); 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) { private static List<SurfaceRules.RuleSource> getRuleSources(Set<Biome> biomes, ResourceKey<Level> dimensionType) {
Set<ResourceLocation> biomeIDs = biomes.stream().map(biome -> getBiomeID(biome)).collect(Collectors.toSet()); Set<ResourceLocation> biomeIDs = biomes.stream().map(biome -> getBiomeID(biome)).collect(Collectors.toSet());
List<SurfaceRules.RuleSource> rules = Lists.newArrayList(); 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. * Adds new structure feature to existing biome.
* @param biomeKey {@link ResourceKey} for the {@link Biome} to add structure feature in. * @param biomeKey {@link ResourceKey} for the {@link Biome} to add structure feature in.
@ -714,7 +719,18 @@ public class BiomeAPI {
return Blocks.AIR.defaultBlockState(); 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(); initFeatureOrder();
features.forEach(provider -> { features.forEach(provider -> {
PlacedFeature feature = provider.get(); PlacedFeature feature = provider.get();