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

Energy warrior

Активный участник
Пользователь
Баллы
76
Привет! Я, конечно, понимаю, что подобная тема уже была, я её посмотрел, но не понял так как сделать много страниц. Помогите решить данный вопрос. P.s тему на спиготе я смотрел, но так и не понял что нужно делать. P.s.s не кидайте в меня камнями за вышесказанное.
 
Код:
    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;
    }
 
Код:
    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());
            }
        }
    }
 
Код:
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;
    }
}
 
Код:
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;
    }
}
Конечно здорово,что мне кинули код только можно на словах. Я хочу, чтобы при нажатии на кнопку, сразу открывалась первая страница, чтобы были срелки вперёд и назад, и чтобы предметы в эти менюшки загружались. Не надо код надо словами а то я не очень понимаю.
 
Как мне вычислить сколько нужно инвентарей запихнуть в лист а потом добавлять в них предметы.
 
Короче, я думаю так что нужно создать первую страницу, отлавливать клик по стрелке и переходить к сраницам в листе. Но как я говорил как мне вычислить сколько страниц мне нужно чтобы поместились все предметы из списка.
 
Хотя в принципе можно сделать деление по модулю и если он не будет равен нулю тогда создать ещё один инвентарь под него.
 
Такие мелкие задачи как расчет страниц ты должен решать сам, иначе никогда ничего не научишься в жизни.
Логика и элементарная математика в помощь.
 
int pages = Math.ceil(items.size()/45);
С расчёта что предметами заняты 5 рядов, а 6 для предметов навигации.
 
Назад
Верх