java - 右键单击时不打开库存

标签 java minecraft bukkit

我一直在尝试创建自定义库存,一切似乎都很好,但在游戏中,当我尝试右键单击打开库存的项目时,库存无法打开。

        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() 可以为 null。所以也许你可以获得一个 NullPointer。

第二个:ItemStack#getType() 返回 Material 。并且您正在检查 SKULL_ITEM 而不是 Material.SKULL_ITEM (与初始化变量 pSkull 时犯的错误相同)。

第三:检查您的监听器是否已注册。

关于java - 右键单击时不打开库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60351683/

相关文章:

java - 在 Log4j 2 中使用多个标记来过滤日志记录

java - 当请求来自网络服务器而不是网络浏览器时,HTTPSession 的创建如何工作?

java - 动态更改 BungeeCord 服务器配置

Java:ClassCastException;相同的类加载器?

java - 无法编辑标志 - Bukkit : org. bukkit.command.CommandException:插件 X 中执行命令 'sign' 的未处理异常

java - 用于访问子面板元素的更漂亮的解决方案

java - 在舞台中替换场景后如何获取场景的正确位置?

java - 如何为您的 Java 应用程序创建 native 二进制文件?

java - 使用 Java 在 Mac 上启动 Minecraft

java - Bukkit错误: event cannot be resolved