Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package niervaco;
- import java.util.HashMap;
- import java.util.HashSet;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.block.Action;
- import org.bukkit.event.entity.EntityDamageEvent;
- import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.event.player.PlayerToggleFlightEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scheduler.BukkitRunnable;
- import org.bukkit.util.Vector;
- public class Meteorstrike extends JavaPlugin implements Listener{
- // uuid, time.
- HashMap<String, Integer> cooldownDash = new HashMap<String, Integer>();
- // uuid, player task.
- HashMap<String, BukkitRunnable> dashingFlame = new HashMap<String, BukkitRunnable>();
- // uuid, time.
- HashMap<String, Integer> cooldownStrike = new HashMap<String, Integer>();
- // uuid, player task.
- HashMap<String, BukkitRunnable> dashingStrike = new HashMap<String, BukkitRunnable>();
- // list of players
- HashSet<Player> players = new HashSet<Player>();
- @Override
- public void onEnable() {
- getServer().getPluginManager().registerEvents(this, this);
- // cooldowns
- new BukkitRunnable(){
- @Override
- public void run() {
- for(String uuid : cooldownDash.keySet()) {
- if(cooldownDash.get(uuid) <= 0) {
- cooldownDash.remove(uuid);
- }
- else {
- cooldownDash.put(uuid, cooldownDash.get(uuid) - 1);
- }
- }
- for(String uuid : cooldownStrike.keySet()) {
- if(cooldownStrike.get(uuid) <= 0) {
- cooldownStrike.remove(uuid);
- }
- else {
- cooldownStrike.put(uuid, cooldownStrike.get(uuid) - 1);
- }
- }
- }
- }.runTaskTimer(this, 0, 20);
- new BukkitRunnable() {
- @Override
- public void run() {
- for(Player p : players) {
- Location under = p.getLocation();
- under.setY(under.getY() - 1);
- if(under.getBlock().getType() != Material.AIR) {
- p.setAllowFlight(true);
- }
- }
- }
- }.runTaskTimer(this, 0, 1);
- }
- @EventHandler
- public void PlayerInteract(PlayerInteractEvent e) {
- Player p = e.getPlayer();
- String uuid = p.getUniqueId().toString();
- // flame dash
- if(p.getItemInHand().getType().equals(Material.IRON_SPADE) && e.getAction().equals(Action.RIGHT_CLICK_AIR) || p.getItemInHand().getType().equals(Material.IRON_SPADE) && e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
- if(!cooldownDash.containsKey(uuid) && !dashingStrike.containsKey(uuid)) {
- Vector v = p.getLocation().getDirection().setY(0);
- v.normalize();
- v.setY(0.05);
- dash(p, v, 20, 2, 10, 0);
- cooldownDash.put(uuid, 8);
- }
- else if(dashingFlame.containsKey(uuid)){
- dashingFlame.get(uuid).cancel(); // put magmaExplode(uuid) method that does this and applies damage / particles etc
- dashingFlame.remove(uuid);
- }
- else {
- p.sendMessage("cooldown" + Integer.toString(cooldownDash.get(uuid)));
- }
- }
- // meteor strike
- if(p.getItemInHand().getType().equals(Material.IRON_SWORD) && e.getAction().equals(Action.RIGHT_CLICK_AIR) || p.getItemInHand().getType().equals(Material.IRON_SWORD) && e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
- if(!cooldownStrike.containsKey(uuid)) {
- if(dashingFlame.containsKey(uuid)) {
- dashingFlame.get(uuid).cancel();
- dashingFlame.remove(uuid);
- }
- dash(p, new Vector(0, 0.3, 0), 15, 0, 0, 1);
- cooldownStrike.put(uuid, 10);
- }
- else {
- p.sendMessage("cooldown" + Integer.toString(cooldownStrike.get(uuid)));
- }
- }
- }
- public void dash(Player p, Vector v, int time, int radius, int damage, int dashType) {
- String uuid = p.getUniqueId().toString();
- BukkitRunnable flameDash = new BukkitRunnable(){
- int ticks = time;
- // dash type 0 is flame dash, 1 is phase 1 of strike, 2 is phase 2 of strike.
- @Override
- public void run(){
- if(ticks <= 1 || !p.isOnline()){
- this.cancel();
- if(dashType == 0) {
- dashingFlame.remove(uuid);
- // explode boom
- return;
- }
- else if(dashType == 1){
- if(!p.isBlocking()) {
- dashingStrike.remove(uuid);
- p.setVelocity(new Vector(0, 1, 0));
- }
- else {
- dash(p, p.getLocation().getDirection().multiply(2), 8, 2, 10, 2); // begin phase 2
- }
- }
- else if(dashType == 2) {
- dashingStrike.remove(uuid);
- p.setVelocity(new Vector(0, 0, 0));
- // explode boom
- }
- return;
- }
- if(dashType == 2) {
- if(p.getVelocity() != v) {
- //this.cancel();
- //dashingStrike.remove(uuid);
- }
- }
- p.setVelocity(v);
- ticks--; //decrement
- }
- };
- // normal flame dash
- if(dashType == 0) {
- dashingFlame.put(uuid, flameDash);
- }
- // meteor strike dash
- else if(dashType == 1) {
- dashingStrike.put(uuid, flameDash);
- }
- flameDash.runTaskTimer(this, 0, 1);
- }
- @EventHandler
- public void PlayerJoin(PlayerJoinEvent e) {
- players.add(e.getPlayer());
- e.getPlayer().setAllowFlight(true);
- }
- @EventHandler
- public void PlayerLeave(PlayerQuitEvent e) {
- players.remove(e.getPlayer());
- }
- @EventHandler
- public void DoubleJump(PlayerToggleFlightEvent e) {
- e.setCancelled(true);
- e.getPlayer().setAllowFlight(false);
- Vector pVec = e.getPlayer().getLocation().getDirection().setY(0);
- pVec.normalize().multiply(0.5);
- pVec.setY(1.25);
- e.getPlayer().setVelocity(pVec);
- }
- @EventHandler
- public void onEntityDamageEvent(EntityDamageEvent e) {
- if (!(e.getEntity() instanceof Player)) {
- return;
- }
- if (e.getCause() == DamageCause.FALL) {
- e.setCancelled(true);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement