BUKKIT PLUGIN API:如何检查玩家的库存是否包含数组中包含的项目?

时间:2014-03-08 04:11:06

标签: java arrays bukkit inventory

我在Java中创建一个名为 BanItems Bukkit 插件。我有很多创建它的问题,我无法找到任何答案。所以我问了这个问题。 在代码中,我有一个数组,ItemsBanned [] ,只包含字符串。 我想检查并查看是否有任何玩家的库存中有一个项目在该数组中。

public void onPlayerJoin(PlayerJoinEvent event) {
    Player player = event.getPlayer();
    Inventory inv = player.getInventory();


    if (inv.contains(itemsBanned[x])) {

     }

出于某些奇怪的原因,当我复制&将代码粘贴到此处,无论我使用4个空格和类似的东西,它都会完全填满。所以,这就是我能展示的一切。

它不会让我看到玩家的库存是否包含数组itemsBanned中的项目。 我怎样才能做到这一点? 请回答。

1 个答案:

答案 0 :(得分:2)

您可以使用简单的for循环。我将从你的问题中假设ItemsBanned是项目的名称。

for(int i = 0; i < itemsBanned.length(); i++){
    Material m = Material.getMaterial(itemsBanned[i]); //convert the strings to Materials
    if(inv.contains(m)){
        //do something here
    }
}

该代码唯一的问题是您无法删除这些项目,只有当玩家拥有一个或多个项目时才能提醒您。如果您想删除被禁止的物品,可以这样做:

for(int i = 0; i < itemsBanned.length(); i++){
    Material m = Material.getMaterial(itemsBanned[i]); //convert the strings to Materials

    for(int n = 0; n < inv.getSize(); n++){ //loop threw all items in the inventory
        ItemStack itm = inv.getItem(n); //get the items
        if(itm != null){ //make sure the item is not null, or you'll get a NullPointerException
            if(itm.getType().equals(m)){ //if the item equals a contraband item
                inv.remove(m); //remove the item
            }
        }
    }
}