NaturesAura/src/main/java/de/ellpeck/naturesaura/gen/WorldGenAuraBloom.java

53 lines
2 KiB
Java
Raw Normal View History

2020-02-25 15:14:56 +01:00
package de.ellpeck.naturesaura.gen;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityAuraBloom;
2020-02-25 15:56:46 +01:00
import net.minecraft.block.Block;
2020-02-25 15:14:56 +01:00
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.IWorld;
import net.minecraft.world.gen.ChunkGenerator;
import net.minecraft.world.gen.GenerationSettings;
import net.minecraft.world.gen.Heightmap;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.IFeatureConfig;
import net.minecraft.world.gen.feature.NoFeatureConfig;
import java.util.Random;
public class WorldGenAuraBloom extends Feature<NoFeatureConfig> {
2020-02-25 15:56:46 +01:00
private final Block block;
public WorldGenAuraBloom(Block block) {
2020-02-25 15:14:56 +01:00
super(d -> IFeatureConfig.NO_FEATURE_CONFIG);
2020-02-25 15:56:46 +01:00
this.block = block;
2020-02-25 15:14:56 +01:00
}
@Override
public boolean place(IWorld worldIn, ChunkGenerator<? extends GenerationSettings> generator, Random rand, BlockPos pos, NoFeatureConfig config) {
if (rand.nextInt(60) != 0)
return false;
int startX = pos.getX() + rand.nextInt(16);
int startZ = pos.getZ() + rand.nextInt(16);
boolean any = false;
for (int i = MathHelper.nextInt(rand, 3, 8); i > 0; i--) {
int offX = startX + MathHelper.nextInt(rand, -5, 5);
int offZ = startZ + MathHelper.nextInt(rand, -5, 5);
BlockPos placePos = new BlockPos(offX, worldIn.getHeight(Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, offX, offZ), offZ);
2020-02-25 15:56:46 +01:00
BlockState state = this.block.getDefaultState();
if (this.block.isValidPosition(state, worldIn, placePos)) {
2020-02-25 15:14:56 +01:00
worldIn.setBlockState(placePos, state, 3);
TileEntity tile = worldIn.getTileEntity(placePos);
if (tile instanceof TileEntityAuraBloom)
((TileEntityAuraBloom) tile).justGenerated = true;
any = true;
}
}
return any;
}
}