InventoryClickEvent Problems

Discussion in 'Plugin Development' started by Weasel_Squeezer, Mar 6, 2013.

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

    Weasel_Squeezer

    I am having problems properly canceling the inventory click event when a player clicks their armor. I need to have it so that they cannot take of their armor.
    Here is what I have:
    Code:java
    1. @EventHandler
    2. public void onInventoryClick(InventoryClickEvent event) {
    3. if (event.getWhoClicked() instanceof Player) {
    4. Player player = (Player)event.getWhoClicked();
    5. if (player.hasPermission("sorcerermanager.sorcerer")) {
    6. player.sendMessage(event.getSlot() + "");
    7. if (event.getSlotType().equals(SlotType.ARMOR)) {
    8. player.sendMessage("blah");
    9. if (!event.getCursor().getType().equals(Material.AIR)) {
    10. //event.setCancelled(true);
    11. event.setCurrentItem(event.getCursor());
    12. event.setCursor(new ItemStack(Material.AIR));
    13. player.updateInventory();
    14. }
    15.  
    16. }
    17. }
    18.  
    19. }
    20. }

    I have not gotten it to work and I have tried many different things. right now with this code, it registers the even if you try to put something into the armor slot, but not take something from it...
     
  2. Offline

    ZeusAllMighty11

    Why are you trying to set the slot to air, why not just cancel the event?
     
  3. Offline

    Weasel_Squeezer

    because that does nothing that I would expect it to. it does weird things like remove other pieces of armor.
     
  4. Offline

    ZeusAllMighty11

    Weasel_Squeezer

    Code:
        @EventHandler(priority = EventPriority.NORMAL)
        public void onClick(InventoryClickEvent event)
        {
            if(event.getSlotType() == InventoryType.SlotType.ARMOR)
            {
                event.setCancelled(true);
            }
        }
    
     
  5. Offline

    Weasel_Squeezer

    nope. same result. this is most annoying

    wait that works now, but now I am having problems with removing items from dropping on death.
    Here is what I have:

    Code:java
    1. private ItemStack helmet = new ItemStack(Material.CHAINMAIL_HELMET);
    2. private ItemStack chestplate = new ItemStack(Material.CHAINMAIL_CHESTPLATE);
    3. private ItemStack leggings = new ItemStack(Material.CHAINMAIL_LEGGINGS);
    4. private ItemStack boots = new ItemStack(Material.CHAINMAIL_BOOTS);
    5.  
    6. @EventHandler
    7. public void onPlayerDeath(PlayerDeathEvent event) {
    8. if (event.getEntity().hasPermission("sorcerermanager.sorcerer")) {
    9. for (int i=0; i<event.getDrops().size(); i++) {
    10. if (event.getDrops().get(i).equals(helmet) || event.getDrops().get(i).equals(chestplate)
    11. || event.getDrops().get(i).equals(leggings) || event.getDrops().get(i).equals(boots)) {
    12. event.getDrops().remove(i);
    13. }
    14. }
    15. }
    16. }


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 31, 2016
  6. Offline

    Tirelessly

    Can't remove from a list while iterating through it without using an iterator object.
     
Thread Status:
Not open for further replies.

Share This Page