java - 右键单击时不打开库存
问题描述
我一直在尝试创建自定义库存,一切似乎都很好,但是在游戏中当我尝试右键单击打开库存的项目时,库存没有打开。
Inventory playerInfoInv = plugin.getServer().createInventory(null, 27, ChatColor.GOLD + "Player Info");
p.openInventory(playerInfoInv);
}
@EventHandler
public void onInteract(PlayerInteractEvent e) {
Player p = e.getPlayer();
Material getItemInHand = e.getItem().getType();
Action a = e.getAction();
if (getItemInHand.equals(SKULL_ITEM)) {
if (a.equals(Action.LEFT_CLICK_AIR))
playerInfoInventory(p);
}
}
这是骷髅物品元数据,如果它可能会影响这一点:
//Player skull
ItemStack pSkull = new ItemStack(SKULL_ITEM,1,(short) SkullType.PLAYER.ordinal());
SkullMeta pMeta = (SkullMeta) pSkull.getItemMeta();
pMeta.setOwner(p.getName());
pMeta.setDisplayName(ChatColor.BLUE + "Player Info");
ArrayList<String> pSkullLore = new ArrayList<String>();
pSkullLore.add(ChatColor.WHITE + "Show Player Stats");
pMeta.setLore(pSkullLore);
pMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
pSkull.setItemMeta(pMeta);
p.getInventory().setItem(0, pSkull);
解决方案
起初: e.getItem() 可以为空。所以也许你可以得到一个 NullPointer。
第二个:ItemStack#getType() 返回 Material。而且您正在检查 SKULL_ITEM 而不是 Material.SKULL_ITEM(与您在初始化变量 pSkull 时犯的相同错误)。
第三:检查您的听众是否已注册。
推荐阅读
- flowtype - Flow Array 类型在该类型的子集上失败
- python - 按正确日期组织多索引
- spring - Angular 6(前端)+ Spring:配置路由
- java - Android 密钥库密码正确但无法恢复密钥
- php - php foreach 从文件夹中删除 mysql 和图像
- powershell - 如何获取用户有权访问 Exchange2010 的所有共享邮箱的列表 Exchange 命令行管理程序还是 PowerShell?
- powershell - 指定所有属性时,Get-ADUser 未返回所有可能的 AD 属性
- django - wagtail 中是否有文件大小限制或扩展名限制?
- c# - 捆绑包的 MVC5 授权
- openshift - OpenShift 主机路径卷和重音字符