minecraft-src/net/minecraft/world/level/levelgen/carver/CanyonCarverConfiguration.java
2025-07-04 01:41:11 +03:00

78 lines
3.8 KiB
Java

package net.minecraft.world.level.levelgen.carver;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.HolderSet;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.util.valueproviders.FloatProvider;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.levelgen.VerticalAnchor;
import net.minecraft.world.level.levelgen.heightproviders.HeightProvider;
public class CanyonCarverConfiguration extends CarverConfiguration {
public static final Codec<CanyonCarverConfiguration> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
CarverConfiguration.CODEC.forGetter(canyonCarverConfiguration -> canyonCarverConfiguration),
FloatProvider.CODEC.fieldOf("vertical_rotation").forGetter(canyonCarverConfiguration -> canyonCarverConfiguration.verticalRotation),
CanyonCarverConfiguration.CanyonShapeConfiguration.CODEC.fieldOf("shape").forGetter(canyonCarverConfiguration -> canyonCarverConfiguration.shape)
)
.apply(instance, CanyonCarverConfiguration::new)
);
public final FloatProvider verticalRotation;
public final CanyonCarverConfiguration.CanyonShapeConfiguration shape;
public CanyonCarverConfiguration(
float probability,
HeightProvider y,
FloatProvider yScale,
VerticalAnchor lavaLevel,
CarverDebugSettings debugSettings,
HolderSet<Block> replaceable,
FloatProvider verticalRotation,
CanyonCarverConfiguration.CanyonShapeConfiguration shape
) {
super(probability, y, yScale, lavaLevel, debugSettings, replaceable);
this.verticalRotation = verticalRotation;
this.shape = shape;
}
public CanyonCarverConfiguration(CarverConfiguration config, FloatProvider verticalRotation, CanyonCarverConfiguration.CanyonShapeConfiguration shape) {
this(config.probability, config.y, config.yScale, config.lavaLevel, config.debugSettings, config.replaceable, verticalRotation, shape);
}
public static class CanyonShapeConfiguration {
public static final Codec<CanyonCarverConfiguration.CanyonShapeConfiguration> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
FloatProvider.CODEC.fieldOf("distance_factor").forGetter(canyonShapeConfiguration -> canyonShapeConfiguration.distanceFactor),
FloatProvider.CODEC.fieldOf("thickness").forGetter(canyonShapeConfiguration -> canyonShapeConfiguration.thickness),
ExtraCodecs.NON_NEGATIVE_INT.fieldOf("width_smoothness").forGetter(canyonShapeConfiguration -> canyonShapeConfiguration.widthSmoothness),
FloatProvider.CODEC.fieldOf("horizontal_radius_factor").forGetter(canyonShapeConfiguration -> canyonShapeConfiguration.horizontalRadiusFactor),
Codec.FLOAT.fieldOf("vertical_radius_default_factor").forGetter(canyonShapeConfiguration -> canyonShapeConfiguration.verticalRadiusDefaultFactor),
Codec.FLOAT.fieldOf("vertical_radius_center_factor").forGetter(canyonShapeConfiguration -> canyonShapeConfiguration.verticalRadiusCenterFactor)
)
.apply(instance, CanyonCarverConfiguration.CanyonShapeConfiguration::new)
);
public final FloatProvider distanceFactor;
public final FloatProvider thickness;
public final int widthSmoothness;
public final FloatProvider horizontalRadiusFactor;
public final float verticalRadiusDefaultFactor;
public final float verticalRadiusCenterFactor;
public CanyonShapeConfiguration(
FloatProvider distanceFactor,
FloatProvider thickness,
int widthSmoothness,
FloatProvider horizontalRadiusFactor,
float verticalRadiusDefaultFactor,
float verticalRadiusCenterFactor
) {
this.widthSmoothness = widthSmoothness;
this.horizontalRadiusFactor = horizontalRadiusFactor;
this.verticalRadiusDefaultFactor = verticalRadiusDefaultFactor;
this.verticalRadiusCenterFactor = verticalRadiusCenterFactor;
this.distanceFactor = distanceFactor;
this.thickness = thickness;
}
}
}