使用的故障检测项目

问题描述 投票:0回答:1

我试图检查玩家使用的物品是否是我添加的自定义物品,但由于某些原因,它没有检测到该物品。下面是代码。

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

自定义项目类。

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-statement minecraft bukkit
1个回答
0
投票
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 类,你可以通过为项目名称制作一个最终字符串来改进这段代码,然后你可以在创建ItemStack和使用 isPotator 检查。

© www.soinside.com 2019 - 2024. All rights reserved.