package net.minecraft.world.level.levelgen.feature.configurations; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import java.util.stream.Stream; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; import net.minecraft.util.ExtraCodecs; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature; public record CompositeFeatureConfiguration(HolderSet features) implements FeatureConfiguration { public static final Codec CODEC = RecordCodecBuilder.create( i -> i.group(ExtraCodecs.nonEmptyHolderSet(PlacedFeature.LIST_CODEC).fieldOf("features").forGetter(CompositeFeatureConfiguration::features)) .apply(i, CompositeFeatureConfiguration::new) ); @Override public Stream>> getSubFeatures() { return this.features.stream().flatMap(f -> ((PlacedFeature)f.value()).getFeatures()); } }