从库存中获取ItemStack的空指针异常

时间:2016-08-01 12:15:12

标签: java minecraft bukkit

我收到了这个错误,老实说我不知道​​该怎么做才能修复它,我已经尝试了我能想到的一切。

代码是检查玩家的启动槽,看看他是否有钻石靴,如果有钻石靴,则将其设置为空气,因为它是禁用物品。

错误:

要粘贴到此处太大,所以这里是:http://pastebin.com/zhzc3Hut

代码:

    @EventHandler
public void onInventoryClickBoots(InventoryClickEvent event) {
    Player player = (Player) event.getWhoClicked();

    if(player.getInventory().getBoots().getType().equals(Material.DIAMOND_BOOTS)){
        player.getInventory().setBoots(new ItemStack(Material.AIR));
    }   
    else {
    }    
}

我也是头盔,胸甲和绑腿插槽的重复错误。

提前感谢任何有能力帮助我的人!对于所发生的事情的解释也将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可能遇到的问题是getBoots ItemStack实际上是空的。

要解决这个问题,我们首先应检查靴子是否为空,然后再检查它的类型。

ItemStack boots = player.getInventory().getBoots();
if (boots != null) {
    if (boots.getType().equals(Material.DIAMOND_BOOTS) {
       player.getInventory().setBoots(null);
    }
}

@Edit

由The_Lone_Devil提醒:

  

(...)这是因为库存中的空槽是空的ItemStack,因此如果它们在引导槽中没有任何内容,则返回的ItemStack为空。