Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Ошибка с ивентом инвентаря

Статус
Закрыто для дальнейших ответов.

serega6531

Старожил
Девелопер
Пользователь
Баллы
173
У меня странная ситуация. Я сделал кастомный инвентарь и обрабатываю помещение предмета в определенные ячейки. Если класть любые предметы - все работает. Но в ячейках по умолчанию лежит предмет, означающий что ничего не задано. Если я беру этот предмет и кладу обратно в ту же ячейчу, выскакивает NullPointerException на получении предмета, т.е. inv.getItem() = null. Не знаю, в чем дело. Вот код:

Код:
        if(event.getInventory().getTitle() == LanguageManager.getLang().get("SPELLSMASTER_TITLE")){
            InventoryAction action = event.getAction();
            Inventory inv = event.getInventory();
            if(action.equals(InventoryAction.PLACE_ALL)){
                if(event.getRawSlot() == 48){
                    if(inv.getItem(48).hasItemMeta()){
                        if(!(inv.getItem(48).getItemMeta().getDisplayName() == "No spell")){
                            Players.getPlayerByName(((Player)inv.getHolder()).getName()).setSpell1(Spells.getSpellByName(inv.getItem(48).getItemMeta().getDisplayName()));
                            inv.addItem(event.getCursor());
                        }
                    }
                } else if (event.getRawSlot() == 50){
                    if(inv.getItem(50).hasItemMeta()){
                        if(!(inv.getItem(50).getItemMeta().getDisplayName() == "No spell")){
                            Players.getPlayerByName(((Player)inv.getHolder()).getName()).setSpell2(Spells.getSpellByName(inv.getItem(50).getItemMeta().getDisplayName()));
                            inv.addItem(event.getCursor());
                        }
                    }
                } else {
                    event.setCancelled(true);
                    event.setCursor(null);
                }
            }
        }

И ещё. Как удалить нужный предмет из инвентаря? (У меня даже есть его ячейка)
 
Последнее редактирование:
inv.getItem() возвращает null - значит ячейка пустая, нужно проверять, что в ней что-то находится.
 
У меня странная ситуация. Я сделал кастомный инвентарь и обрабатываю помещение предмета в определенные ячейки. Если класть любые предметы - все работает. Но в ячейках по умолчанию лежит предмет, означающий что ничего не задано. Если я беру этот предмет и кладу обратно в ту же ячейчу, выскакивает NullPointerException на получении предмета, т.е. inv.getItem() = null. Не знаю, в чем дело. Вот код:

Код:
        if(event.getInventory().getTitle() == LanguageManager.getLang().get("SPELLSMASTER_TITLE")){
            InventoryAction action = event.getAction();
            Inventory inv = event.getInventory();
            if(action.equals(InventoryAction.PLACE_ALL)){
                if(event.getRawSlot() == 48){
                    if(inv.getItem(48).hasItemMeta()){
                        if(!(inv.getItem(48).getItemMeta().getDisplayName() == "No spell")){
                            Players.getPlayerByName(((Player)inv.getHolder()).getName()).setSpell1(Spells.getSpellByName(inv.getItem(48).getItemMeta().getDisplayName()));
                            inv.addItem(event.getCursor());
                        }
                    }
                } else if (event.getRawSlot() == 50){
                    if(inv.getItem(50).hasItemMeta()){
                        if(!(inv.getItem(50).getItemMeta().getDisplayName() == "No spell")){
                            Players.getPlayerByName(((Player)inv.getHolder()).getName()).setSpell2(Spells.getSpellByName(inv.getItem(50).getItemMeta().getDisplayName()));
                            inv.addItem(event.getCursor());
                        }
                    }
                } else {
                    event.setCancelled(true);
                    event.setCursor(null);
                }
            }
        }

И ещё. Как удалить нужный предмет из инвентаря? (У меня даже есть его ячейка)
inv.setItem(слот, итемстак)
 
Есть setCursor(), но он Deprecated.
Вот почему
This changes the ItemStack in their hand before any calculations are applied to the Inventory, which has a tendency to create inconsistencies between the Player and the server, and to make unexpected changes in the behavior of the clicked Inventory.
 
Вот почему
This changes the ItemStack in their hand before any calculations are applied to the Inventory, which has a tendency to create inconsistencies between the Player and the server, and to make unexpected changes in the behavior of the clicked Inventory.
Я знаю, но что делать?
Сделал через setCursor(). Теперь другой вопрос. Как сделать, чтобы выводился только мой инвентарь, без инвентаря игрока?
Up!
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх