Removing items when dropped

Discussion in 'Plugin Development' started by MYCRAFTisbest, Nov 11, 2012.

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

    MYCRAFTisbest

    I am trying to make it so when a player drops wool, it will delete the item from existence.

    Code:
    package com.pl.MYCRAFTisbest.UAgf;
     
    import java.util.logging.Logger;
     
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class UAgf extends JavaPlugin implements Listener {
     
        private static final Logger log = Logger.getLogger("UAgf");
        @EventHandler (priority = EventPriority.NORMAL)
        public void PlayerDropItemEvent(Player player, Item item){
           
            int drop = item.getEntityId();
            log.info("Item dropped. Id: " + drop);
            if (drop == 35){
              ((Player)player).sendMessage(ChatColor.GREEN + "Test Complete");
            }
        }
       
    }
    The above code it my test code but the logger contains no info and the player gets no message when dropping any item.
     
  2. Offline

    Deleted user


    Here ya go :D

    Code:
    @EventHandler
    public void onPlayerDropItem(PlayerDropItemEvent event) {
    if (event.getItemDrop().getItemStack().getType() == Material.WOOL) {
    event.setCancelled(true);
    event.getPlayer().sendMessage("You may not drop wool.");
    }
    }
    
    Edit:

    Woopse my bad didn't read throughly just replace the line

    Code:
    event.setCancelled(true);
    
    with

    Code:
    event.getItemDrop().getItemStack().setType(Material.AIR);
    
    That will turn the wool into air so basically the item is deleted.

    Edit edit:

    Looking through your code.. it's a bit weird my friend haha. First of all where is your event? Second of all why are you casting to a Player on sendMessage? Just use event.getPlayer().sendMessage() silly :p
     
    Liutenantpickle likes this.
  3. Offline

    MYCRAFTisbest

    Thanks

    Yeah i am tired so i didn't remember it (therefore the problem :p)

    And for casting Player to player which was already player.... well i thought it would magicly help somehow

    Still not working right
    Code:
    import org.bukkit.Material;
    import java.util.logging.Logger;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerDropItemEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class UAgf extends JavaPlugin implements Listener {
     
        private static final Logger log = Logger.getLogger("UAgf");
       
        @EventHandler (priority = EventPriority.NORMAL)
        public void onPlayerDropItem(PlayerDropItemEvent event) {
            log.info("ITEM DROPED ID: " + event.getItemDrop().getItemStack().getTypeId());
           
        if (event.getItemDrop().getItemStack().getType() == Material.WOOL) {
        event.getItemDrop().getItemStack().setType(Material.AIR);
        event.getPlayer().sendMessage("[MC-Minigames] Wool eradicated");
        }
        }
       
    }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 29, 2016
  4. Offline

    Kodfod

    Would it not be simpler to just stop the event and then delete it from the inventory?
     
  5. Offline

    the_merciless

    Don't forget to register your events. You will need an onEnable for that
     
  6. Offline

    MYCRAFTisbest

    :p I always forget the simple stuff

    Still not working, now it adds the message, but the wool still drops. What am I doing wrong?
    Code:
    import org.bukkit.Material;
    import java.util.logging.Logger;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerDropItemEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class UAgf extends JavaPlugin implements Listener {
     
        private static final Logger log = Logger.getLogger("UAgf");
        public void onEnable(){   
            getServer().getPluginManager().registerEvents(this, this);
        }
        @EventHandler (priority = EventPriority.NORMAL)
        public void onPlayerDropItem(PlayerDropItemEvent event) {
            log.info("ITEM DROPED ID: " + event.getItemDrop().getItemStack().getTypeId());
           
        if (event.getItemDrop().getItemStack().getType() == Material.WOOL) {
            event.getItemDrop().getItemStack().setType(Material.AIR);
            event.getPlayer().sendMessage("[MC-Minigames] Wool eradicated");
            }
        }
       
    }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 29, 2016
  7. try this instead:
    event.getItemDrop().getItemStack().setAmount(0);
     
  8. Offline

    xViiRuZ

    I know this post is kinda OLD. Tho there could be someone looking for a solution to this problem.
    Code:java
    1. @EventHandler
    2. public void onDrop(PlayerDropItemEvent event) {
    3. if (event.getItemDrop().getItemStack().getType() == Material.WOOL) {
    4. event.getItemDrop().remove();
    5. }


    *Tested* and it worked! Hope this helps somebody after so long time!
     
  9. Offline

    the_merciless

    You would also need to check for a player dropping the item outside if the inventory screen. To do this use inventoryClickEvent, and check if event().getRawSlot() = -999 this tells you that the player clicked outside the inv screen
     
  10. Offline

    Cycryl

    the_merciless
    nope it still counts this way of dropping as the same event
     
  11. Offline

    the_merciless


    Are you sure. I'm sure i had to add this in to a plugin i made to block all drops.

    Edit: You right, I had added that code but removed it due to it not being necessary.
     
Thread Status:
Not open for further replies.

Share This Page