gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:25:18 27 4
gpt4 key购买 nike

我想创建一个系统,用于将我的自定义附魔书拖放到例如一把剑上。准确地说,我为您举了一个例子:

你有一本附魔书,你应该把他拖放到你的钻石剑上,为你的钻石剑设置魔咒。而且,当你这样做时,附魔书就会被移除,并且附魔的名称会显示在你的剑的传说中。

你有做这个的想法吗?提前致谢。

我在 Spigot 1.12.2 上进行了编程,并且我的类(class)被授予。

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

    @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");
}
}
}
}

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

最佳答案

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

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

这样您就可以确定您的事件卡在哪里!

关于java - 如何将一个项目拖放到另一个项目上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57257474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com