无法检测使用的项目

Trouble detecting item used

我正在尝试检查玩家使用的物品是否是我添加的自定义物品,但由于某种原因它没有检测到该物品。这是代码。

@EventHandler
public void damage(EntityDamageByEntityEvent event){
    if(event.getEntity() instanceof Player && event.getDamager() instanceof Player){
        if(((Player) event.getDamager()).getInventory().getItemInMainHand() == CustomItems.potator()){
            System.out.println("potato");
        }
        else{
            //When i looked @ console this logged the same exact thing
            System.out.println("Damager Main Item = " + ((Player) event.getDamager()).getInventory().getItemInMainHand());
            System.out.println("Potator Item = " + CustomItems.potator());
        }
    }
}

自定义项目Class:

public static ItemStack potator(){

    ArrayList<String> lore = new ArrayList<String>();
    lore.add(ChatColor.GOLD + "Turns a random slot in the hotbar to a potato.");
    lore.add(ChatColor.GRAY + "1/100% chance from dropping from a potato.");

    ItemStack item = new ItemStack(Material.STONE_HOE);
    ItemMeta meta = item.getItemMeta();
    meta.setDisplayName(ChatColor.GOLD + "The Potator");
    meta.setLore(lore);
    item.setItemMeta(meta);
    return item;
}
if(((Player) event.getDamager()).getInventory().getItemInMainHand() == CustomItems.potator())

在这一行中,通过使用 ==,您将检查左右引用是否相同。您想进行内容比较,例如使用 .equals()GeeksForGeeks.

上的差异有很好的解释

Spigot 提供了一种独立于堆栈大小的方法 isSimilar(),这比 .equals() 更好。

但是,这可能会使您的代码针对任何石锄执行,因此您需要自己进行检查。我会做这样的事情:

public boolean isPotator(ItemStack i){
    if(i == null || !i.hasItemMeta())
        return false;
    ItemMeta meta = i.getItemMeta();
    if(!meta.hasDisplayName() || !meta.hasLore())
        return false;
    return meta.getDisplayName().equals(ChatColor.GOLD + "The Potator");
}

然后像这样执行检查:

@EventHandler
public void damage(EntityDamageByEntityEvent event)
{
    if(!(event.getEntity() instanceof Player && event.getDamager() instanceof Player))
        return;
    Player damager = (Player) event.getDamager();
    if(!isPotator(damager.getInventory().getItemInMainHand()))
        return;
    System.out.println("potato");
}

因为你有一个 CustomItem class,你可以通过为项目名称创建一个最终字符串来改进这段代码,然后你可以在 ItemStack 创建和 isPotator检查。