package net.minecraft.world.level.levelgen.carver; import com.mojang.serialization.Codec; import java.util.function.Function; import net.minecraft.SharedConstants; 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.ChunkPos; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.CarvingMask; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.levelgen.Aquifer; public record ConfiguredWorldCarver(WorldCarver worldCarver, WC config) { public static final Codec> DIRECT_CODEC = BuiltInRegistries.CARVER .byNameCodec() .dispatch(configuredWorldCarver -> configuredWorldCarver.worldCarver, WorldCarver::configuredCodec); public static final Codec>> CODEC = RegistryFileCodec.create(Registries.CONFIGURED_CARVER, DIRECT_CODEC); public static final Codec>> LIST_CODEC = RegistryCodecs.homogeneousList(Registries.CONFIGURED_CARVER, DIRECT_CODEC); public boolean isStartChunk(RandomSource random) { return this.worldCarver.isStartChunk(this.config, random); } public boolean carve( CarvingContext context, ChunkAccess chunk, Function> biomeAccessor, RandomSource random, Aquifer aquifer, ChunkPos chunkPos, CarvingMask carvingMask ) { return SharedConstants.debugVoidTerrain(chunk.getPos()) ? false : this.worldCarver.carve(context, this.config, chunk, biomeAccessor, random, aquifer, chunkPos, carvingMask); } }