获取玩家库存,然后广播项目显示名称

时间:2013-12-29 18:54:42

标签: java module minecraft bukkit

好的,我试图在登录时检查玩家的库存,并说明显示名称

public void onPlayerJoin(PlayerJoinEvent event) {
    Player p = event.getPlayer();

    for (int i = 0; i < p.getInventory().getSize(); i++) {
        if (p.getInventory().getItem(i).getType() != null) {
            if (!p.getInventory().getItem(i).getItemMeta().getDisplayName().equals("KITS")){
                Bukkit.broadcastMessage(i.getItemMeta().getDisplayName());
            }
        }
    }
}

这只会导致错误。

错误日志:

Caused by: java.lang.NullPointerException
    at me.BlueJelly.MPSKitPvP.Listeners.PlayerListener.onPlayerJoin(PlayerListener.jav
a:31) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_09]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_09]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_09]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_09]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[
   craftbukkit.jar:git-Bukkit-1.6.4-R2.0-9-g68d0e57-b2930jnks]

我知道这是一个NullPointerException,但我不知道它是怎么说的。 我希望你理解我写的......

2 个答案:

答案 0 :(得分:4)

基于the documentation,我认为不应该p.getInventory().getItem(i).getType() != null它应该是p.getInventory().getItem(i)!= null,好像在该插槽中没有Item堆栈试图获取其类型将抛出一个npe

答案 1 :(得分:1)

您的代码中有许多可能存在NullPointerException的地方。

例如:

p.getInventory().getItem(i).getType() 

使用报告的行号(31)查找确切的行。 如果您无法调试代码,请使用日志(或简单的souts)来查找空引用。

相关问题