72 lines
2.2 KiB
Java
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));
|
|
}
|
|
}
|