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

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;
}
 
for (ItemStack item : p.getInventory().getContents()){
if (item==null) continue;
if(item.isSimilar(GUI.itemmenu())) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}




}

Теперь просто ничего не происходит.
Ну так после ифа уже выдавай предмет свой.
 
Да не, пускай видит как это красиво и пойдет изучать, ну и через фор тоже проверку на нулл не надо, просто местами поменять предметы при сравнении guiItem.isSimilar(item), там при null предмете метод и так false вернет.
Ну да, их же местами можно поменять, как то глупо себя чувствую, лол
 
Ts, на будущее, вставляй исходник в bb code
И чтобы табуляция везде где надо была, читать невозможно.
И если ошибку кидает, то говори какую, если сам не знаешь как исправить, чаще всего это не очевидно.
 
Ts, на будущее, вставляй исходник в bb code
И чтобы табуляция везде где надо была, читать невозможно.
И если ошибку кидает, то говори какую, если сам не знаешь как исправить, чаще всего это не очевидно.

Предмет выдается даже если уже есть в инвентаре

for (ItemStack item : p.getInventory().getContents()){
if(GUI.itemmenu().isSimilar(item)) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}
}
p.getInventory().addItem(GUI.itemmenu());
return true;
 
Предмет выдается даже если уже есть в инвентаре

for (ItemStack item : p.getInventory().getContents()){
if(GUI.itemmenu().isSimilar(item)) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}
}
p.getInventory().addItem(GUI.itemmenu());
return true;
Кинь метод GUI.itemmenu()
 
Кинь метод GUI.itemmenu()
public ItemStack itemmenu() {


ItemStack itemmenu = new ItemStack(Material.COMPASS);
ItemMeta meta = itemmenu.getItemMeta();
meta.setDisplayName(ChatColor.GREEN+"Сервер-меню");
List<String> lore = new ArrayList<String>();
lore.add(ChatColor.GOLD+"Нажмите пкм для открытия меню сервера!");
lore.add(ChatColor.AQUA+"Меню можно получить прописав /menu в чат!");
meta.addEnchant(Enchantment.LURE , 1337, true);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.setLore(lore);
itemmenu.setItemMeta(meta);
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
return itemmenu;
}
 
Велик делаете? e.getPlayer().getInventory().containsAtLeast(stack, 1); Проверит наличие от 1 до 64 в стаке.
 
public ItemStack itemmenu() {


ItemStack itemmenu = new ItemStack(Material.COMPASS);
ItemMeta meta = itemmenu.getItemMeta();
meta.setDisplayName(ChatColor.GREEN+"Сервер-меню");
List<String> lore = new ArrayList<String>();
lore.add(ChatColor.GOLD+"Нажмите пкм для открытия меню сервера!");
lore.add(ChatColor.AQUA+"Меню можно получить прописав /menu в чат!");
meta.addEnchant(Enchantment.LURE , 1337, true);
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
meta.setLore(lore);
itemmenu.setItemMeta(meta);
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
return itemmenu;
}
И зачем каждый раз создавать предмет. Сравнивай в данном случае не сами предметы, а название чтобы было ChatColor.GREEN+"Сервер-меню" (костыль), или по-нормальному какой-то нбт тег добавь и сверяй, ибо имя предмета может измениться в будущем (но это ты вряд ли осилишь, так что мож костылить через название).
 
И зачем каждый раз создавать предмет. Сравнивай в данном случае не сами предметы, а название чтобы было ChatColor.GREEN+"Сервер-меню" (костыль), или по-нормальному какой-то нбт тег добавь и сверяй, ибо имя предмета может измениться в будущем (но это ты вряд ли осилишь, так что мож костылить через название).
Ну и выдаст новый предмет. Нашел проблему лол. Всего лишь команда на меню, пфф.
 
Это работает как нужно
for (ItemStack item : p.getInventory().getContents()){
if (item==null) continue;
if(item.getItemMeta().hasDisplayName() && item.getItemMeta().hasLore()) {
if(item.getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN+"Сервер-меню")) {
p.sendMessage(ChatColor.DARK_RED+"Меню не было выдано!");
return true;
}
}
}
p.getInventory().addItem(GUI.itemmenu());
return true;
 
Назад
Верх