Solved NullPointerException Event

Discussion in 'Plugin Help/Development/Requests' started by 2008Choco, Jun 7, 2015.

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

    2008Choco

    I'm having this strange issue of a NullPointerEvent. My event works perfect when the item is exactly what is specified. It's looking for a named item. But when I click on the item that ISN'T named, it gives me an NPE

    Here's my listener class for a PlayerInteractEvent:
    Code:
    package me.choco.conditions.events;
    
    import me.choco.conditions.Conditions;
    import me.choco.conditions.particles.ParticleEffect;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.inventory.ItemStack;
    
    public class PlayerClickEvent implements Listener{
        @EventHandler
        public void onPlayerClick(PlayerInteractEvent event){
            if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK){
                if (event.getPlayer().getItemInHand().getType() == Material.PAPER && event.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.RED + "Bandage")){
                    if (event.getPlayer().getHealth() <= 16){
                        if (Conditions.bleeding.contains(event.getPlayer().getName())){
                            Conditions.bleeding.remove(event.getPlayer().getName());
                            event.getPlayer().setHealth(event.getPlayer().getHealth() + 4);
                            event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "The bandage patched you up! You have stopped bleeding");
                            if (event.getPlayer().getItemInHand().getAmount() > 1){
                                event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                            }//Close if there's more than one bandage
                            else{
                                event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                            }//Close if there's one bandage
                        }//Close if player is currently bleeding
                        else{
                            event.getPlayer().setHealth(event.getPlayer().getHealth() + 4);
                            event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "You were not bleeding, but you seem to have been healed");
                            if (event.getPlayer().getItemInHand().getAmount() > 1){
                                event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                            }//Close if there's more than one bandage
                            else{
                                event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                            }//Close if there's one bandage
                        }//Close if player is not bleeding
                        ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                    }//Close if player has 16 health or less
                    else{
                        if (Conditions.bleeding.contains(event.getPlayer().getName())){
                            if (event.getPlayer().getHealth() == 17){
                                Conditions.bleeding.remove(event.getPlayer().getName());
                                event.getPlayer().setHealth(event.getPlayer().getHealth() + 3);
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "Your bleeding seems to have stopped");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                            }//Close if player's health is 17
                            if (event.getPlayer().getHealth() == 18){
                                Conditions.bleeding.remove(event.getPlayer().getName());
                                event.getPlayer().setHealth(event.getPlayer().getHealth() + 2);
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "Your bleeding seems to have stopped");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                            }//Close if player's health is 18
                            if (event.getPlayer().getHealth() == 19){
                                Conditions.bleeding.remove(event.getPlayer().getName());
                                event.getPlayer().setHealth(event.getPlayer().getHealth() + 1);
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "Your bleeding seems to have stopped");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                            }//Close if player's health is 19
                            if (event.getPlayer().getHealth() == 20){
                                Conditions.bleeding.remove(event.getPlayer().getName());
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "Your bleeding seems to have stopped");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                            }//Close if player's health is 20
                            ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                        }//Close if player is bleeding
                        else{
                            if (event.getPlayer().getHealth() == 17){
                                event.getPlayer().setHealth(event.getPlayer().getHealth() + 3);
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "You were not bleeding, but you seem to have been healed");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                                ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                            }//Close if player's health is 17
                            if (event.getPlayer().getHealth() == 18){
                                event.getPlayer().setHealth(event.getPlayer().getHealth() + 2);
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "You were not bleeding, but you seem to have been healed");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                                ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                            }//Close if player's health is 18
                            if (event.getPlayer().getHealth() == 19){
                                event.getPlayer().setHealth(event.getPlayer().getHealth() + 1);
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "You were not bleeding, but you seem to have been healed");
                                if (event.getPlayer().getItemInHand().getAmount() > 1){
                                    event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                                }//Close if there's more than one bandage
                                else{
                                    event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                                }//Close if there's one bandage
                                ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                            }//Close if player's health is 19
                            if (event.getPlayer().getHealth() == 20){
                                event.getPlayer().sendMessage(ChatColor.DARK_RED + "Condition> " + ChatColor.GRAY + "You can't use a bandage at this time");
                            }//Close if player's health is 20
                        }//Close if player is not bleeding
                    }//Close if player has 17, 18, 19, or full health
                }//Close if held item is a "bandage"
               
                if (event.getPlayer().getItemInHand().getType() == Material.GHAST_TEAR && event.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.GREEN + "Infection Cure")){
                    if (Conditions.infected.contains(event.getPlayer().getName())){
                        Conditions.infected.remove(event.getPlayer().getName());
                        event.getPlayer().sendMessage(ChatColor.DARK_GREEN + "Condition> " + ChatColor.GRAY + "The cure worked! You're no longer infected!");
                        if (event.getPlayer().getItemInHand().getAmount() > 1){
                            event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                        }//Close if there's more than one bandage
                        else{
                            event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                        }//Close if there's one bandage
                        ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                    }//Close if player is currently infected
                    else{
                        event.getPlayer().sendMessage(ChatColor.DARK_GREEN + "Condition> " + ChatColor.GRAY + "You're not infected. Save this for later");
                        event.setCancelled(true);
                    }//Close if player is not infected
                }//Close if held item is a "Infection Cure"
               
                if (event.getPlayer().getItemInHand().getType() == Material.RED_ROSE && event.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.LIGHT_PURPLE + "Flower of Purity")){
                    if (Conditions.mystified.contains(event.getPlayer().getName())){
                        Conditions.mystified.remove(event.getPlayer().getName());
                        event.getPlayer().sendMessage(ChatColor.DARK_GRAY + "Condition> " + ChatColor.GRAY + "You are now purified from the darkness inside");
                        if (event.getPlayer().getItemInHand().getAmount() > 1){
                            event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                        }//Close if there's more than one flower of purity
                        else{
                            event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                        }//Close if there's one bandage
                        ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                    }//Close if player is currently mystified
                    else{
                        event.getPlayer().sendMessage(ChatColor.DARK_GRAY + "Condition> " + ChatColor.GRAY + "You're not mystified. Save this for later");
                        event.setCancelled(true);
                    }//Close if player is not mystified
                }//Close if held item is a "Flower of Purity"
               
                if (event.getPlayer().getItemInHand().getType() == Material.WEB && event.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_GRAY + "I promise. It helps")){
                    if (Conditions.arachnophobic.contains(event.getPlayer().getName())){
                        Conditions.arachnophobic.remove(event.getPlayer().getName());
                        event.getPlayer().sendMessage(ChatColor.DARK_GRAY + "Condition> " + ChatColor.GRAY + "Told you it would work! Your fear for spiders subsides");
                        if (event.getPlayer().getItemInHand().getAmount() > 1){
                            event.getPlayer().getItemInHand().setAmount(event.getPlayer().getItemInHand().getAmount() - 1);
                        }//Close if there's more than one bandage
                        else{
                            event.getPlayer().getInventory().setItemInHand(new ItemStack(Material.AIR));
                        }//Close if there's one bandage
                        ParticleEffect.VILLAGER_HAPPY.display((float) 0.1, (float)0.55, (float)0.1, (float)0.1, 25, event.getPlayer().getLocation().add(0, 1, 0), event.getPlayer());
                    }//Close if player is currently infected
                    else{
                        event.getPlayer().sendMessage(ChatColor.DARK_GRAY + "Condition> " + ChatColor.GRAY + "You shouldn't need this yet. Save it for later");
                        event.setCancelled(true);
                    }//Close if player is not infected
                }//Close if held item is a "Infection Cure"
            }//Close if action is a right click
        }//Close onPlayerClick event
    }//Close class
     
  2. Offline

    I Al Istannen

    @2008Choco The item in the player hand can be null. Not every item has an ItemMeta. Not every itemmeta has an DisplayName. Do null or "x.hasItemMeta()", "x.hasDisplayName()" checks.
     
  3. Offline

    2008Choco

    Thank you @I Al Istannen Absolutely overlooked that. That's my bad
     
Thread Status:
Not open for further replies.

Share This Page