Помогите Проверка на наличие предмета не пашет

menusha11

Активный участник
Пользователь
Баллы
61
Есть меню сервера, выдаю его при команде /menu, если оно уже есть - выдаваться не должно.
Проблема в том, что меню выдается в любом случае, даже если оно уже есть в инвентаре.
Как фиксить?

public boolean onCommand(CommandSender sender, Command cmd, String label,String[] args) {
Player p = (Player) sender;

if(!(sender instanceof Player)) {

sender.sendMessage("Only for players");

return true;
}else{

if(p.getInventory().containsAtLeast(GUI.itemmenu(), 1)){
p.sendMessage(ChatColor.DARK_RED+"У вас уже есть меню!");

}else {

p.getInventory().addItem(GUI.itemmenu());
p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");

}
}
return true;
}
 
Пройдись по инвентарь и сравнивай через isSimilar.

Не сработало, хотя, может я накосячил где-то

for (int i = 0; i<=36; i++){

if (p.getInventory().getItem(i)==null) continue;
if (!p.getInventory().getItem(i).isSimilar(GUI.itemmenu())) {
continue;
}



if(p.getInventory().getItem(i).isSimilar(GUI.itemmenu())) {


p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");

}




}
p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");
p.getInventory().addItem(GUI.itemmenu());
 
Код:
for (ItemStack item : p.getInventory().getItems()){
    If (item.isSimilar(otherItem) {
        Todo
        return true;
    }
}
 
Я точное наименование метода не помню, посмотри сам, он должен массив с предметами возвращать.

Upd: getContents()
 
Я точное наименование метода не помню, посмотри сам, он должен массив с предметами возвращать.

Upd: getContents()
for (ItemStack item : p.getInventory().getContents()){
if(item.isSimilar(GUI.itemmenu())) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}
}
Ошибку выдает в консоль когда команду ввожу.
 
for (ItemStack item : p.getInventory().getContents()){
if(item.isSimilar(GUI.itemmenu())) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}
}
Ошибку выдает в консоль когда команду ввожу.
Небось NullPointerException. Пропуская нулевые предметы.
 
for (ItemStack item : p.getInventory().getContents()){
if(item.isSimilar(GUI.itemmenu())) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}
}
Ошибку выдает в консоль когда команду ввожу.
Потому что у тебя предмет в итерации может быть null

Код:
if (Arrays.stream(player.getInventory().getContents()).anyMatch(GUI.itemmenu()::isSimilar)) {
    p.sendMessage(ChatColor.DARK_RED+"У вас уже есть меню!");
} else {
    p.getInventory().addItem(GUI.itemmenu());
    p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");
}
 
Потому что у тебя предмет в итерации может быть null

Код:
if (Arrays.stream(player.getInventory().getContents()).anyMatch(GUI.itemmenu()::isSimilar)) {
    p.sendMessage(ChatColor.DARK_RED+"У вас уже есть меню!");
} else {
    p.getInventory().addItem(GUI.itemmenu());
    p.sendMessage(ChatColor.DARK_GREEN+"Меню было выдано!");
}
Ну куда ему stream, если он и это пока написать не может? Ты же ему голову сломаешь.
 
Код:
 if (item == null) continue;
for (ItemStack item : p.getInventory().getContents()){
if (item==null) continue;
if(item.isSimilar(GUI.itemmenu())) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}




}

Теперь просто ничего не происходит.
 
Ну куда ему stream, если он и это пока написать не может? Ты же ему голову сломаешь.
Да не, пускай видит как это красиво и пойдет изучать, ну и через фор тоже проверку на нулл не надо, просто местами поменять предметы при сравнении guiItem.isSimilar(item), там при null предмете метод и так false вернет.
 
Назад
Верх