Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package fr.maxlego08.generation.popular;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import org.bukkit.Chunk;
- import org.bukkit.Material;
- import org.bukkit.World;
- import org.bukkit.block.Block;
- import org.bukkit.generator.BlockPopulator;
- import fr.maxlego08.generation.utils.Position;
- public class CavePopulor extends BlockPopulator {
- private void generateCave(World world, Random random, Chunk chunk, int x, int y, int z){
- List<Position> positions = new ArrayList<Position>();
- int r = random.nextInt(120) + 50;
- for(int a = 0; a != r; a++){
- int r2 = random.nextInt(5);
- int r3 = random.nextInt(20);
- if (r2 == 0){
- if (r3 <= 2) x--;
- if (r3 <= 6) x++;
- if (r3 <= 9) y--;
- if (r3 <= 12) y++;
- if (r3 <= 15) z--;
- if (r3 <= 20) z++;
- }
- if (r2 == 1){
- if (r3 <= 2) y--;
- if (r3 <= 6) z++;
- if (r3 <= 9) x--;
- if (r3 <= 12) y++;
- if (r3 <= 15) x--;
- if (r3 <= 20) z++;
- }
- if (r2 == 2){
- if (r3 <= 2) y--;
- if (r3 <= 6) z++;
- if (r3 <= 9) z--;
- if (r3 <= 12) y++;
- if (r3 <= 15) x--;
- if (r3 <= 20) x++;
- }
- if (r2 == 3){
- if (r3 <= 2) x--;
- if (r3 <= 6) x++;
- if (r3 <= 9) z--;
- if (r3 <= 12) z++;
- if (r3 <= 15) y--;
- if (r3 <= 20) y++;
- }
- if (r2 >= 4){
- if (r3 <= 2) y--;
- if (r3 <= 6) z++;
- if (r3 <= 9) y--;
- if (r3 <= 12) y++;
- if (r3 <= 15) y--;
- if (r3 <= 20) x++;
- }
- positions.add(new Position(x, y, z));
- }
- positions.forEach(position -> {
- getPostions(world, random, chunk, position.getPosX(), position.getPosY(), position.getPosZ()).forEach(localPostion -> {
- Block block = world.getBlockAt(localPostion.getPosX(), localPostion.getPosY(), localPostion.getPosZ());
- if (!block.isEmpty() && !block.isLiquid() && !block.getType().equals(Material.BEDROCK)){
- block.setType(Material.AIR);
- }
- });
- });
- }
- @SuppressWarnings("deprecation")
- private List<Position> getPostions(World world, Random random, Chunk chunk, int x, int y, int z){
- List<Position> positions = new ArrayList<Position>();
- int a = 0;
- int b = random.nextInt(200) + 20;
- while(a <= b){
- int k = random.nextInt(50);
- if (k == 0) y++;
- else if (k == 5) y++;
- else if (random.nextBoolean()){
- if (random.nextBoolean()) x++;
- else z++;
- }else if (random.nextBoolean()) x--;
- else z--;
- if (world.getBlockTypeIdAt(x, y, z) != 0){
- int c = 1 + random.nextInt(3);
- int d = c * c + 1;
- for(int x2 = -c; x2 <= c; x2++){
- for(int y2 = -c; y2 <= c; y2++){
- for(int z2 = -c; z2 <= c; z2++){
- if (world.getBlockTypeIdAt(x2, y2, z2) != 0) a++;
- else{
- positions.add(new Position(x + x2, y + y2, z + z2));
- }
- }
- }
- }
- }else a++;
- }
- return positions;
- }
- public void populate(World world, Random random, Chunk chunk) {
- int a = random.nextInt(5000);
- int b = random.nextInt(5000);
- if (a > b){
- int x = 4 + random.nextInt(8) + chunk.getX() * 16;
- int z = 4 + random.nextInt(8) + chunk.getX() * 16;
- int y = world.getHighestBlockYAt(x, z);
- if (y <= 16) y = 32;
- int newY = random.nextInt(y);
- generateCave(world, random, chunk, x, newY, z);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment