Feature sorting changes
This commit is contained in:
parent
f817981e91
commit
77cc26d548
2 changed files with 29 additions and 27 deletions
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue