我想创建一个系统来将我的定制附魔书拖放到例如剑上。精确地,我为您举例:
您有一本附魔书,您应该将其拖放到钻石剑上,以将附魔设置到钻石剑上。而且,当您这样做时,附魔书会被删除,并且附魔的名称会显示在您的剑的传说中。
您对此有想法吗?预先感谢。
我在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");
}
}
}
}
我没有错误或其他消息,我的日志很干净。
答案 0 :(得分:0)
首先,InventoryAction.SWAP_WITH_CURSOR
仅在“单击的项目和光标被交换[...]”时触发。参见https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/inventory/InventoryAction.html
因此,我会尝试使用InventoryAction
s PLACE_ALL
,PLACE_ONE
和PLACE_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;
,依此类推...
因此,您可以确定事件在哪里停留!