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

37 lines
1.7 KiB
Java

package net.minecraft.world.level.levelgen.feature.stateproviders;
import com.mojang.datafixers.Products.P3;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder.Instance;
import com.mojang.serialization.codecs.RecordCodecBuilder.Mu;
import net.minecraft.core.BlockPos;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.level.levelgen.LegacyRandomSource;
import net.minecraft.world.level.levelgen.WorldgenRandom;
import net.minecraft.world.level.levelgen.synth.NormalNoise;
public abstract class NoiseBasedStateProvider extends BlockStateProvider {
protected final long seed;
protected final NormalNoise.NoiseParameters parameters;
protected final float scale;
protected final NormalNoise noise;
protected static <P extends NoiseBasedStateProvider> P3<Mu<P>, Long, NormalNoise.NoiseParameters, Float> noiseCodec(Instance<P> instance) {
return instance.group(
Codec.LONG.fieldOf("seed").forGetter(noiseBasedStateProvider -> noiseBasedStateProvider.seed),
NormalNoise.NoiseParameters.DIRECT_CODEC.fieldOf("noise").forGetter(noiseBasedStateProvider -> noiseBasedStateProvider.parameters),
ExtraCodecs.POSITIVE_FLOAT.fieldOf("scale").forGetter(noiseBasedStateProvider -> noiseBasedStateProvider.scale)
);
}
protected NoiseBasedStateProvider(long seed, NormalNoise.NoiseParameters parameters, float scale) {
this.seed = seed;
this.parameters = parameters;
this.scale = scale;
this.noise = NormalNoise.create(new WorldgenRandom(new LegacyRandomSource(seed)), parameters);
}
protected double getNoiseValue(BlockPos pos, double delta) {
return this.noise.getValue(pos.getX() * delta, pos.getY() * delta, pos.getZ() * delta);
}
}