minecraft-src/net/minecraft/world/level/biome/FixedBiomeSource.java
2025-07-04 01:41:11 +03:00

72 lines
2.2 KiB
Java

package net.minecraft.world.level.biome;
import com.google.common.collect.Sets;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.MapCodec;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Stream;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.LevelReader;
import org.jetbrains.annotations.Nullable;
public class FixedBiomeSource extends BiomeSource implements BiomeManager.NoiseBiomeSource {
public static final MapCodec<FixedBiomeSource> CODEC = Biome.CODEC
.fieldOf("biome")
.<FixedBiomeSource>xmap(FixedBiomeSource::new, fixedBiomeSource -> fixedBiomeSource.biome)
.stable();
private final Holder<Biome> biome;
public FixedBiomeSource(Holder<Biome> biome) {
this.biome = biome;
}
@Override
protected Stream<Holder<Biome>> collectPossibleBiomes() {
return Stream.of(this.biome);
}
@Override
protected MapCodec<? extends BiomeSource> codec() {
return CODEC;
}
@Override
public Holder<Biome> getNoiseBiome(int i, int j, int k, Climate.Sampler sampler) {
return this.biome;
}
@Override
public Holder<Biome> getNoiseBiome(int i, int j, int k) {
return this.biome;
}
@Nullable
@Override
public Pair<BlockPos, Holder<Biome>> findBiomeHorizontal(
int x, int y, int z, int radius, int increment, Predicate<Holder<Biome>> biomePredicate, RandomSource random, boolean findClosest, Climate.Sampler sampler
) {
if (biomePredicate.test(this.biome)) {
return findClosest
? Pair.of(new BlockPos(x, y, z), this.biome)
: Pair.of(new BlockPos(x - radius + random.nextInt(radius * 2 + 1), y, z - radius + random.nextInt(radius * 2 + 1)), this.biome);
} else {
return null;
}
}
@Nullable
@Override
public Pair<BlockPos, Holder<Biome>> findClosestBiome3d(
BlockPos pos, int radius, int horizontalStep, int verticalStep, Predicate<Holder<Biome>> biomePredicate, Climate.Sampler sampler, LevelReader level
) {
return biomePredicate.test(this.biome) ? Pair.of(pos, this.biome) : null;
}
@Override
public Set<Holder<Biome>> getBiomesWithin(int x, int y, int z, int radius, Climate.Sampler sampler) {
return Sets.<Holder<Biome>>newHashSet(Set.of(this.biome));
}
}