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 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 allowedBiomes; private final int bitShift; private final int size; public CheckerboardColumnBiomeSource(HolderSet allowedBiomes, int size) { this.allowedBiomes = allowedBiomes; this.bitShift = size + 2; this.size = size; } @Override protected Stream> collectPossibleBiomes() { return this.allowedBiomes.stream(); } @Override protected MapCodec codec() { return CODEC; } @Override public Holder getNoiseBiome(int i, int j, int k, Sampler sampler) { return this.allowedBiomes.get(Math.floorMod((i >> this.bitShift) + (k >> this.bitShift), this.allowedBiomes.size())); } }