MySoulIsCry

Untitled

Apr 3rd, 2022
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.51 KB | None | 0 0
  1. package com.lairon.timetravel.meteorite;
  2.  
  3. import com.destroystokyo.paper.ParticleBuilder;
  4. import com.lairon.timetravel.utils.LocationUtils;
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.Location;
  7. import org.bukkit.Material;
  8. import org.bukkit.Particle;
  9. import org.bukkit.block.Block;
  10. import org.bukkit.plugin.Plugin;
  11. import org.bukkit.scheduler.BukkitRunnable;
  12. import org.bukkit.util.Vector;
  13.  
  14. import java.util.ArrayList;
  15.  
  16. public class Meteorite {
  17.  
  18.     private Plugin main;
  19.     private Material[][][] materials =
  20.             {
  21.                     {
  22.                             {Material.AIR},
  23.                             {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
  24.                             {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  25.                             {Material.AIR, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE}
  26.                     },
  27.                     {
  28.                             {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
  29.                             {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
  30.                             {Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  31.                             {Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  32.                             {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  33.                     },
  34.                     {
  35.                             {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
  36.                             {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  37.                             {Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  38.                             {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
  39.                             {Material.AIR, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
  40.                     },
  41.                     {
  42.                             {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
  43.                             {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
  44.                             {Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  45.                             {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
  46.                             {Material.AIR, Material.OBSIDIAN, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
  47.                     },
  48.                     {
  49.                             {Material.AIR},
  50.                             {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  51.                             {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
  52.                             {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN}
  53.                     },
  54.             };
  55.  
  56.     public Meteorite(Plugin main) {
  57.         this.main = main;
  58.     }
  59.  
  60.     private ArrayList<Block> setMeteorite(Location loc){
  61.         ArrayList<Block> blocks = new ArrayList<>();
  62.         for (int y = 0; y < materials.length; y++) {
  63.             for (int z = 0; z < materials[y].length; z++) {
  64.                 for (int x = 0; x < materials[y][z].length; x++) {
  65.                     Material material = materials[y][z][x];
  66.                     if(material == Material.AIR) continue;
  67.                     Block block = loc.clone().add(x, y, z).getBlock();
  68.                     block.setType(material);
  69.                     blocks.add(block);
  70.                 }
  71.             }
  72.         }
  73.         return blocks;
  74.     }
  75.  
  76.     public void spawn(Location loc) {
  77.  
  78.         new BukkitRunnable() {
  79.  
  80.             private ArrayList<Block> blocks = new ArrayList<>();
  81.  
  82.             public BukkitRunnable setBlocks(ArrayList<Block> blocks) {
  83.                 this.blocks = blocks;
  84.                 return this;
  85.             }
  86.  
  87.             @Override
  88.             public void run() {
  89.                 ArrayList<Block> newBlocks = new ArrayList<>();
  90.                 for (Block block : blocks) {
  91.  
  92.                     Material material = block.getType();
  93.  
  94.                     Location loc = block.getLocation().clone().subtract(1, 1, 1);
  95.  
  96.                     new ParticleBuilder(Particle.FLAME).location(loc).count(0).spawn();
  97.  
  98.                     block.setType(Material.AIR);
  99.  
  100.                     Block newBlock = loc.getBlock();
  101.  
  102.                     newBlock.setType(material);
  103.  
  104.                     newBlocks.add(newBlock);
  105.  
  106.                 }
  107.                 Location loc = newBlocks.get(0).getLocation();
  108.  
  109.                 int y = loc.getWorld().getHighestBlockAt(loc.clone().subtract(1, 1, 1)).getY();
  110.  
  111.                 if(y > loc.getY()){
  112.  
  113.                     this.cancel();
  114.  
  115.                     for (Block block : blocks) block.setType(Material.AIR);
  116.  
  117.                     loc.createExplosion(30, true, true);
  118.  
  119.                     Location location = loc.clone();
  120.  
  121.                     for(Block block
  122.                             :
  123.                             LocationUtils.getRegionBlocks(
  124.                                     location.getWorld(),
  125.                                     location.clone().subtract(10 ,0, 10),
  126.                                     location.clone().add(10, 0, 10)
  127.                             )){
  128.  
  129.                         if(Math.random() > 0.3f) continue;
  130.  
  131.                         block.getLocation()
  132.                                 .getWorld()
  133.                                 .getHighestBlockAt(block.getLocation()).setType(Material.ORANGE_CONCRETE);
  134.  
  135.                         var add = block.getLocation().add(0, 1, 0);
  136.  
  137.                         block.getWorld()
  138.                                 .spawnFallingBlock(add, Bukkit.createBlockData(Material.ORANGE_CONCRETE))
  139.                                 .setVelocity(new Vector(
  140.                                         (Math.random() * 6) - 3,
  141.                                         (Math.random() * 6) - 3,
  142.                                         (Math.random() * 6) - 3 ));
  143.  
  144.                         if(Math.random() > 0.2f) continue;
  145.  
  146.                         block.getLocation()
  147.                                 .getWorld()
  148.                                 .getHighestBlockAt(block.getLocation()).setType(Material.OBSIDIAN);
  149.  
  150.                         block.getWorld().spawnFallingBlock(add, Bukkit.createBlockData(Material.OBSIDIAN))
  151.  
  152.                                 .setVelocity(new Vector((Math.random() * 6) - 3, (Math.random() * 6) - 3, (Math.random() * 6) - 3 ));
  153.                         add.getBlock().setType(Material.FIRE);
  154.                        
  155.                     }
  156.                     setMeteorite(loc.clone().subtract(3, 7, 3));
  157.                     return;
  158.                 }
  159.                 blocks = newBlocks;
  160.             }
  161.         }.setBlocks(setMeteorite(loc)).runTaskTimer(main, 2, 2);
  162.     }
  163.  
  164. }
  165.  
  166.  
Advertisement
Add Comment
Please, Sign In to add comment