How to stop players from dropping item with a custom display name

Discussion in 'Plugin Development' started by angry_carrot64, Feb 22, 2014.

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

    angry_carrot64

    I am trying to stop players from dropping a custom named item, i get no errors in my code but i get an error in the console when i drop the item (It does drop through), what am i doing wrong?
    Code:
    [15:51:36 ERROR]: Could not pass event PlayerDropItemEvent to Helper v1.7.4
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.EntityHuman.a(EntityHuman.java:565) [cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.EntityHuman.a(EntityHuman.java:517) [cra
    ftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
    :494) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInBlockDig.a(SourceFile:53) [c
    raftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.PacketPlayInBlockDig.handle(SourceFile:8
    ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
    ) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
    tbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
    55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
    50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
    45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
    :457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
    17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
    Caused by: java.lang.NullPointerException
            at Helper.Help1.onItemDrop(Help1.java:40) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
    _45]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0
    _45]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    .7.0_45]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
            ... 15 more
    Console error



    Code:java
    1. @EventHandler
    2. public void onItemDrop(PlayerDropItemEvent e)
    3. {
    4. Player player = e.getPlayer();
    5. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("test"))
    6. {
    7. player.sendMessage("You cant do this bro :)");
    8. e.setCancelled(true);
    9. }
    10. }
     
  2. Offline

    nuno1212sss

    Code:
    Caused by: java.lang.NullPointerException
            at Helper.Help1.onItemDrop(Help1.java:40) ~[?:?]
    There is the error, if you want more help post the full code.
     
  3. Offline

    xTrollxDudex

    angry_carrot64
    There are lots of things that could be null here:
    - ItemInHand could be null
    - ItemMeta may be null
    - DisplayName could be null
    Make sure the ItemInHand is not null, make sure the ItemInHand hasItemMeta(), and make sure it hasDisplayName as well.
     
    reider45 likes this.
  4. Offline

    angry_carrot64

    would this work? xTrollxDudex
    Code:java
    1. @EventHandler
    2. public void onItemDrop(PlayerDropItemEvent e)
    3. {
    4. Player player = e.getPlayer();
    5. if(e.getPlayer().getItemInHand().hasItemMeta()) return;
    6. if(e.getPlayer().getItemInHand().getItemMeta().hasDisplayName()) return;
    7. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("Test"))
    8. {
    9. player.sendMessage("You cant do this bro :)");
    10. e.setCancelled(true);
    11. }
    12. }

    nuno1212sss
    Code:java
    1. package Helper;
    2.  
    3. import java.util.List;
    4.  
    5. import net.minecraft.server.v1_7_R1.Item;
    6.  
    7. import org.bukkit.event.player.PlayerDropItemEvent;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.Event;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.entity.EntityDeathEvent;
    13. import org.bukkit.inventory.ItemStack;
    14. import org.bukkit.inventory.meta.ItemMeta;
    15. import org.bukkit.event.EventHandler;
    16.  
    17.  
    18. public class Help1 implements Listener
    19. {
    20. @EventHandler
    21. public void onDeath(EntityDeathEvent event){
    22. if(!(event.getEntity() instanceof Player)) return;
    23. Player player = (Player) event.getEntity();
    24. List<ItemStack> drops = event.getDrops();
    25. for(ItemStack item:drops){
    26. if(!(item.hasItemMeta())) return;
    27. ItemMeta meta = item.getItemMeta();
    28. if(!(meta.hasDisplayName())) return;
    29. if(!(meta.getDisplayName().equalsIgnoreCase("Test"))) return;
    30. {
    31. drops.remove(item);
    32. }
    33. }
    34. }
    35.  
    36. @EventHandler
    37. public void onItemDrop(PlayerDropItemEvent e)
    38. {
    39. Player player = e.getPlayer();
    40. if(e.getPlayer().getItemInHand().hasItemMeta()) return;
    41. if(e.getPlayer().getItemInHand().getItemMeta().hasDisplayName()) return;
    42. if(e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("Test"))
    43. {
    44. player.sendMessage("You cant do this bro :)");
    45. e.setCancelled(true);
    46. }
    47. }
    48.  
    49.  
    50. //if(e.getItemDrop().getItemStack().getItemMeta().hasDisplayName()) return;
    51. }
     
  5. Offline

    reider45

    Code:java
    1. if(player.getItemInHand().getItemMeta() != null){
    2. if(player.getItemInHand().getItemMeta().getDisplayName() != null){
    3. if(player.getItemInHand().getItemMeta().getDisplayName().equals("Test")){


    It's something like this i believe, I also think you can remove one of these lines, i just can't remember which. Good luck! :)
     
  6. Offline

    xTrollxDudex

  7. Offline

    alex123099

    if(itemInHand != null && itemInHand.hasItemMeta && hasDisplayName)
    do something
     
    nuno1212sss likes this.
  8. Offline

    angry_carrot64

    reider45 with that code i no longer get an error but the item can still be droped

    Code:java
    1. @EventHandler
    2. public void onItemDrop(PlayerDropItemEvent e)
    3. {
    4. Player player = e.getPlayer();
    5. if(player.getItemInHand() != null) return;
    6. if(player.getItemInHand().getItemMeta() != null) return;
    7. if(player.getItemInHand().getItemMeta().getDisplayName() != null) return;
    8. if(player.getItemInHand().getItemMeta().getDisplayName().equals("Test"))
    9.  
    10. {
    11. player.sendMessage("You cant do this bro :)");
    12. e.setCancelled(true);
    13. }
    14. }
     
  9. Offline

    reider45

    Try using this

    Code:java
    1. @EventHandler
    2. public void onItemDrop(PlayerDropItemEvent e)
    3. {
    4. Player player = e.getPlayer();
    5. if(player.getItemInHand() != null){
    6. if(player.getItemInHand().getItemMeta() != null){
    7. if(player.getItemInHand().getItemMeta().getDisplayName() != null){
    8. if(player.getItemInHand().getItemMeta().getDisplayName().equals("Test"))
    9.  
    10. {
    11. player.sendMessage("You cant do this bro :)");
    12. e.setCancelled(true);
    13. }
    14. }
    15. }
    16. }
    17. }
     
  10. Offline

    angry_carrot64

    reider45 Didnt work nothing shows up in the console but it still allows it to be dropped with the q button
     
  11. Offline

    Minesuchtiiii

    I would use a config:
    Code:java
    1. public class AntiDropListener implements Listener{
    2.  
    3. File file = new File("plugins/DropStop", "DropBlacklist.yml");
    4. FileConfiguration blacklist = YamlConfiguration.loadConfiguration(file);
    5.  
    6. @SuppressWarnings("deprecation")
    7. @EventHandler(priority = EventPriority.HIGHEST)
    8. public void onDrop (PlayerDropItemEvent e) {
    9.  
    10.  
    11. int dropid = e.getItemDrop().getItemStack().getTypeId();
    12.  
    13. if(blacklist.getIntegerList("DropBlacklist").contains(dropid)) {
    14. if(e.getPlayer().isOp()) {
    15. return;
    16.  
    17. }
    18. else
    19. e.setCancelled(true);
    20. }
    21.  
    22. }
    23.  
    24.  
    25. }
     
  12. Offline

    Panjab

    Why is everybody troubling around with the deprecated Magic-Values?
    Just write the getType()-Material.name() into the Config and check it per Material.getMaterial(String name);
     
Thread Status:
Not open for further replies.

Share This Page