Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем serega6531, 17 янв 2014.

Статус темы:
Закрыта.
  1. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    У меня странная ситуация. Я сделал кастомный инвентарь и обрабатываю помещение предмета в определенные ячейки. Если класть любые предметы - все работает. Но в ячейках по умолчанию лежит предмет, означающий что ничего не задано. Если я беру этот предмет и кладу обратно в ту же ячейчу, выскакивает 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);
                    }
                }
            }
    И ещё. Как удалить нужный предмет из инвентаря? (У меня даже есть его ячейка)
     
    Последнее редактирование: 17 янв 2014
  2. Хостинг MineCraft
    <
  3. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    @Den_Abr[DOUBLEPOST=1389985594,1389975291][/DOUBLEPOST]Up!
     
    ПриветОтЛайки нравится это.
  4. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    inv.getItem() возвращает null - значит ячейка пустая, нужно проверять, что в ней что-то находится.
     
  5. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Кстати да, я там не то писал. Теперь мне надо удалять предмет.
     
  6. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    inv.setItem(слот, итемстак)
     
  7. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    И что? setItem(slot, null)?
     
  8. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Да
     
  9. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    А если я хочу убрать элемент с курсора?[DOUBLEPOST=1389986924,1389986191][/DOUBLEPOST]При setItem(slot, null) исчезают любые такие же предметы, но не нужный.[DOUBLEPOST=1389987140][/DOUBLEPOST]Как исправить?
     
    ПриветОтЛайки нравится это.
  10. co1der

    co1der Участник

    Баллы:
    33
    Имя в Minecraft:
    co1d
    Ну и для это го использует itemInHand ))
     
  11. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Так как убрать предмет с курсора?[DOUBLEPOST=1390034125,1390016298][/DOUBLEPOST]Up!
     
  12. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    C какого курсора? Получи позицию и убери предмет тем, как указали выше.
     
  13. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Как убрать предмет, который сейчас на курсоре?
     
  14. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Какой Курсор? Выделенный предмет в тулбаре? Выбранный предмет, по котором курсором кликнули?
     
  15. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Выбранный.
     
  16. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    * Словить ивент
    * У данного ивент получить номер слота
    * Удалить объект.
     
  17. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    А какой же слот у курсора?
     
  18. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    http://jd.bukkit.org/rb/apidocs/
    Здесь ищешь и смотришь org.bukkit.event.inventory
     
  19. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Есть setCursor(), но он Deprecated.
     
    ПриветОтЛайки нравится это.
  20. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вот почему
    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.
     
  21. Автор темы
    serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Я знаю, но что делать?[DOUBLEPOST=1390047236,1390043421][/DOUBLEPOST]Сделал через setCursor(). Теперь другой вопрос. Как сделать, чтобы выводился только мой инвентарь, без инвентаря игрока?[DOUBLEPOST=1390061710][/DOUBLEPOST]Up!
     
Статус темы:
Закрыта.

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