Trouble Fixing KillStreak Plugin

Discussion in 'Plugin Development' started by Trytan, Jul 31, 2015.

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

    Trytan

    Console Error
    Code:
    Could not pass event PlayerInteractEvent to hKillStreak vv1
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at org.bukkit.craftbukkit.v1_7_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:226) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at org.bukkit.craftbukkit.v1_7_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:196) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:605) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInBlockPlace.a(SourceFile:60) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInBlockPlace.handle(SourceFile:9) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
    Caused by: java.lang.NullPointerException
        at me.trytan.killstreak.Main.onInteract(Main.java:193) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_31]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_31]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
        at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
        ... 15 more
    Code

    Code:
    package me.trytan.killstreak;
    
    import java.util.Arrays;
    import java.util.HashMap;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    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.PlayerDeathEvent;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.potion.Potion;
    import org.bukkit.potion.PotionType;
    
    public class Main extends JavaPlugin implements Listener{
       
        HashMap<Player, Integer> kills = new HashMap<>();
    
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
        }
       
        private void openGUI(Player p){
            Inventory inv = Bukkit.createInventory(null, 9, "§a§lKillstreak Menu");
           
            ItemStack medic = new ItemStack (Material.GOLDEN_APPLE);
            ItemMeta mm = medic.getItemMeta();
            Potion poison = new Potion(PotionType.POISON, 1);
            ItemStack witch = poison.toItemStack(0);
            ItemMeta wm = witch.getItemMeta();
            ItemStack pb = new ItemStack (Material.BOW);
            ItemMeta pbm = pb.getItemMeta();
            ItemStack bat = new ItemStack (Material.STICK);
            ItemMeta bm = bat.getItemMeta();
            ItemStack j = new ItemStack (Material.DIAMOND_CHESTPLATE);
            ItemMeta jm = bat.getItemMeta();
            ItemStack spacer = new ItemStack (Material.STAINED_GLASS_PANE);
            ItemMeta sm = spacer.getItemMeta();
           
            mm.setDisplayName("§cMedic §7- §f4 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Heals player" }));
            medic.setItemMeta(mm);
           
            wm.setDisplayName("§3Witch §7- §f8 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§2 Poison Potions" }));
            witch.setItemMeta(wm);
           
            pbm.setDisplayName("§5Power-Bow §7- §f12 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Flame I, Power I, Punch I Bow" }));
            pb.setItemMeta(pbm);
           
            bm.setDisplayName("§1Bat §7- §f16 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Magical Bat" }));
            bat.setItemMeta(bm);
           
            jm.setDisplayName("§9Juggernaut §7- §f20 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Full Diamond Armor" }));
            j.setItemMeta(jm);
           
            sm.setDisplayName("");
            spacer.setItemMeta(sm);
           
            inv.setItem(0, medic);
            inv.setItem(1, spacer);
            inv.setItem(2, witch);
            inv.setItem(3, spacer);
            inv.setItem(4, pb);
            inv.setItem(5, spacer);
            inv.setItem(6, bat);
            inv.setItem(7, spacer);
            inv.setItem(8, j);
           
            p.openInventory(inv);
           
        }
        @EventHandler
        public void onInvClick(InventoryClickEvent e){
            if (e.getWhoClicked() instanceof Player) {
                Player player = (Player) e.getWhoClicked();
                if(!ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase("§a§lKillstreak Menu")){
                    e.setCancelled(true);
                   
                    if(e.getCurrentItem()==null || e.getCurrentItem().getType() == Material.AIR || !e.getCurrentItem().hasItemMeta()){
                        player.closeInventory();
                        return;
                    }
                    switch(e.getCurrentItem().getType()){
                    case GOLDEN_APPLE:
                        player.setHealth(20D);
                        player.sendMessage("§c§lHood §f> §aSelected the §cMedic §akillstreak!");
                        if(kills.get(player) > 4){
                            kills.put(player, kills.get(player) - 4);
                        } else {
                            if(kills.get(player) < 4){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                        break;
                        }
                    case POTION:
                        Potion poison = new Potion(PotionType.POISON, 1);
                        ItemStack witch = poison.toItemStack(6);
                        player.getInventory().addItem(witch);
                        player.sendMessage("§c§lHood §f> §aSelected the §3Witch §akillstreak!");
                        if(kills.get(player) > 8){
                            kills.put(player, kills.get(player) - 8);
                        } else {
                            if(kills.get(player) < 8){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                        break;
                        }
                    case BOW:
                        ItemStack pb = new ItemStack (Material.BOW);
                        pb.addEnchantment(Enchantment.ARROW_FIRE, 1);
                        pb.addEnchantment(Enchantment.ARROW_DAMAGE, 1);
                        pb.addEnchantment(Enchantment.ARROW_INFINITE, 1);
                        player.getInventory().addItem(pb);
                        player.sendMessage("§c§lHood §f> §aSelected the §5Power-Bow §akillstreak!");
                        if(kills.get(player) > 12){
                            kills.put(player, kills.get(player) - 12);
                        } else {
                            if(kills.get(player) < 12){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                        break;
                        }
                    case STICK:
                        ItemStack bat = new ItemStack (Material.STICK);
                        bat.addUnsafeEnchantment(Enchantment.FIRE_ASPECT, 5);
                        bat.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2);
                        bat.addUnsafeEnchantment(Enchantment.THORNS, 5);
                        player.getInventory().addItem(bat);
                        player.sendMessage("§c§lHood §f> §aSelected the §5Power-Bow §akillstreak!");
                        if(kills.get(player) > 16){
                            kills.put(player, kills.get(player) - 16);
                        } else {
                            if(kills.get(player) < 16){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                        break;
                        }
                    case DIAMOND_CHESTPLATE:
                        ItemStack dh = new ItemStack (Material.DIAMOND_HELMET);
                        ItemStack dc = new ItemStack (Material.DIAMOND_CHESTPLATE);
                        ItemStack dl = new ItemStack (Material.DIAMOND_LEGGINGS);
                        ItemStack db = new ItemStack (Material.DIAMOND_BOOTS);
                       
                        player.getInventory().setHelmet(dh);
                        player.getInventory().setHelmet(dc);
                        player.getInventory().setHelmet(dl);
                        player.getInventory().setHelmet(db);
                        player.sendMessage("§c§lHood §f> §aSelected the §9Juggernaut §akillstreak!");
                        if(kills.get(player) > 20){
                            kills.put(player, kills.get(player) - 20);
                        } else {
                            if(kills.get(player) < 20){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                        break;
                        }
                    default:
                        player.closeInventory();
                        break;
                    }
                }
            }
        }
       
        @EventHandler
        public void onJoin(PlayerJoinEvent e){
            Player p = e.getPlayer();
            ItemStack magma = new ItemStack(Material.MAGMA_CREAM);
            ItemMeta mm = magma.getItemMeta();
           
            mm.setDisplayName("§aKillstreaks §7(Click to open)");
            p.getInventory().setItem(4, magma);
        }
        @EventHandler
        public void onInteract(PlayerInteractEvent e){
            Action a = e.getAction();
            ItemStack is = e.getItem();
            if(is.getItemMeta().getDisplayName().equals("§aKillstreaks §7(Click to open)")){
                openGUI(e.getPlayer());       
               
                if(a == Action.PHYSICAL || is == null || is.getType()==Material.AIR){
                    return;                   
                }
            }
        }
        @EventHandler
        public void onDeath(PlayerDeathEvent e){
            Player p = e.getEntity();
            Player k = p.getKiller();
            if(k instanceof Player && p instanceof Player){
                if(!kills.containsKey(k)){
                    kills.put(k, 1);
                    return;
                }
                if(kills.containsKey(k)){
                    kills.put(k, kills.get(k) + 1);
                    int streak = kills.get(k);
                    if(streak == 10 || streak == 20 || streak == 30 || streak == 40 || streak == 50 || streak == 60 ||
                            streak == 70 || streak == 80 || streak == 90 || streak == 100 || streak == 110 || streak == 120
                            || streak == 130 || streak == 140 || streak == 150 || streak == 160 || streak == 170 || streak == 180
                            || streak == 190 || streak == 200){
                        Bukkit.broadcastMessage("§c§lHood §f> " + k.getDisplayName() + " §3is on a §8[§6§l" + streak + "§8] §3killstreak!");
                        return;
                    }
                }
                if(kills.containsKey(p)){
                    kills.remove(p);
                    return;
                }
            }
        }
       
        @EventHandler
        public void onQuit(PlayerQuitEvent e){
            Player p = e.getPlayer();
            kills.remove(p);
        }
       
    }
    
     
  2. Offline

    raymart23

    where or how the error starts ?
     
  3. Offline

    stormneo7

    is.getItemMeta().getDisplayName()
    both could be null
     
  4. Offline

    AndersonEpic

    Get the player, get the player's ItemInHand, and the check if the DisplayName of the item contains "Killstreaks (Click to open)"
     
  5. Still completely wrong and not helpful.
    yep that is the only good and working answer in this thread :D
    Code:
    if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) {
    String displayName = item.getItemMeta().getDisplayName();
    //compare the string
    }
     
  6. Offline

    Trytan

    Okay, thank you. Now I need help with the kills. I am able to spam the killstreak menu and the player requires a specific amount of kills to use the killstreak. When the player uses the killstreak, it removes the amount of kills that the killstreak consists of.

    Code:
    HashMap<Player, Integer> kills = new HashMap<>();
    
        public void onEnable(){
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        private void openGUI(Player p){
            Inventory inv = Bukkit.createInventory(null, 9, "§a§lKillstreak Menu");
    
            ItemStack medic = new ItemStack (Material.GOLDEN_APPLE);
            ItemMeta mm = medic.getItemMeta();
            Potion poison = new Potion(PotionType.POISON, 1);
            ItemStack witch = poison.toItemStack(0);
            ItemMeta wm = witch.getItemMeta();
            ItemStack pb = new ItemStack (Material.BOW);
            ItemMeta pbm = pb.getItemMeta();
            ItemStack bat = new ItemStack (Material.STICK);
            ItemMeta bm = bat.getItemMeta();
            ItemStack j = new ItemStack (Material.DIAMOND_CHESTPLATE);
            ItemMeta jm = bat.getItemMeta();
            ItemStack spacer = new ItemStack (Material.STAINED_GLASS_PANE);
            ItemMeta sm = spacer.getItemMeta();
    
            mm.setDisplayName("§cMedic §7- §f4 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Heals player" }));
            medic.setItemMeta(mm);
    
            wm.setDisplayName("§3Witch §7- §f8 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§2 Poison Potions" }));
            witch.setItemMeta(wm);
    
            pbm.setDisplayName("§5Power-Bow §7- §f12 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Flame I, Power I, Punch I Bow" }));
            pb.setItemMeta(pbm);
    
            bm.setDisplayName("§1Bat §7- §f16 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Magical Bat" }));
            bat.setItemMeta(bm);
    
            jm.setDisplayName("§9Juggernaut §7- §f20 KILLS");
            mm.setLore(Arrays.asList(new String[] { "§f§Full Diamond Armor" }));
            j.setItemMeta(jm);
    
            sm.setDisplayName("");
            spacer.setItemMeta(sm);
    
            inv.setItem(0, medic);
            inv.setItem(1, spacer);
            inv.setItem(2, witch);
            inv.setItem(3, spacer);
            inv.setItem(4, pb);
            inv.setItem(5, spacer);
            inv.setItem(6, bat);
            inv.setItem(7, spacer);
            inv.setItem(8, j);
    
            p.openInventory(inv);
    
        }
        @EventHandler
        public void onInvClick(InventoryClickEvent e){
            if (e.getWhoClicked() instanceof Player) {
                Player player = (Player) e.getWhoClicked();
                if(!ChatColor.stripColor(e.getInventory().getName()).equalsIgnoreCase("§a§lKillstreak Menu")){
                    e.setCancelled(true);
    
                    if(e.getCurrentItem()==null || e.getCurrentItem().getType() == Material.AIR || !e.getCurrentItem().hasItemMeta()){
                        player.closeInventory();
                        return;
                    }
                    switch(e.getCurrentItem().getType()){
                    case GOLDEN_APPLE:
                        player.setHealth(20D);
                        player.sendMessage("§c§lHood §f> §aSelected the §cMedic §akillstreak!");
                        if(kills.get(player) > 4){
                            kills.put(player, kills.get(player) - 4);
                            if(kills.get(player) < 4){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                            break;
                        }
                    case POTION:
                        Potion poison = new Potion(PotionType.POISON, 1);
                        ItemStack witch = poison.toItemStack(6);
                        player.getInventory().addItem(witch);
                        player.sendMessage("§c§lHood §f> §aSelected the §3Witch §akillstreak!");
                        if(kills.get(player) > 8){
                            kills.put(player, kills.get(player) - 8);
                            if(kills.get(player) < 8){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                            break;
                        }
                    case BOW:
                        ItemStack pb = new ItemStack (Material.BOW);
                        pb.addEnchantment(Enchantment.ARROW_FIRE, 1);
                        pb.addEnchantment(Enchantment.ARROW_DAMAGE, 1);
                        pb.addEnchantment(Enchantment.ARROW_INFINITE, 1);
                        player.getInventory().addItem(pb);
                        player.sendMessage("§c§lHood §f> §aSelected the §5Power-Bow §akillstreak!");
                        if(kills.get(player) > 12){
                            kills.put(player, kills.get(player) - 12);
                            if(kills.get(player) < 12){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                            break;
                        }
                    case STICK:
                        ItemStack bat = new ItemStack (Material.STICK);
                        bat.addUnsafeEnchantment(Enchantment.FIRE_ASPECT, 5);
                        bat.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2);
                        bat.addUnsafeEnchantment(Enchantment.THORNS, 5);
                        player.getInventory().addItem(bat);
                        player.sendMessage("§c§lHood §f> §aSelected the §5Power-Bow §akillstreak!");
                        if(kills.get(player) > 16){
                            kills.put(player, kills.get(player) - 16);
                            if(kills.get(player) < 16){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                            break;
                        }
                    case DIAMOND_CHESTPLATE:
                        ItemStack dh = new ItemStack (Material.DIAMOND_HELMET);
                        ItemStack dc = new ItemStack (Material.DIAMOND_CHESTPLATE);
                        ItemStack dl = new ItemStack (Material.DIAMOND_LEGGINGS);
                        ItemStack db = new ItemStack (Material.DIAMOND_BOOTS);
    
                        player.getInventory().setHelmet(dh);
                        player.getInventory().setChestplate(dc);
                        player.getInventory().setLeggings(dl);
                        player.getInventory().setBoots(db);
                        player.sendMessage("§c§lHood §f> §aSelected the §9Juggernaut §akillstreak!");
                        if(kills.get(player) >= 20){
                            kills.put(player, kills.get(player) - 20);
                            if(kills.get(player) < 20){
                                player.sendMessage("§c§lHood §f> §4You cannot afford that killstreak");
                            }
                            break;
                        }
                    default:
                        player.closeInventory();
                        break;
                    }
                }
            }
        }
     
  7. Offline

    AndersonEpic

    k
     
  8. Offline

    stormneo7

    Adding a Killstreak
    Code:
    int nextStreak = kills.contains(player) ? kills.get(player) + 1 : 1;
    kills.put(player, nextStreak);
    // You should really consider storing UUIDs instead of Players....
    Removing a Killstreak
    Code:
    kills.remove(player);
    Checking for a Killstreak
    Code:
    int currentStreak = kills.contains(player) ? kills.get(player) : 0;
    if(currentStreak <= 0) {
    }
    
     
Thread Status:
Not open for further replies.

Share This Page