Shoot 3 Fireballs in a delay!?!?

Discussion in 'Plugin Development' started by Pr0_fAssEr, Mar 17, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    Pr0_fAssEr

  2. @Pr0_fAssEr Please post your whole class in [ code ] tags.
     
  3. Offline

    Pr0_fAssEr

    Ok here you have it :
    Code:
    package megawalls.classs.all;
    
    
    import java.sql.Time;
    import java.util.ArrayList;
    
    import javax.management.timer.Timer;
    
    import me.main.yoni.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Effect;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Arrow;
    import org.bukkit.entity.Damageable;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.Snowball;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.ProjectileHitEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerItemConsumeEvent;
    import org.bukkit.event.player.PlayerLevelChangeEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.potion.PotionEffect;
    import org.bukkit.potion.PotionEffectType;
    
    import com.avaje.ebeaninternal.server.subclass.GetterSetterMethods;
    
    public class Blaze implements Listener, CommandExecutor {
       
        public int sn = 25;
        public int asd = 3;
       
        ArrayList<String> xp = new ArrayList<String>();
       
        @EventHandler
        public void xpready(PlayerLevelChangeEvent e) {
            if(main.Blaze.contains(e.getPlayer().getName()))
            if(e.getPlayer().getLevel() == 100)
            {
                e.getPlayer().sendMessage(ChatColor.GREEN + "Your " + ChatColor.AQUA + "Fireballs " + ChatColor.GREEN + "Skill is ready!\n" + ChatColor.AQUA + "Right Click" + ChatColor.GREEN + " With any sword to activate your skil!");
            }
        }
       
        @EventHandler
        public void potions(PlayerItemConsumeEvent e) {
            if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().contains("Healing potion of Blaze")) {
                e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.HEAL,2,1));
            }
            if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().contains("Speed potion of Blaze")) {
                for(PotionEffect pe : e.getPlayer().getActivePotionEffects())
                e.getPlayer().removePotionEffect(pe.getType().SPEED);
                e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED,20 * 15,1));
            }
        }
       
        @EventHandler
        public void onSnowball(ProjectileHitEvent e) {
            if(!(e.getEntity() instanceof Fireball)) return;
            if(!(e.getEntity().getShooter() instanceof Player)) return;
            Player p = (Player) e.getEntity().getShooter();
            Fireball fb = (Fireball) e.getEntity();
            for(Entity ent : fb.getNearbyEntities(3, 3, 3)){
                if(!(ent instanceof Player)) continue;
                Player nearby = (Player) ent;
                if(nearby == p) continue;
                nearby.damage(20,p);
            }
        }
       
        @EventHandler
        public void xphit(EntityDamageByEntityEvent e) {
            if(e.getEntity() instanceof Player) {
                if(e.getDamager() instanceof Arrow) {
                    Arrow a = (Arrow) e.getDamager();
                    if(a.getShooter() instanceof Player) {
                        Player p2 = (Player) a.getShooter();
                        if(main.Blaze.contains(p2.getName())) {
                            if(p2.getLevel() == 100) {
                                return;
                            }
                            p2.setLevel(p2.getLevel() + 0);
                            return;
                        }
                    }
                }   
                if(e.getDamager() instanceof Player) {
                    Player p = (Player) e.getDamager();
                    if(main.Blaze.contains(p.getName())) {
                        if(p.getLevel() == 100) {
                            return;
                                }
                            p.setLevel(p.getLevel() + 0);
                        }
                    }
                }
        }
       
        @EventHandler
        public void click(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            double health = ((Damageable) p).getHealth();
            Damageable damageable = (Damageable)p;
            if(main.Blaze.contains(p.getName())) {
                if(e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.LEFT_CLICK_AIR) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
                    if(p.getItemInHand().getType() == Material.DIAMOND_SWORD  || p.getItemInHand().getType() == Material.BOW|| p.getItemInHand().getType() == Material.GOLD_SWORD || p.getItemInHand().getType() == Material.WOOD_SWORD || p.getItemInHand().getType() == Material.IRON_SWORD || p.getItemInHand().getType() == Material.STONE_SWORD) {
                        if(p.getLevel() == 100) {
                                p.setLevel(0);
                                Bukkit.getScheduler().scheduleAsyncRepeatingTask(main.getPlugin(main.class), new Runnable() {
                                   
                                    @Override
                                    public void run() {
                                        if(asd != -1) {
                                            if(asd != 0) {
                                                asd--;
                                                Fireball fb = p.launchProjectile(Fireball.class);
                                            } else {
                                                asd--;
                                                return;
                                            }
                                        }
                                    }
                                }, 0L, 20L);
                            }
                        }
                    }
                }
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String tag, String[] args) {
            Player p = (Player) sender;
            PlayerInventory pi = p.getInventory();
            if(tag.equalsIgnoreCase("Blaze")) {
                if(main.kits.contains(p.getName())) {
                    p.sendMessage(ChatColor.RED + "You already choosed a kit!");
                    return true;
                }
               
               
                xp.remove(p.getName());
                if(!xp.contains(p.getName())) {
                    Bukkit.getScheduler().scheduleAsyncRepeatingTask(main.getPlugin(main.class), new Runnable() {
                       
                        @Override
                        public void run() {
                            xp.add(p.getName());
                            if(p.getLevel() == 100) {
                                return;
                            }
                            if(main.Blaze.contains(p.getName()))
                                if(sn != -1) {
                                    if(sn != 0) {
                                        p.setLevel(p.getLevel() + 4);
                                    } else {
                                        return;
                                    }
                                }
                        }
                    }, 0L, 20L);
                }
               
               
                Location loc = new Location(p.getWorld(), 0, 14, -8);
                p.teleport(loc);
               
                PotionEffect pe = new PotionEffect(PotionEffectType.HEALTH_BOOST,100000,4);
                PotionEffect pe2 = new PotionEffect(PotionEffectType.HEAL,20,5);
               
                ItemStack sword = new ItemStack(Material.DIAMOND_SWORD);
                sword.addEnchantment(Enchantment.DURABILITY, 3);
                ItemMeta sm = sword.getItemMeta();
                sm.setDisplayName(ChatColor.BLUE + "Blaze's Sword");
                sword.setItemMeta(sm);
               
                ItemStack bow = new ItemStack(Material.BOW);
                bow.addEnchantment(Enchantment.ARROW_DAMAGE, 3);
                bow.addEnchantment(Enchantment.DURABILITY, 3);
                bow.addEnchantment(Enchantment.ARROW_INFINITE, 1);
                ItemMeta bm = bow.getItemMeta();
                bm.setDisplayName(ChatColor.BLUE + "Blaze's Bow");
                bow.setItemMeta(bm);
               
                ItemStack heal = new ItemStack(Material.POTION,2, (byte) 8229);
                ItemMeta hm = heal.getItemMeta();
                hm.setDisplayName("Healing potion of Blaze");
                heal.setItemMeta(hm);
               
                ItemStack speed = new ItemStack(Material.POTION,2, (byte) 8194);
                ItemMeta ssm = speed.getItemMeta();
                ssm.setDisplayName("Speed potion of Blaze");
                speed.setItemMeta(ssm);
               
                ItemStack[] armor = { new ItemStack(Material.IRON_BOOTS), new ItemStack(Material.IRON_LEGGINGS), new ItemStack(Material.IRON_CHESTPLATE), new ItemStack(Material.IRON_HELMET) };
               
               
                pi.setArmorContents(armor);
                pi.addItem(sword);
                pi.addItem(bow);
                pi.addItem(heal);
                pi.addItem(speed);
                pi.setItem(8, new ItemStack(Material.ARROW));
                p.addPotionEffect(pe);
                p.addPotionEffect(pe2);
                main.Blaze.add(p.getName());
                main.kits.add(p.getName());
                p.updateInventory();
               
            }
            return false;
        }
    }
    
     
  4. Offline

    Zombie_Striker

    • Why in your run command do you use two if statements instead of using "asd >0", testing if its greater than 0.
    • If either way asd will be subtracted, why have two instances in a if statement instead of putting one statement outside the brackets.
    Also, did you debug?
     
  5. Offline

    SuchSwegMuchWow

    @Pr0_fAssEr Use HashMaps instead of Bukkit Schedulers
     
  6. @Pr0_fAssEr
    Well, I`ll recommend you to store every player`s xp on a hashmap instead of using the bukkit`s xp, because another plugin could change that xp too.
    And you can just run 3 delayed task to shot that fireballs (or if you have too much players, make a bukkit runnable that runs every X ticks (for example, 4 ticks). then make a hashmap that stores the player and the fireballs lefts. On the runnable you check the players on that hashmap and it`s fireballs lefts. You substract 1 from it`s fireballs and shoot a fireball. If the substracted amount is less than 1, you remove the player from the hashmap.
    Also add a check at the top of the runnable to check if the hashmap is empty or not.
     
Thread Status:
Not open for further replies.

Share This Page