如何将一个项目拖放到另一个项目上?

时间:2019-07-29 15:57:56

标签: java minecraft

我想创建一个系统来将我的定制附魔书拖放到例如剑上。精确地,我为您举例:

您有一本附魔书,您应该将其拖放到钻石剑上,以将附魔设置到钻石剑上。而且,当您这样做时,附魔书会被删除,并且附魔的名称会显示在您的剑的传说中。

您对此有想法吗?预先感谢。

我在Spigot 1.12.2上对此进行了编程,并授予了我的课程。

这是我的代码,但是他不起作用(消息不显示):

    @EventHandler
    public void onClick(InventoryClickEvent e) {
        if(e.getWhoClicked() instanceof Player) {
            Player p = (Player) e.getWhoClicked();

            if(e.getAction().equals(InventoryAction.SWAP_WITH_CURSOR)) {
                if(e.getCursor() == null || e.getCurrentItem() == null) return;

                if(!e.getCursor().hasItemMeta()) return;

                ItemMeta cursorM = e.getCursor().getItemMeta();

                if(cursorM.getDisplayName().equalsIgnoreCase("§atest")) {
                    Bukkit.broadcastMessage("test OK");
                }
            }
        }
    }

我没有错误或其他消息,我的日志很干净。

1 个答案:

答案 0 :(得分:0)

首先,InventoryAction.SWAP_WITH_CURSOR仅在“单击的项目和光标被交换[...]”时触发。参见https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryAction.html 因此,我会尝试使用InventoryAction s PLACE_ALLPLACE_ONEPLACE_SOME或类似的东西。

调试提示:如果未显示调试消息,请尝试在实际的调试消息之前放置调试消息,该消息包含查询的结果,用于触发调试消息。对于您的情况,可以将调试消息Bukkit.broadcastMessage("InventoryAction: " + e.getAction().toString());放在查询if(e.getAction().equals(InventoryAction.SWAP_WITH_CURSOR)) {之前。还有第一个Bukkit.broadcastMessage("isCancelled:" + (e.getCursor() == null || e.getCurrentItem() == null));之前的调试消息return;,依此类推...

因此,您可以确定事件在哪里停留!