1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

[modding] Массивы слотов

Тема в разделе "Оффтопик", создана пользователем turkitakis, 7 окт 2015.

  1. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Столкнулся со следующей проблемой:
    Создал свой массив, указал свободные айди слотам этого массива, в InventoryPlayer проделал с ним нужные вещи и зашел в тупик.
    Вылетает outOfBoundsException и указывает на метод getStackInSlot, а точнее на то, что он возвращает в конце:
    Код:
        public ItemStack getStackInSlot(int i)
        {
            ItemStack aitemstack[] = mainInventory;
            if(i >= aitemstack.length)
            {
                i -= aitemstack.length;
                aitemstack = armorInventory;
            }
            System.out.println(i);
            return aitemstack[i];
        }
    
    Дак вот, как сюда дополнительно внедрить свой массив?
     
  2. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Как все это должно выглядеть? о.о
     
  3. fhntv24

    fhntv24 Активный участник Пользователь

    Баллы:
    88
    заменить на
    Код:
    if(i > aitemstack.length)
    
     
    Последнее редактирование: 7 окт 2015
  4. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Одно и то же ведь
     
  5. fhntv24

    fhntv24 Активный участник Пользователь

    Баллы:
    88
    немного рак. Поправил
     
  6. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Я проверку поправил, а вот массив куда сунуть? о.о
     
  7. fhntv24

    fhntv24 Активный участник Пользователь

    Баллы:
    88
    какой масив , сер ?
     
  8. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Я создал свой массив и его, кажется, нужно как-то добавить и в getStackInSlot метод, дабы избежать outOfBoundsException'a
     
  9. fhntv24

    fhntv24 Активный участник Пользователь

    Баллы:
    88
    Чтобы избежать ошибки нужно чтобы индекс был меньше размера масива.
    В масиве Н елементов, первый - 0. Последний - N - 1
     
  10. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    upload_2015-10-8_20-46-56.png
    outOfBoundsException: -1 o.o
     
  11. log_inil

    log_inil Активный участник Пользователь

    Баллы:
    88

    Ты из массива достанешь ячейку заведомо большую по номеру?
    IF ( ID > ARRAY.SIZE )
    ....
    IF закончился

    и потом пытаешься вернуть то, чего может быть и нету, без проверок и прочих вещей
    return ARRAY[ID];
    _______________________
    что ты хочешь сделать, кастомный объект с инвентарём??
     
  12. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    9 Дополнительных слотов в инвентарь при наличии нужного предмета
     
  13. log_inil

    log_inil Активный участник Пользователь

    Баллы:
    88
    что ты делаешь методом getStackInSlot?
    какой предмет ты хочешь там видеть?
    __
    слот в инвентаре добавляется каким-то другим способом, не?
    __
    Ты знаешь что такое стек-трейс?
     
  14. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Cлоты и все проверки я уже добавил, мне осталось решить эту проблему с outOfBoundsException, чтобы подогнать новые айди для своих 9 слотов
     
  15. log_inil

    log_inil Активный участник Пользователь

    Баллы:
    88
    Погугли что такое стек-ттрейс...
    после... дай строку с ошибкой...
    return замени на

    if ( aitemstack.length < i || i < 0 ){
    return null;
    }else{
    return aitemstack [ i ];
    }
     
    Последнее редактирование: 9 окт 2015
  16. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Код:
    java.lang.ArrayIndexOutOfBoundsException: 36
        at net.minecraft.src.InventoryPlayer.getStackInSlot(InventoryPlayer.java:329)
        at net.minecraft.src.Slot.getStack(Slot.java:36)
        at net.minecraft.src.GuiContainer.drawSlotInventory(GuiContainer.java:169)
        at net.minecraft.src.GuiContainer.drawScreen(GuiContainer.java:57)
        at net.minecraft.src.GuiInventory.drawScreen(GuiInventory.java:42)
        at net.minecraft.src.EntityRenderer.updateCameraAndRender(EntityRenderer.java:552)
        at net.minecraft.client.Minecraft.run(Minecraft.java:520)
        at java.lang.Thread.run(Unknown Source)
    
     
  17. log_inil

    log_inil Активный участник Пользователь

    Баллы:
    88
    Скрин метода, в эклипсе\нетбинсе.
    там слева порядок\номера строк отображаются
    http://melistraza.blogspot.ru/2013/06/eclipse.html
     
  18. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Я знаю, все это указывает на return aitemstack;
     
  19. log_inil

    log_inil Активный участник Пользователь

    Баллы:
    88
    Так ты сделал правку?
    Аа.... это РБ код режет... return aitemstack [ i ];
     
  20. Автор темы
    turkitakis

    turkitakis Участник

    Баллы:
    31
    Да, сделал
     

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