Solved Error on inventory click

Discussion in 'Plugin Development' started by WATWtomanik3, Jul 23, 2015.

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

    WATWtomanik3

    Picture of error:
    [​IMG]
    http://gyazo.com/9f2a08a64b905e77d9af00b3a8b211a4

    InventoryClickEvent2:

    Code:
    // IRON INGOT INVENTORY INTERACT || (CLICK) \\
        @SuppressWarnings("unused")
        @EventHandler
        public void onInventoryClick2(InventoryClickEvent event) {
            Player player = (Player) event.getWhoClicked();
            ItemStack clicked = event.getCurrentItem();
            Inventory inventory = event.getInventory();
            PlayerInventory pi = player.getInventory();
          
                    if (clicked.getType() == Material.IRON_INGOT) {
                      
                        VIPplus.setItem(0, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Hub", Arrays.asList("", "", "")));
                        VIPplus.setItem(1, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Skyblock", Arrays.asList("", "", "")));
                        VIPplus.setItem(2, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Factions", Arrays.asList("", "", "")));
                        VIPplus.setItem(3, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Kitpvp", Arrays.asList("", "", "")));
                        VIPplus.setItem(8, createItem2(Material.ARROW, 1, (short) 0, ChatColor.GREEN + "Close", Arrays.asList("", "§8Closes this menu!", "")));
                      
                        player.openInventory(VIPplus);
                      
                        event.setCancelled(true);
                      
                        }
                  }
    Line that error says theres a problem on: (1228)

    Code:
    if (clicked.getType() == Material.IRON_INGOT) {

    Thanks for helping me :)
     
  2. Offline

    schwabfl

    InventoryClickEvent is called when the player clicks whenever he's in an inventory (even if he is clicking outside of the inventory)
    If that's the case, then e.getCurrentItem() will be null because the player did not click on an Item
    insert a != null check to fix this
     
  3. Offline

    WATWtomanik3

    @schwabfl you mean like that ?

    Code:
        // IRON INGOT INVENTORY INTERACT || (CLICK) \\
        @SuppressWarnings("unused")
        @EventHandler
        public void onInventoryClick2(InventoryClickEvent event) {
            Player player = (Player) event.getWhoClicked();
            ItemStack clicked = event.getCurrentItem();
            Inventory inventory = event.getInventory();
            PlayerInventory pi = player.getInventory();
           
                    if (clicked.getType() == Material.IRON_INGOT) {
                       
                        VIPplus.setItem(0, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Hub", Arrays.asList("", "", "")));
                        VIPplus.setItem(1, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Skyblock", Arrays.asList("", "", "")));
                        VIPplus.setItem(2, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Factions", Arrays.asList("", "", "")));
                        VIPplus.setItem(3, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Kitpvp", Arrays.asList("", "", "")));
                        VIPplus.setItem(8, createItem2(Material.ARROW, 1, (short) 0, ChatColor.GREEN + "Close", Arrays.asList("", "§8Closes this menu!", "")));
                       
                        player.openInventory(VIPplus);
                       
                        event.setCancelled(true);
                       
                        } else {
                           
                            if (clicked.getType() != null) {
                               
                                // BLA BLA
                               
                            }
                        }
                  }
     
  4. Offline

    DoggyCode™

    @WATWtomanik3 I don't think that's what he ment.. Hmm, I'll edit the code and show you a correct one
     
  5. Offline

    WATWtomanik3

  6. Offline

    DoggyCode™

    @WATWtomanik3, here you go.. me spoonfeeding again. Sorry @megamichiel !
    Code:
         
            @EventHandler
            public void onClick(InventoryClickEvent event) {
                Player p = (Player) event.getWhoClicked();
                ItemStack clicked = event.getCurrentItem();
                String invName = event.getInventory().getName();
             
                if(invName.equals("the inventory's name")||invName.equals("another inventory's name")||invName.equals("and so you can go on")) {
                    event.setCancelled(true);
                   //instead of cancelling the event everytime down there, just type your inventory's names. You can add more by using || like shown above
                 
                  if(event.getCurrentItem() == null) {
                      //^ here's the thing that he ment
                      return;
                  }
               
                  if(!event.getCurrentItem().hasItemMeta()) {
                      return;
                  }
                  if(clicked.getType()== Material.IRON_INGOT) {
                       VIPplus.setItem(0, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Hub", Arrays.asList("", "", "")));
                       VIPplus.setItem(1, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Skyblock", Arrays.asList("", "", "")));
                       VIPplus.setItem(2, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Factions", Arrays.asList("", "", "")));
                       VIPplus.setItem(3, createItem2(Material.BOOK, 1, (short) 0, ChatColor.GREEN + "Kitpvp", Arrays.asList("", "", "")));
                       VIPplus.setItem(8, createItem2(Material.ARROW, 1, (short) 0, ChatColor.GREEN + "Close", Arrays.asList("", "§8Closes this menu!", "")));
                   
                       player.openInventory(VIPplus);
                       return;
                  } else if(clicked.getType()== Material.GOLD_INGOT) {
                      //do more if the player clicks another item in your GUI
                      //you can add more else if statements to continue...
                      return;
                  }
                }
                return;
            }
    
    hope this helped! It's a much better method
     
  7. Offline

    WATWtomanik3

Thread Status:
Not open for further replies.

Share This Page