Помогите Как взять предмет в инвентаре по имени.

  • Автор темы Автор темы SashaX2
  • Дата начала Дата начала

SashaX2

Участник
Пользователь
Баллы
36
Имя в Minecraft
NOTXSK
У меня существует инвентарь с предметами и мне нужно взять тот предмет(ы) чьё имя равно "ИМЯ"
затем взаимодействовать с ним.

Можно ли как то в принципе так сделать?, лично у меня не получалось найти в инвентаре.
 
PHP:
public List<ItemStack> getStacksByName(Inventory inventory, String name) {
    List<ItemStack> result = new ArrayList<>();
    for(ItemStack stack : inventory) {
        if(stack==null) continue;
        if(name.equals(stack.getItemMeta().getDisplayName())) result.add(stack);
    }
    return result;
}
 
Последнее редактирование:
PHP:
public List<ItemStack> getStacksByName(Inventory inventory, String name) {
    List<ItemStack> result = new ArrayList<>();
    for(ItemStack stack : inventory) {
        if(stack.getItemMeta().hasDisplayName() && stack.getItemMeta().getDisplayName().equals(name)) result.add(stack);
    }
    return result; // тут*
}
Поправил
 
У меня код другой немного
PHP:
public List<ItemStack> getStacksByName(Inventory inventory, String name) {
    List<ItemStack> result = new ArrayList<>();
    for(ItemStack stack : inventory) {
        if(name.equals(stack.getItemMeta().getDisplayName())) result.add(stack);
    }
    return result;
}
И зачем ты при смене руки добавляешь предмет в список?
 
В смысле ошибка, ты сам то понял что делаешь? После вызова того метода, тебе возвращается список всех предметов, найденных в инвентаре с таким именем.
 
PHP:
final ItemStack AIR = new ItemStack(Material.AIR);
for(int i = 0; i < inventory.getSize(); i++) {
    ItemStack item = inventory.getItem(i);
    if (item == null || !item.hasItemMeta()) continue;
    ItemMeta meta = item.getItemMeta();
    if (!meta.hasDisplayName() || !meta.getDisplayName().equals(name)) continue;
    inventory.setItem(i, AIR);
}
 
Или с моим методом
PHP:
List<ItemStack> stacks = getStacksByName(inventory,"ИМЯ");
inventory.removeItem(list.toArray(new ItemStack[stacks.size()]));
 
Или с моим методом
PHP:
List<ItemStack> stacks = getStacksByName(inventory,"ИМЯ");
inventory.removeItem(list.toArray(new ItemStack[stacks.size()]));
В этом смысла меньше, ибо после получения еще раз проходить по массиву собранных ItemStack-ов для удаления.
И на справку, вместо list.toArray(new ItemStack[stacks.size()]) лучше использовать list.toArray(new ItemStack[0]).
 
Назад
Верх