Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.lairon.timetravel.meteorite;
- import com.destroystokyo.paper.ParticleBuilder;
- import com.lairon.timetravel.utils.LocationUtils;
- import org.bukkit.Bukkit;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.Particle;
- import org.bukkit.block.Block;
- import org.bukkit.plugin.Plugin;
- import org.bukkit.scheduler.BukkitRunnable;
- import org.bukkit.util.Vector;
- import java.util.ArrayList;
- public class Meteorite {
- private Plugin main;
- private Material[][][] materials =
- {
- {
- {Material.AIR},
- {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
- {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.AIR, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE}
- },
- {
- {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
- {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
- {Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- },
- {
- {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
- {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
- {Material.AIR, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
- },
- {
- {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN},
- {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
- {Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
- {Material.AIR, Material.OBSIDIAN, Material.OBSIDIAN, Material.ORANGE_CONCRETE},
- },
- {
- {Material.AIR},
- {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.AIR, Material.OBSIDIAN, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE},
- {Material.AIR, Material.ORANGE_CONCRETE, Material.ORANGE_CONCRETE, Material.OBSIDIAN}
- },
- };
- public Meteorite(Plugin main) {
- this.main = main;
- }
- private ArrayList<Block> setMeteorite(Location loc){
- ArrayList<Block> blocks = new ArrayList<>();
- for (int y = 0; y < materials.length; y++) {
- for (int z = 0; z < materials[y].length; z++) {
- for (int x = 0; x < materials[y][z].length; x++) {
- Material material = materials[y][z][x];
- if(material == Material.AIR) continue;
- Block block = loc.clone().add(x, y, z).getBlock();
- block.setType(material);
- blocks.add(block);
- }
- }
- }
- return blocks;
- }
- public void spawn(Location loc) {
- new BukkitRunnable() {
- private ArrayList<Block> blocks = new ArrayList<>();
- public BukkitRunnable setBlocks(ArrayList<Block> blocks) {
- this.blocks = blocks;
- return this;
- }
- @Override
- public void run() {
- ArrayList<Block> newBlocks = new ArrayList<>();
- for (Block block : blocks) {
- Material material = block.getType();
- Location loc = block.getLocation().clone().subtract(1, 1, 1);
- new ParticleBuilder(Particle.FLAME).location(loc).count(0).spawn();
- block.setType(Material.AIR);
- Block newBlock = loc.getBlock();
- newBlock.setType(material);
- newBlocks.add(newBlock);
- }
- Location loc = newBlocks.get(0).getLocation();
- int y = loc.getWorld().getHighestBlockAt(loc.clone().subtract(1, 1, 1)).getY();
- if(y > loc.getY()){
- this.cancel();
- for (Block block : blocks) block.setType(Material.AIR);
- loc.createExplosion(30, true, true);
- Location location = loc.clone();
- for(Block block
- :
- LocationUtils.getRegionBlocks(
- location.getWorld(),
- location.clone().subtract(10 ,0, 10),
- location.clone().add(10, 0, 10)
- )){
- if(Math.random() > 0.3f) continue;
- block.getLocation()
- .getWorld()
- .getHighestBlockAt(block.getLocation()).setType(Material.ORANGE_CONCRETE);
- var add = block.getLocation().add(0, 1, 0);
- block.getWorld()
- .spawnFallingBlock(add, Bukkit.createBlockData(Material.ORANGE_CONCRETE))
- .setVelocity(new Vector(
- (Math.random() * 6) - 3,
- (Math.random() * 6) - 3,
- (Math.random() * 6) - 3 ));
- if(Math.random() > 0.2f) continue;
- block.getLocation()
- .getWorld()
- .getHighestBlockAt(block.getLocation()).setType(Material.OBSIDIAN);
- block.getWorld().spawnFallingBlock(add, Bukkit.createBlockData(Material.OBSIDIAN))
- .setVelocity(new Vector((Math.random() * 6) - 3, (Math.random() * 6) - 3, (Math.random() * 6) - 3 ));
- add.getBlock().setType(Material.FIRE);
- }
- setMeteorite(loc.clone().subtract(3, 7, 3));
- return;
- }
- blocks = newBlocks;
- }
- }.setBlocks(setMeteorite(loc)).runTaskTimer(main, 2, 2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment