InventoryClick/DragEvent not canceling.

Discussion in 'Plugin Development' started by quinster08, Feb 1, 2015.

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

    quinster08

    Hey I try to cancel InventoryClick and DragEvent on a special item but it doesn't work. :/

    Code:
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
            Player p = (Player) e.getPlayer();
            ItemStack i = new ItemStack(Material.ENDER_CHEST, 1);
            ItemMeta iMeta = i.getItemMeta();
            iMeta.setDisplayName(ChatColor.DARK_PURPLE + "echest");
            i.setItemMeta(iMeta);
            p.getInventory().setItem(8, i);
        }
        @EventHandler
        public void onDrag(InventoryDragEvent e) {
            Player p = (Player) e.getWhoClicked();
            if(p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_PURPLE + "echest")) {
                e.setCancelled(true);
            }
        }
        @EventHandler
        public void onClick(InventoryClickEvent e) {
            Player p = (Player) e.getWhoClicked();
            if(p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_PURPLE + "echest")) {
                e.setCancelled(true);
            }
        }
    And yes everything is listenerd.
     
  2. @quinster08 For the onDrag and onClick events, you're getting the players item in their hand. You're also not checking when the player clicks on something that is null, doesn't have item meta, or is air. When a player does click on something like that, you'll get a lot of stack traces.
     
    quinster08 likes this.
  3. Offline

    quinster08

    @CodePlaysMinecraft Thanks, fixed it! If(p.blblalba == null)) { return; ty! Forgot that.

    @CodePlaysMinecraft Ahw, its not working well it is but now all items get canceled.
    Code:
        @EventHandler
        public void onDrag(InventoryDragEvent e) {
            Player p = (Player) e.getWhoClicked();
            if(p.getItemInHand().getItemMeta().getDisplayName() == null) {
                return;
            }
            if(p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_PURPLE + "echest")) {
                e.setCancelled(true);
            }
        }
        @EventHandler
        public void onClick(InventoryClickEvent e) {
            Player p = (Player) e.getWhoClicked();
            if(p.getItemInHand().getItemMeta().getDisplayName() == null) {
                return;
            }
            if(p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_PURPLE + "echest")) {
                e.setCancelled(true);
            }
        }
    EDIT by Timtower: merged posts
     
    Last edited by a moderator: Feb 1, 2015
  4. Try instead of checking if the color is purple, try ChatColor.stripcolor and just check if the name is correct.
     
  5. Offline

    quinster08

    Code:
        @EventHandler
        public void onDrag(InventoryDragEvent e) {
            Player p = (Player) e.getWhoClicked();
            if(p.getItemInHand().getItemMeta().getDisplayName() == null) {
                return;
            }
            if(p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.stripColor("echest"))) {
                e.setCancelled(true);
            }
        }
        @EventHandler
        public void onClick(InventoryClickEvent e) {
            Player p = (Player) e.getWhoClicked();
            if(p.getItemInHand().getItemMeta().getDisplayName() == null) {
                return;
            }
            if(p.getItemInHand().getItemMeta().getDisplayName().equals(ChatColor.stripColor("echest"))) {
                e.setCancelled(true);
            }
        }
    @CodePlaysMinecraft That doenst work.
     
  6. Offline

    quinster08

    Pls help anyone?
     
  7. @quinster08 Instead of getting the players item in their hand, get their inventory and check for the item. If the item is being clicked on, cancel the event.
     
  8. Offline

    1Rogue

Thread Status:
Not open for further replies.

Share This Page