Bukkit NPE по време на PlayerInteractEvent

Получавам NPE (изключение за нулев указател), когато поставям всеки друг елемент, различен от тези, които съм дефинирал, или когато пия от кофа с мляко. Опитах се да добавя isCanceled() == false към моя EventHandler, но това прекъсва действието ми RIGHT_CLICK_AIR. Съжаляваме, звучи малко сложно, може да бъде предоставена допълнителна информация, благодаря предварително!

@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInteract(PlayerInteractEvent event) {
    Player p = event.getPlayer();
    Location location = p.getLocation();
    ItemStack item = event.getItem();
if(event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK && event.hasItem() != false || event.isCancelled() == true) {

person caycehouse    schedule 29.04.2013    source източник
comment
Опитайте да разбиете операторите си if, за да намерите логически грешки. Освен това можете да игнорирате отменени събития, като използвате @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)   -  person Jared    schedule 30.04.2013
comment
Можете ли да ни покажете проследяването на стека си? И бихте ли ни показали повече от кода?   -  person Kezz    schedule 06.05.2013
comment
Вашият код е фундаментално грешен: той ще се изпълни само ако събитието е отменено, в който случай няма да получите събитието на първо място (нямате ignoredCancelled = true). Моля, публикувайте пълното съдържание на onPlayerInteract.   -  person Xyene    schedule 31.05.2013


Отговори (1)


Мисля, че е заради този ред:

ItemStack item = event.getItem();

Когато играчът не държи предмет, той връща нула. Опитайте нулева проверка, за да видите дали има предмет в ръката им.

if (event.getItem() != null)){
   //do stuff
}
else{
   //don't do it
}
person user2611763    schedule 23.07.2013