minecraft-source/src/net/minecraft/world/level/levelgen/placement/CarvingMaskDecorator.java

39 lines
1.8 KiB
Java

package net.minecraft.world.level.levelgen.placement;
import net.minecraft.world.level.levelgen.feature.configurations.DecoratorConfiguration;
import java.util.BitSet;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.chunk.ChunkAccess;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import net.minecraft.core.BlockPos;
import java.util.Random;
import net.minecraft.world.level.levelgen.ChunkGeneratorSettings;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.LevelAccessor;
import com.mojang.datafixers.Dynamic;
import java.util.function.Function;
public class CarvingMaskDecorator extends FeatureDecorator<CarvingMaskDecoratorConfiguration> {
public CarvingMaskDecorator(final Function<Dynamic<?>, ? extends CarvingMaskDecoratorConfiguration> function) {
super(function);
}
@Override
public Stream<BlockPos> getPositions(final LevelAccessor bju, final ChunkGenerator<? extends ChunkGeneratorSettings> bzx, final Random random, final CarvingMaskDecoratorConfiguration ciz, final BlockPos fk) {
final ChunkAccess bzv7 = bju.getChunk(fk);
final ChunkPos bje8 = bzv7.getPos();
final BitSet bitSet9 = bzv7.getCarvingMask(ciz.step);
final int integer2;
final int integer3;
final int integer4;
final ChunkPos chunkPos;
return IntStream.range(0, bitSet9.length()).filter(integer -> bitSet9.get(integer) && random.nextFloat() < ciz.probability).<BlockPos>mapToObj(integer -> {
integer2 = (integer & 0xF);
integer3 = (integer >> 4 & 0xF);
integer4 = integer >> 8;
return new BlockPos(chunkPos.getMinBlockX() + integer2, integer4, chunkPos.getMinBlockZ() + integer3);
});
}
}