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

Помогите Сборник багов спигота

Тема в разделе "Разработка плагинов для новичков", создана пользователем Energy warrior, 31 дек 2018.

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

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

    Баллы:
    76
    1)Делаю плагин, в котором есть GUI. Делаю с помощью холдера. То есть у меня есть главный класс GUI Display он имплементирует InventoryHolder. Я создаю другие классы наследующие класс Display. В InventoryClickEvent делаю нечто следующее
    PHP:
    @EventHandler
        
    public void click(InventoryClickEvent event){
            
    InventoryHolder holder event.getClickedInventory().getHolder();
            if(
    event.getSlotType() == InventoryType.SlotType.OUTSIDE) return;
            if(
    holder != null) {
                if (
    holder instanceof Display) {
                    
    event.setCancelled(true);
                    ((
    Display)holder).click(event);
                }
            }
        }
    И когда я кликаю в область где нет инвентаря
    [​IMG]
    Мне вылетает NPE и жалуется на строчку: InventoryHolder holder = event.getClickedInventory().getHolder();
    2) Делаю переключатель. Нажимаешь и появляется следующая функция. Делаю так.
    Есть массив с именами функций. Есть переменная текущего индекса. Когда я нажимаю на кнопку, индекс увеличивается и имя кнопки меняется. Вчера ещё работало. А сегодня нажимаю ничего не происходит. Помогите решить эти 2 проблемы.
     
  2. Автор темы
    Energy warrior

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

    Баллы:
    76
  3. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Причем тут баги спигота, ты проверку на OUTSIDE делаешь после получения холдера, npe вылетает, т. к. твой getClickedInventory() == null.

    Получай лучше не clickedInventory, а Inventory и даже если в нижнем инвентаре или вне клик будет, то вернет тот инвентарь, что сверху и отменяй эвент, если холдер твой. Ну а метод click свой запускай только если rawSlot < inventory.getSize().

    Ну и убери проверку холдера на нулл, null instanceof всегда false.
     
  4. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Нормально скажи или лучше код скидывай, посмотрим шо за хрень ты там настрочил.
     
  5. Автор темы
    Energy warrior

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

    Баллы:
    76
    Я outside поэтому и добавил, что у меня NPE вылетал.
     
  6. Автор темы
    Energy warrior

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

    Баллы:
    76
    Код:
    public void render(){
            btn = new ItemButton(new Item(Material.STONE).setName("§aФорма блока: "+names[current_index]),event -> {
                try {
                    if(current_index < names.length) {
                        current_index++;
                    } else {
                        current_index=0;
                    }
                    addComponent(event.getSlot() + 1, btn);
                    open((Player) event.getWhoClicked());
                } catch (ArrayIndexOutOfBoundsException e){
                    e.printStackTrace();
                }
            });
            addComponent(12,btn);
        }
     
  7. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Глупый что ли, у тебя NPE вылетает до проверки, делай как я написал.

    Что за костыли, нормально напиши, что ты хочешь сделать в итоге.
     
  8. Автор темы
    Energy warrior

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

    Баллы:
    76
    Нажимаешь на кнопку, меняется функция, нажимаешь ещё раз, ещё раз меняется.
     
  9. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну так делай абстракцию состояния того, что меняется и се, а не костыль с массивом.
     
  10. Автор темы
    Energy warrior

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

    Баллы:
    76
    Я, к сожалению, говнокодер. И не владею программистскими терминами.
     
  11. alexandrage

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

    Баллы:
    173
    Расплывчатые требования. У меня есть вот такая хренотень.
     
  12. Автор темы
    Energy warrior

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

    Баллы:
    76
    Мне вот такие ровно кнопки нужны.
     
  13. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну ты понимаешь, что у тебя массив в котором имя предмета хранится и меняется это костыль и при малейшем изменении требований все переписывать нужно? Используй функциональные интерфейсы и абстракция поведение предмета при клике с разными реализациями. Одинаковый для всех, для конкретного игрока и т. п.
     
  14. Автор темы
    Energy warrior

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

    Баллы:
    76

    Почему?
    Как это?
    Какие?
    Что это значит?

    Мне бы лит-ру какую-нибудь. Для осмысления.
     
  15. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ясно все с тобой, иди учи для начала java и ооп.
    Литература schildt java 8
    И докуменатацию jdk тоже почитай.
    Ну и если сложно букавки читать параллельно можешь смотреть видео этого челика, для новичков сойдет:
    https://www.youtube.com/playlist?list=PL786bPIlqEjRDXpAKYbzpdTaOYsWyjtCX
     
  16. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
  17. Автор темы
    Energy warrior

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

    Баллы:
    76
    Спасибо.
     
  18. alexandrage

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

    Баллы:
    173
  19. Автор темы
    Energy warrior

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

    Баллы:
    76
    Немного почитав, я могу предположить, что делать абстракцию состояния того, что меняется, значит сделать так называемый "чертёж" этого состояния?
     
  20. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Че?)
     
Статус темы:
Закрыта.

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