Null Point Exception

Discussion in 'Plugin Development' started by iWareWolf, Jan 20, 2013.

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

    iWareWolf

    I am getting a null point error and my code doesn't work. It doesn't check if I have a enchanted book named something.
    Error
    Code:
    2013-01-21 02:41:23 [SEVERE] Could not pass event PlayerInteractEvent to Magic Book v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at org.bukkit.craftbukkit.v1_4_6.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:178)
        at net.minecraft.server.v1_4_6.PlayerInteractManager.interact(PlayerInteractManager.java:376)
        at net.minecraft.server.v1_4_6.PlayerConnection.a(PlayerConnection.java:656)
        at net.minecraft.server.v1_4_6.Packet15Place.handle(SourceFile:58)
        at net.minecraft.server.v1_4_6.NetworkManager.b(NetworkManager.java:290)
        at net.minecraft.server.v1_4_6.PlayerConnection.d(PlayerConnection.java:112)
        at net.minecraft.server.v1_4_6.ServerConnection.b(SourceFile:39)
        at net.minecraft.server.v1_4_6.DedicatedServerConnection.b(SourceFile:30)
        at net.minecraft.server.v1_4_6.MinecraftServer.r(MinecraftServer.java:598)
        at net.minecraft.server.v1_4_6.DedicatedServer.r(DedicatedServer.java:224)
        at net.minecraft.server.v1_4_6.MinecraftServer.q(MinecraftServer.java:494)
        at net.minecraft.server.v1_4_6.MinecraftServer.run(MinecraftServer.java:427)
        at net.minecraft.server.v1_4_6.ThreadServerApplication.run(SourceFile:849)
    Caused by: java.lang.NullPointerException
        at Listener.MagicListener.onInteract(MagicListener.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 16 more
    Code
    Code:
    package Listener;
     
    import me.Magic.Magic;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.SmallFireball;
    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;
    import org.bukkit.inventory.meta.ItemMeta;
     
    public class MagicListener implements Listener {
        private Magic plugin;
     
        public MagicListener(Magic plugin) {
            this.plugin = plugin;
        }
     
        @EventHandler
        public void onInteract(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            ItemStack hand = p.getItemInHand();
            ItemMeta newStick = hand.getItemMeta();
            if (hand.getTypeId() == 280
                    && newStick.getDisplayName().equals("Wand") && hand.getType() != null) {
                if (e.getAction() == Action.RIGHT_CLICK_AIR
                        || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    int Slot = 0;
                    while (p.getInventory().getItem(Slot) != new ItemStack(
                            Material.BOOK) && Slot < 35) {
                        Slot++;
                    }
                    if (p.getInventory().getItem(Slot) == new ItemStack(
                            Material.ENCHANTED_BOOK)) {
                        ItemStack book = p.getInventory().getItem(Slot);
                        ItemMeta newBook = book.getItemMeta();
                        if (newBook.getDisplayName().equals("Spell Book of Fireball")
                                && !(newBook.hasEnchants())) {
                            p.getInventory().remove(Slot);
                            if (p.getFoodLevel() > 2) {
                                p.setFoodLevel(p.getFoodLevel() - 2);
                                p.sendMessage("You have casted Fireball!");
                                SmallFireball fireball = p
                                        .launchProjectile(SmallFireball.class);
                                fireball.setShooter(p);
                                fireball.setYield(2);
                                fireball.setBounce(false);
                            } else {
                                p.sendMessage(ChatColor.RED
                                        + "Your current mana level is too low to cast this spell");
                            }
                        }
                        if (newBook.getDisplayName().equals("Spell Book of Health")
                                && !(newBook.hasEnchants())) {
                            p.getInventory().remove(Slot);
                            if (p.getFoodLevel() > 10) {
                                if (p.getHealth() < 12) {
                                    p.setHealth(20);
                                }
                                if (p.getHealth() > 12) {
                                    p.setHealth(p.getHealth() + 8);
                                }
                                p.setFoodLevel(p.getFoodLevel() - 15);
                                p.sendMessage("You have casted Regen!");
                            } else {
                                p.sendMessage(ChatColor.RED
                                        + "Your current mana level is too low to cast this spell");
                            }
                        }
                    }
                    else{
                        p.sendMessage("You need " + ChatColor.BLUE + "Spell Books" + ChatColor.WHITE + " to use the wand!");
                    }
                }
            }
        }
    }
    
     
  2. Offline

    RealDope

    "hand" doesn't have a display name. Add a check for that first using hand.hasDisplayName()
     
  3. Offline

    EnvisionRed

    Also, check if hand.getType is null before checking if hand.getTypeId == 280.
     
  4. Offline

    iWareWolf

    RealDope
    It works, when I right click with a stick named "Wand" but when I get this error when I right click with a normal stick. Also when I do it, it doesn't detect the Enchanted Book.
     
  5. Offline

    RealDope

    Yes because when you right click with a regular stick it doesn't have a display name. You have to do the check like I told you.
     
Thread Status:
Not open for further replies.

Share This Page