package net.minecraft.world.level.levelgen.feature.configurations; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import java.util.List; import java.util.stream.Stream; import net.minecraft.core.Holder; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.WeightedPlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature; public class RandomFeatureConfiguration implements FeatureConfiguration { public static final Codec CODEC = RecordCodecBuilder.create( instance -> instance.apply2( RandomFeatureConfiguration::new, WeightedPlacedFeature.CODEC.listOf().fieldOf("features").forGetter(randomFeatureConfiguration -> randomFeatureConfiguration.features), PlacedFeature.CODEC.fieldOf("default").forGetter(randomFeatureConfiguration -> randomFeatureConfiguration.defaultFeature) ) ); public final List features; public final Holder defaultFeature; public RandomFeatureConfiguration(List features, Holder defaultFeature) { this.features = features; this.defaultFeature = defaultFeature; } @Override public Stream> getFeatures() { return Stream.concat( this.features.stream().flatMap(weightedPlacedFeature -> weightedPlacedFeature.feature.value().getFeatures()), this.defaultFeature.value().getFeatures() ); } }