minecraft-src/net/minecraft/world/level/biome/CheckerboardColumnBiomeSource.java
2025-07-04 03:45:38 +03:00

43 lines
1.5 KiB
Java

package net.minecraft.world.level.biome;
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.stream.Stream;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.world.level.biome.Climate.Sampler;
public class CheckerboardColumnBiomeSource extends BiomeSource {
public static final MapCodec<CheckerboardColumnBiomeSource> CODEC = RecordCodecBuilder.mapCodec(
instance -> instance.group(
Biome.LIST_CODEC.fieldOf("biomes").forGetter(checkerboardColumnBiomeSource -> checkerboardColumnBiomeSource.allowedBiomes),
Codec.intRange(0, 62).fieldOf("scale").orElse(2).forGetter(checkerboardColumnBiomeSource -> checkerboardColumnBiomeSource.size)
)
.apply(instance, CheckerboardColumnBiomeSource::new)
);
private final HolderSet<Biome> allowedBiomes;
private final int bitShift;
private final int size;
public CheckerboardColumnBiomeSource(HolderSet<Biome> allowedBiomes, int size) {
this.allowedBiomes = allowedBiomes;
this.bitShift = size + 2;
this.size = size;
}
@Override
protected Stream<Holder<Biome>> collectPossibleBiomes() {
return this.allowedBiomes.stream();
}
@Override
protected MapCodec<? extends BiomeSource> codec() {
return CODEC;
}
@Override
public Holder<Biome> getNoiseBiome(int i, int j, int k, Sampler sampler) {
return this.allowedBiomes.get(Math.floorMod((i >> this.bitShift) + (k >> this.bitShift), this.allowedBiomes.size()));
}
}