53 lines
2.4 KiB
Java
53 lines
2.4 KiB
Java
|
package net.minecraft.world.level.levelgen.feature;
|
||
|
|
||
|
import com.mojang.serialization.Codec;
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
import net.minecraft.util.RandomSource;
|
||
|
import net.minecraft.world.level.WorldGenLevel;
|
||
|
import net.minecraft.world.level.block.state.BlockState;
|
||
|
import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration;
|
||
|
|
||
|
public class ScatteredOreFeature extends Feature<OreConfiguration> {
|
||
|
private static final int MAX_DIST_FROM_ORIGIN = 7;
|
||
|
|
||
|
ScatteredOreFeature(Codec<OreConfiguration> p_160304_) {
|
||
|
super(p_160304_);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean place(FeaturePlaceContext<OreConfiguration> p_160306_) {
|
||
|
WorldGenLevel worldgenlevel = p_160306_.level();
|
||
|
RandomSource randomsource = p_160306_.random();
|
||
|
OreConfiguration oreconfiguration = p_160306_.config();
|
||
|
BlockPos blockpos = p_160306_.origin();
|
||
|
int i = randomsource.nextInt(oreconfiguration.size + 1);
|
||
|
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();
|
||
|
|
||
|
for (int j = 0; j < i; j++) {
|
||
|
this.offsetTargetPos(blockpos$mutableblockpos, randomsource, blockpos, Math.min(j, 7));
|
||
|
BlockState blockstate = worldgenlevel.getBlockState(blockpos$mutableblockpos);
|
||
|
|
||
|
for (OreConfiguration.TargetBlockState oreconfiguration$targetblockstate : oreconfiguration.targetStates) {
|
||
|
if (OreFeature.canPlaceOre(
|
||
|
blockstate, worldgenlevel::getBlockState, randomsource, oreconfiguration, oreconfiguration$targetblockstate, blockpos$mutableblockpos
|
||
|
)) {
|
||
|
worldgenlevel.setBlock(blockpos$mutableblockpos, oreconfiguration$targetblockstate.state, 2);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private void offsetTargetPos(BlockPos.MutableBlockPos p_225232_, RandomSource p_225233_, BlockPos p_225234_, int p_225235_) {
|
||
|
int i = this.getRandomPlacementInOneAxisRelativeToOrigin(p_225233_, p_225235_);
|
||
|
int j = this.getRandomPlacementInOneAxisRelativeToOrigin(p_225233_, p_225235_);
|
||
|
int k = this.getRandomPlacementInOneAxisRelativeToOrigin(p_225233_, p_225235_);
|
||
|
p_225232_.setWithOffset(p_225234_, i, j, k);
|
||
|
}
|
||
|
|
||
|
private int getRandomPlacementInOneAxisRelativeToOrigin(RandomSource p_225229_, int p_225230_) {
|
||
|
return Math.round((p_225229_.nextFloat() - p_225229_.nextFloat()) * p_225230_);
|
||
|
}
|
||
|
}
|