55 lines
1.5 KiB
Java
55 lines
1.5 KiB
Java
package ru.betterend.world.features;
|
|
|
|
import java.util.Random;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.core.BlockPos.MutableBlockPos;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.world.StructureWorldAccess;
|
|
import ru.betterend.util.BlocksHelper;
|
|
import ru.betterend.util.MHelper;
|
|
|
|
public abstract class SkyScatterFeature extends ScatterFeature {
|
|
public SkyScatterFeature(int radius) {
|
|
super(radius);
|
|
}
|
|
|
|
@Override
|
|
protected int getChance() {
|
|
return 10;
|
|
}
|
|
|
|
@Override
|
|
public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos center, BlockPos blockPos,
|
|
float radius) {
|
|
if (!world.isAir(blockPos)) {
|
|
return false;
|
|
}
|
|
|
|
for (Direction dir : BlocksHelper.HORIZONTAL) {
|
|
if (!world.isAir(blockPos.offset(dir))) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
int maxD = getYOffset() + 2;
|
|
int maxV = getYOffset() - 2;
|
|
|
|
return BlocksHelper.upRay(world, blockPos, maxD) > maxV && BlocksHelper.downRay(world, blockPos, maxD) > maxV;
|
|
}
|
|
|
|
@Override
|
|
protected boolean canSpawn(StructureWorldAccess world, BlockPos pos) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
protected BlockPos getCenterGround(StructureWorldAccess world, BlockPos pos) {
|
|
return new BlockPos(pos.getX(), MHelper.randRange(32, 192, world.getRandom()), pos.getZ());
|
|
}
|
|
|
|
protected boolean getGroundPlant(StructureWorldAccess world, MutableBlockPos pos) {
|
|
pos.setY(pos.getY() + MHelper.randRange(-getYOffset(), getYOffset(), world.getRandom()));
|
|
return true;
|
|
}
|
|
}
|