BUKKIT PLUGIN API: Как я могу проверить, содержит ли инвентарь игрока предмет, включенный в массив?

Я делаю подключаемый модуль Bukkit на Java под названием BanItems. У меня есть несколько проблем с его созданием, и я просто не могу найти ответ НИГДЕ. Поэтому я задал этот вопрос. В коде у меня есть массив ItemsBanned[ ], который включает только строки. Я хотел проверить и посмотреть, есть ли в инвентаре любого игрока предмет, который находится в этом массиве.

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


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

     }

По какой-то странной причине, когда я копирую и вставляю код сюда, он полностью поднимается, независимо от того, что я делаю с 4 пробелами и тому подобным. Итак, это все, что я могу показать.

Это не позволит мне увидеть, есть ли в инвентаре игрока предмет из массива itemsBanned. Как я могу это сделать? Ответьте, пожалуйста.


person user3395095    schedule 08.03.2014    source источник
comment
Не то чтобы это имело какое-либо отношение к коду, но интервалы действительно не имеют ничего общего с кодированием, когда вы работаете с Java. Это просто делает его красивее   -  person Jojodmo    schedule 09.03.2014


Ответы (1)


Вы можете использовать простой цикл 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
            }
        }
    }
}
person Jojodmo    schedule 08.03.2014
comment
Спасибо, но я не знаю, как проверить ВСЕ инвентари игрока сразу. Только onPlayerJoin() я могу. - person user3395095; 09.03.2014
comment
Вы можете получить всех онлайн-игроков с помощью for(Player p: Bukkit.getServer().getOnlinePlayers()){, а затем просто сделать inv = p.getInventory(); - person Jojodmo; 09.03.2014