InventoryClickEvent:在自定义库存中右键单击不起作用

InventoryClickEvent: Right-Click in a custom Inventory is not working

我还有一个问题,希望你能帮助我。我尝试在玩家点击定制库存中的物品时传送玩家(在本例中是相思门)。库存本身工作正常,但当我尝试单击该项目时,没有任何反应。 到目前为止,这是我的代码: 库存Class

package de.Daniel260.startup.items;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;


public class HerrDesWindesTalisman implements Listener{
    
    @EventHandler
    public void onPlayerInteract (PlayerInteractEvent e) {
        Player p = e.getPlayer();
        Action a = e.getAction();
        if(a.equals(Action.RIGHT_CLICK_AIR)  || a.equals(Action.RIGHT_CLICK_BLOCK)) {
            
            if(e.getItem() != null && e.getItem().getType().equals(Material.TOTEM_OF_UNDYING)) {
                if(p.hasPermission("quests.herrderwinde")) {
                    p.sendMessage("Warpmenü");
                    Inventory inv = Bukkit.createInventory(p, 27, "Ziele");
                    ItemStack item1 = new ItemStack(Material.ACACIA_DOOR);
                    ItemMeta imeta1 = item1.getItemMeta();
                    imeta1.setDisplayName("Reise nach Irgendwo");
                    item1.setItemMeta(imeta1);
                    inv.setItem(10, item1);
                    p.openInventory(inv);
                } 
                else {
                    p.sendMessage("§4Für dieses Item brauchst du folgende Quest: §6Herr des Windes");
                }
                
                
            }
            
        }
    }
    @SuppressWarnings("unused")
    public void onInventoryClick (InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
        InventoryAction a = e.getAction();
        
        
        if(p.getItemOnCursor().getItemMeta().getDisplayName().equals("Reise nach Irgendwo")) {
            Location loc = new Location(p.getWorld(), 0, 6, 0);
            p.teleport(loc);
            
        }
    }

}

首先,你在方法上伪造了@EventHandler标签。

另外,p.getItemOnCursor()是在玩家身上而不是在活动中,所以这不是获得物品的好方法。

你应该使用 event.getCurrentItem()。警告:此方法可以 return null.

这是最后的方法onInventoryClick :

@EventHandler
public void onInventoryClick (InventoryClickEvent e) {
    Player p = (Player) e.getWhoClicked();
    if(e.getCurrentItem() != null && e.getCurrentItem().getItemMeta().getDisplayName().equals("Reise nach Irgendwo")) {
        p.teleport(new Location(p.getWorld(), 0, 6, 0));
    }
}