java nullpointerexception in Player_Interact_Event 2

Discussion in 'Plugin Development' started by matter123, Apr 28, 2011.

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

    matter123

    ok when i remove the commented lines from this code i get a nullpointerexception when i rightclick a block when i leave the comments in it works
    what is wrong with it
    Code:
    package com.matter123.signchest;
    
    import net.minecraft.server.EntityPlayer;
    import net.minecraft.server.IInventory;
    
    import org.bukkit.Material;
    import org.bukkit.block.Chest;
    import org.bukkit.block.Sign;
    import org.bukkit.craftbukkit.entity.CraftPlayer;
    import org.bukkit.craftbukkit.inventory.CraftInventory;
    import org.bukkit.entity.Player;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerChatEvent;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.event.player.PlayerListener;
    import org.bukkit.inventory.Inventory;
    
    public class listener extends PlayerListener{
        @Override
        public void onPlayerChat(PlayerChatEvent event) {
            if(signchest.readchat.contains(event.getPlayer())) { //name chest time
                event.setCancelled(true);
                if(!event.getMessage().equalsIgnoreCase("quit")) {
                    signchest.map.put(event.getMessage(), signchest.tempmap.get(event.getPlayer()).getInventory());
                    event.getPlayer().sendMessage("chest name set to "+event.getMessage());
                }else {
                    event.getPlayer().sendMessage("chest name not set");
                }
                signchest.tempmap.remove(event.getPlayer());
                signchest.readchat.remove(event.getPlayer());
            }
        }
    
        @Override
        public void onPlayerInteract(PlayerInteractEvent event) {
            if(event.getAction()==Action.RIGHT_CLICK_BLOCK) {
    //            if(event.getItem().getTypeId()==signchest.config().getwand()) {
                    if(event.getClickedBlock().getType()==Material.CHEST) { //take over time
                        event.setCancelled(true);
                        Chest c=((Chest)event.getClickedBlock().getState());
                        signchest.tempmap.put(event.getPlayer(), c);
                        signchest.readchat.add(event.getPlayer());
                        event.getPlayer().sendMessage("enter chest name or quit to cancel");
                    }
    //            }else if(event.getClickedBlock().getType()==Material.SIGN) {
    //                Sign s=((Sign)event.getClickedBlock().getState());
    //                if(s.getLine(0).equalsIgnoreCase("[signchest]")) {
    //                    Inventory inventory=signchest.map.get(s.getLine(1));
    //                    Player player=event.getPlayer();
    //                    CraftPlayer cp = (CraftPlayer) player;
    //                    EntityPlayer ep = cp.getHandle();
    //                    IInventory inv = ((CraftInventory) inventory).getInventory(); // You can skip this line if you have a custom class implementing IInventory.
    //                    ep.a(inv);
    //
    //                }
    //            }
            }
        }
    
        private signchest signchest;
        public listener(signchest signchest) {
            this.signchest = signchest;
        }
    }
    
    and errorlog:
    Code:
    17:30:54 [SEVERE] Could not pass event PLAYER_INTERACT to remotechest
    java.lang.NullPointerException
            at com.matter123.signchest.listener.onPlayerInteract(listener.java:37)
            at org.bukkit.plugin.java.JavaPluginLoader$9.execute(JavaPluginLoader.ja
    va:254)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:59)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:257)
            at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEven
    t(CraftEventFactory.java:162)
            at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.j
    ava:207)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:519)
            at net.minecraft.server.Packet15Place.a(SourceFile:57)
            at net.minecraft.server.NetworkManager.a(NetworkManager.java:195)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:74)
            at net.minecraft.server.NetworkListenThread.a(SourceFile:100)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:370)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:285)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:394)
     
  2. Offline

    Windwaker

    What exactly are you trying to do here?
     
  3. Offline

    matter123

    well when i right click on a chest give it a name and add it to a hashmap
    and when some one right clicks on a sign in this format


    [signchest]
    name

    display the chest with that name
     
  4. Offline

    Evenprime

    Simple. You use
    Code:
    event.getItem().getTypeId()
    
    without first verifying that the event has a item attached to it (if somebody rightclicks with no item in hand the getItem() method will return null). Using one of these two instead should fix your problem:

    Code:
     event.hasItem() && event.getItem().getTypeId()
    
    event.getItem() != null && event.getItem().getTypeId() 
    
     
  5. Offline

    matter123

    ok thank you
     
  6. Offline

    Windwaker

    My advice to you is not to copy and paste a template. What I like to do is break it down line by line and try to assess it. Makes your code a lot cleaner and makes it feel like your own.
     
  7. Offline

    matter123

    what template walker i didnt use a template
     
  8. Offline

    Windwaker

    Oh sorry then, it just looks like a template to me I guess with something added... Disregard then.
     
Thread Status:
Not open for further replies.

Share This Page