package net.minecraft.world.level.levelgen.feature; import com.mojang.serialization.Codec; import java.util.stream.Stream; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; import net.minecraft.core.RegistryCodecs; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.RegistryFileCodec; import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; public record ConfiguredFeature>(F feature, FC config) { public static final Codec> DIRECT_CODEC = BuiltInRegistries.FEATURE.byNameCodec().dispatch(f -> f.feature, Feature::configuredCodec); public static final Codec>> CODEC = RegistryFileCodec.create(Registries.CONFIGURED_FEATURE, DIRECT_CODEC); public static final Codec>> LIST_CODEC = RegistryCodecs.homogeneousList(Registries.CONFIGURED_FEATURE, DIRECT_CODEC); public boolean place(final WorldGenLevel level, final ChunkGenerator chunkGenerator, final RandomSource random, final BlockPos origin) { return this.feature.place(this.config, level, chunkGenerator, random, origin); } public Stream>> getSubFeatures() { return this.config.getSubFeatures(); } public String toString() { return "Configured: " + this.feature + ": " + this.config; } }