Bukkit 检查玩家的物品栏

Bukkit Check Player's Inventory

我正在尝试查看玩家的库存中是否有以下任何物品,如果有,我想移除这些物品并向他们发送消息说该物品已被移除,但我无法确定不知道怎么做,这就是我目前所拥有的:

    Material[] bannedItems = { Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE, Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS, Material.GOLD_HELMET, Material.GOLD_CHESTPLATE, Material.GOLD_LEGGINGS, Material.GOLD_BOOTS };

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
    Player player = (Player) event.getWhoClicked();
    if(player.getInventory().contains(bannedItems, 1)){
        player.sendMessage(ChatColor.GRAY + "[" + ChatColor.RED + ChatColor.BOLD + "RPG" + ChatColor.GRAY + "] " + ChatColor.RED + "A has been removed from your possession.");
    }
}

我在 .contains(bannedItems, 1)) 行遇到错误。

感谢您的帮助!

对于数组中的每一个元素,你都必须检查它,而不仅仅是比较数组。这是一个概念证明:

double[] check = {1.3, 4.2, 4.3}; //A sample double array

for(double d : check) { //Loop thru all elements
    if(4.2 == d) { //If current element is equal to 4.2
        System.out.println("EQUAL!"); //Print "EQUAL!"
    }
}

这将逐个循环遍历 check 数组并将每个元素与 4.2 进行比较。他们在相等时报告。然后,您可以将其应用于这种情况:

@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
    Material[] bannedItems = { Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE, Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS, Material.GOLD_HELMET, Material.GOLD_CHESTPLATE, Material.GOLD_LEGGINGS, Material.GOLD_BOOTS };
    Player player = (Player) event.getWhoClicked();

    for(Material m : bannedItems) { //Loop thru all elements
        if(player.getInventory().contains(m, 1)){ //Check if in inventory
            player.sendMessage(ChatColor.GRAY + "[" + ChatColor.RED + ChatColor.BOLD + "RPG" + ChatColor.GRAY + "] " + ChatColor.RED + "A has been removed from your possession.");
            //Remove stuff
        }
    }
}

现在,该事件将循环遍历 bannedItems 的每个元素并检查用户是否在其库存中。

for(Material m : bannedItems) 

是一个增强的for循环,将bannedItems中的当前元素存储在m变量中,然后我们使用m进行比较,单个material.

我也会用一个不同的事件,比如当他们拿起一个物品,然后检查,这样你就可以马上删除它。