PlayerDropItemEvent wtf?

Discussion in 'Plugin Development' started by spiroulis, Feb 14, 2014.

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

    spiroulis

    hey so im trying to make a soup called refill and a diamond called op 1v1 undropable but everytime i try to drop these 2 items i get this error:
    Code:
    [Server thread/ERROR]: Could not pass event PlayerDropItemEvent to 1v1 v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.EntityHuman.a(EntityHuman.java:565) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.EntityHuman.a(EntityHuman.java:517) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:495) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInBlockDig.a(SourceFile:53) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInBlockDig.handle(SourceFile:8) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:651) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:541) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:453) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
    Caused by: java.lang.NullPointerException
        at me.spiroulis.onevone.onevone.onItemDrop(onevone.java:182) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_51]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_51]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        ... 15 more
    [20:44:13] [Server thread/ERROR]: Could not pass event PlayerDropItemEvent to 1v1 v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.EntityHuman.a(EntityHuman.java:565) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.EntityHuman.a(EntityHuman.java:517) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:495) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInBlockDig.a(SourceFile:53) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInBlockDig.handle(SourceFile:8) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:651) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:541) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:453) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
    Caused by: java.lang.NullPointerException
        at me.spiroulis.onevone.onevone.onItemDrop(onevone.java:182) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_51]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_51]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.6.4-R2.0-38-g4b4e2cc-b2953jnks]
        ... 15 more
    
    Here's my code:
    Code:java
    1. @EventHandler
    2. public void onItemDrop(PlayerDropItemEvent event){
    3. Player player = event.getPlayer();
    4. if(isIn1v1.contains(player)){
    5. if(player.getItemInHand().getType() == Material.MUSHROOM_SOUP){
    6. if(player.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_RED + "Refill")){
    7. event.setCancelled(true);
    8. }
    9. }
    10. if(player.getItemInHand().getType() == Material.DIAMOND){
    11. if (player.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_RED + "OP 1v1")) {
    12. event.setCancelled(true);
    13. }
    14. }
    15. }
    16. }
     
  2. Offline

    HariHD

    Show us line 182
     
  3. Offline

    xTigerRebornx

    spiroulis Use event.getItemDrop() to get the Item, which you can get an ItemStack from. Preform your checks on that, as when they drop something, the iteminhand will be nothing. Also, check if the Item actually has ItemMeta before trying to get it
     
    Garris0n likes this.
  4. Offline

    Garris0n

    Try event.getItemDrop().getItemStack(), I think (for some stupid reason) the event is called after the item leaves their inventory. Likely also what causes the incredibly annoying bug where the item goes to the wrong slot when it's cancelled.
     
  5. Offline

    xTigerRebornx

    Garris0n Would love to hear the reasoning for that.....
     
  6. Offline

    Garris0n

    I have no idea, perhaps so you're able to get the item entity from it. Either way, this line right here makes me endlessly angry.
     
  7. Offline

    alex123099

    I'm guessing getItemMeta() returns a null gets
     
  8. Offline

    Sabersamus


    getItemMeta shouldn't return null, as when its called, if theres no meta a new meta is created. HOWEVER, getDisplayName CAN return null.

    spiroulis

    Code:java
    1.  
    2. ItemMeta meta = item.getMeta();
    3. if(meta.hasDisplayName() && meta.getDisplayName().equalsIgnoreCase("whatever")){
    4. //do code
    5. }
    6.  
     
  9. Offline

    Arche

    getItemMeta() never returns null as the ItemMeta object is constructed as the method is called. getDisplayName(), however, may return null, and should be preceded by a hasDisplayName() check (or alternatively constructing a static String containing the item names, and invoking equals on this String with the displayName as the passed argument.)
     
  10. Offline

    coasterman10

    There are a couple of things that could be null:
    - player.getItemInHand()
    - player.getItemInHand().getItemMeta().getDisplayName()

    For the first, use event.getItemDrop().getItemStack(). For the second case, check for getItemMeta().hasDisplayName() in another if statement.
     
  11. Offline

    Badeye

    You can avoid a npe with checking if something is not null, but do it in strings. So dont check it like this:
    Code:java
    1. if(player.getItemInHand() != null){
    2. //Code
    3. }


    Do it this way:
    Code:java
    1. if(String.valueOf(player.getItemInHand()) != "null"){
    2. //Code
    3. }
     
  12. Offline

    Garris0n

    Why?
     
  13. Offline

    Badeye

    Garris0n otherwise you will get a npe
     
  14. Offline

    desht

    This makes no sense whatsoever. It's perfectly OK to compare getItemInHand() with null directly.
     
    werter318 and Garris0n like this.
  15. Offline

    Badeye

    desht for me it never worked, comparing the string always did. I know that sounds weird but if there are problems concerning this, try it out.
     
  16. Offline

    Garris0n

    That makes no sense and you were likely doing something wrong.
     
  17. Offline

    Badeye

    That may be true :D And what didn't worked for me was comparing e.getPlayer().getInventory().getItem(i) with null, where i is an integer number. It worked however with toString.... (PlayerDropItemEvent)
     
Thread Status:
Not open for further replies.

Share This Page