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

Помогите Страницы из инвентарей

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

  1. Автор темы
    Energy warrior

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

    Баллы:
    76
    Привет! Я, конечно, понимаю, что подобная тема уже была, я её посмотрел, но не понял так как сделать много страниц. Помогите решить данный вопрос. P.s тему на спиготе я смотрел, но так и не понял что нужно делать. P.s.s не кидайте в меня камнями за вышесказанное.
     
  2. alexandrage

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

    Баллы:
    173
    Код:
        public static <T> List<List<T>> split(List<T> list, int targetSize) {
            List<List<T>> lists = new ArrayList<List<T>>();
            for (int i = 0; i < list.size(); i += targetSize) {
                lists.add(list.subList(i, Math.min(i + targetSize, list.size())));
            }
            return lists;
        }
     
  3. alexandrage

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

    Баллы:
    173
    Код:
        public static Menu subMenu(List<List<ItemStack>> lists, int i, String name, ItemStack next) {
            if (i > lists.size() || i < 1) {
                i = 1;
            }
            List<ItemStack> stack = new ArrayList<ItemStack>(lists.get(i - 1));
            ItemMeta meta = next.getItemMeta();
            meta.setDisplayName("Next");
            meta.setLore(Arrays.asList(new String[] { String.valueOf(i) }));
            next.setItemMeta(meta);
            stack.add(next);
            return new Menu(stack, name);
        }
    Код:
        public static void menu(InventoryClickEvent e, List<List<ItemStack>> lists) {
            if (e.getInventory().getHolder() instanceof Menu) {
                e.setCancelled(true);
                ItemStack item = e.getCurrentItem();
                if (item == null)
                    return;
                ItemMeta meta = item.getItemMeta();
                if (meta == null)
                    return;
                if (!meta.hasDisplayName())
                    return;
                if (!meta.hasLore())
                    return;
                if (meta.getDisplayName().equals("Next")) {
                    ItemStack next = new ItemStack(Material.GLASS, 1);
                    int cur = Integer.parseInt(meta.getLore().get(0));
                    Menu menu = subMenu(lists, cur + 1, "Menu", next);
                    e.getWhoClicked().openInventory(menu.getInventory());
                }
            }
        }
     
  4. alexandrage

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

    Баллы:
    173
    Код:
    public class Menu implements InventoryHolder {
    
        private Inventory inventory;
    
        public Menu(List<ItemStack> stack, String title) {
            this.inventory = Bukkit.createInventory(this, 9 * (int) Math.ceil((double) stack.size() / 9), title);
            for (int i = 0; i < stack.size(); i++) {
                inventory.setItem(i, stack.get(i));
            }
        }
    
        @Override
        public Inventory getInventory() {
            return this.inventory;
        }
    }
     
  5. Автор темы
    Energy warrior

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

    Баллы:
    76
    Конечно здорово,что мне кинули код только можно на словах. Я хочу, чтобы при нажатии на кнопку, сразу открывалась первая страница, чтобы были срелки вперёд и назад, и чтобы предметы в эти менюшки загружались. Не надо код надо словами а то я не очень понимаю.
     
  6. alexandrage

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

    Баллы:
    173
    Тут есть одна кнопка вперед. Добавь для назад и все.
     
  7. Автор темы
    Energy warrior

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

    Баллы:
    76
    Да я понял. А как быть с первой страницей где нет стрелки назад.
     
  8. Автор темы
    Energy warrior

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

    Баллы:
    76
    Как мне вычислить сколько нужно инвентарей запихнуть в лист а потом добавлять в них предметы.
     
  9. alexandrage

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

    Баллы:
    173
    Чекать индекс и решать добавлять назад или нет. У меня одной по кругу листает и все.
     
  10. Автор темы
    Energy warrior

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

    Баллы:
    76
    Короче, я думаю так что нужно создать первую страницу, отлавливать клик по стрелке и переходить к сраницам в листе. Но как я говорил как мне вычислить сколько страниц мне нужно чтобы поместились все предметы из списка.
     
  11. Автор темы
    Energy warrior

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

    Баллы:
    76
    Хотя в принципе можно сделать деление по модулю и если он не будет равен нулю тогда создать ещё один инвентарь под него.
     
  12. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Такие мелкие задачи как расчет страниц ты должен решать сам, иначе никогда ничего не научишься в жизни.
    Логика и элементарная математика в помощь.
     
  13. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    int pages = Math.ceil(items.size()/45);
    С расчёта что предметами заняты 5 рядов, а 6 для предметов навигации.
     

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