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

61 lines
2.6 KiB
Java

package net.minecraft.world.level.levelgen.feature.configurations;
import com.google.common.collect.ImmutableList;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.List;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest;
public class OreConfiguration implements FeatureConfiguration {
public static final Codec<OreConfiguration> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
Codec.list(OreConfiguration.TargetBlockState.CODEC).fieldOf("targets").forGetter(oreConfiguration -> oreConfiguration.targetStates),
Codec.intRange(0, 64).fieldOf("size").forGetter(oreConfiguration -> oreConfiguration.size),
Codec.floatRange(0.0F, 1.0F).fieldOf("discard_chance_on_air_exposure").forGetter(oreConfiguration -> oreConfiguration.discardChanceOnAirExposure)
)
.apply(instance, OreConfiguration::new)
);
public final List<OreConfiguration.TargetBlockState> targetStates;
public final int size;
public final float discardChanceOnAirExposure;
public OreConfiguration(List<OreConfiguration.TargetBlockState> targetStates, int size, float discardChanceOnAirExposure) {
this.size = size;
this.targetStates = targetStates;
this.discardChanceOnAirExposure = discardChanceOnAirExposure;
}
public OreConfiguration(List<OreConfiguration.TargetBlockState> targetStates, int size) {
this(targetStates, size, 0.0F);
}
public OreConfiguration(RuleTest target, BlockState state, int size, float discardChanceOnAirExposure) {
this(ImmutableList.of(new OreConfiguration.TargetBlockState(target, state)), size, discardChanceOnAirExposure);
}
public OreConfiguration(RuleTest target, BlockState state, int size) {
this(ImmutableList.of(new OreConfiguration.TargetBlockState(target, state)), size, 0.0F);
}
public static OreConfiguration.TargetBlockState target(RuleTest target, BlockState state) {
return new OreConfiguration.TargetBlockState(target, state);
}
public static class TargetBlockState {
public static final Codec<OreConfiguration.TargetBlockState> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
RuleTest.CODEC.fieldOf("target").forGetter(targetBlockState -> targetBlockState.target),
BlockState.CODEC.fieldOf("state").forGetter(targetBlockState -> targetBlockState.state)
)
.apply(instance, OreConfiguration.TargetBlockState::new)
);
public final RuleTest target;
public final BlockState state;
TargetBlockState(RuleTest target, BlockState state) {
this.target = target;
this.state = state;
}
}
}