Feature lists

This commit is contained in:
paulevsGitch 2021-12-07 20:47:33 +03:00
parent 2191733f37
commit 178bf6d270

View file

@ -1,6 +1,7 @@
package ru.bclib.api.biomes;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;
@ -34,6 +35,7 @@ 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 org.jetbrains.annotations.NotNull;
import ru.bclib.util.ColorUtil;
import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.features.BCLFeature;
@ -44,6 +46,8 @@ public class BCLBiomeBuilder {
private static final SurfaceRules.ConditionSource SURFACE_NOISE = SurfaceRules.noiseCondition(Noises.SOUL_SAND_LAYER, -0.012);
private List<ConfiguredStructureFeature> structures = new ArrayList<>(16);
private List<FeatureInfo> features = new ArrayList<>(32);
private BiomeGenerationSettings.Builder generationSettings;
private BiomeSpecialEffects.Builder effectsBuilder;
private MobSpawnSettings.Builder spawnSettings;
@ -69,6 +73,7 @@ public class BCLBiomeBuilder {
INSTANCE.effectsBuilder = null;
INSTANCE.spawnSettings = null;
INSTANCE.structures.clear();
INSTANCE.features.clear();
INSTANCE.temperature = 1.0F;
INSTANCE.fogDensity = 1.0F;
INSTANCE.downfall = 1.0F;
@ -428,7 +433,8 @@ public class BCLBiomeBuilder {
* @return same {@link BCLBiomeBuilder} instance.
*/
public BCLBiomeBuilder feature(Decoration decoration, PlacedFeature feature) {
getGeneration().addFeature(decoration, feature);
//getGeneration().addFeature(decoration, feature);
features.add(new FeatureInfo(feature, decoration));
return this;
}
@ -436,6 +442,7 @@ public class BCLBiomeBuilder {
* Adds vanilla Mushrooms.
* @return same {@link BCLBiomeBuilder} instance.
*/
@Deprecated
public BCLBiomeBuilder defaultMushrooms() {
return feature(BiomeDefaultFeatures::addDefaultMushrooms);
}
@ -444,6 +451,7 @@ public class BCLBiomeBuilder {
* Adds vanilla Nether Ores.
* @return same {@link BCLBiomeBuilder} instance.
*/
@Deprecated
public BCLBiomeBuilder netherDefaultOres() {
return feature(BiomeDefaultFeatures::addNetherDefaultOres);
}
@ -453,6 +461,7 @@ public class BCLBiomeBuilder {
* @param featureAdd {@link Consumer} with {@link BiomeGenerationSettings.Builder}.
* @return same {@link BCLBiomeBuilder} instance.
*/
@Deprecated
public BCLBiomeBuilder feature(Consumer<BiomeGenerationSettings.Builder> featureAdd) {
featureAdd.accept(getGeneration());
return this;
@ -524,15 +533,17 @@ public class BCLBiomeBuilder {
}
public BCLBiomeBuilder chancedSurface(SurfaceRules.RuleSource surfaceBlockA, SurfaceRules.RuleSource surfaceBlockB, SurfaceRules.RuleSource underBlock){
return surface(SurfaceRules.sequence(
SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR,
SurfaceRules.sequence(
SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SURFACE, -0.1818, 0.1818), surfaceBlockA),
surfaceBlockB
)
),
underBlock
));
return surface(
SurfaceRules.sequence(
SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR,
SurfaceRules.sequence(
SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SURFACE, -0.1818, 0.1818), surfaceBlockA),
surfaceBlockB
)
),
underBlock
)
);
}
/**
@ -559,13 +570,18 @@ public class BCLBiomeBuilder {
* @return created {@link BCLBiome} instance.
*/
public <T extends BCLBiome> T build(BiFunction<ResourceLocation, Biome, T> biomeConstructor) {
if (!features.isEmpty()) {
Collections.sort(features);
features.forEach(info -> getGeneration().addFeature(info.step, info.feature));
}
BiomeBuilder builder = new BiomeBuilder()
.precipitation(precipitation)
.biomeCategory(category)
.temperature(temperature)
.downfall(downfall);
if (getSpawns() != null) {
if (spawnSettings != null) {
builder.mobSpawnSettings(spawnSettings.build());
}
@ -621,4 +637,19 @@ public class BCLBiomeBuilder {
}
return generationSettings;
}
private class FeatureInfo implements Comparable<FeatureInfo> {
final PlacedFeature feature;
final Decoration step;
FeatureInfo(PlacedFeature feature, Decoration step) {
this.feature = feature;
this.step = step;
}
@Override
public int compareTo(FeatureInfo info) {
return 0;
}
}
}