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

  • Автор темы Автор темы Mikyc
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Mikyc

Участник
Баллы
31
Всем привет, есть такой вот код:
Код:
package mlk.plug.inventories;

import mlk.plug.DungeonCore;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.*********ventory.Inventory;
import org.*********ventory.InventoryHolder;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;

import java.util.*;

public class RegionsMenu implements InventoryHolder {
    Inventory inv;
    private YamlConfiguration regions = YamlConfiguration.loadConfiguration(DungeonCore.instance().regions); //Кастомный конфиг
    LinkedHashSet<String> all = new LinkedHashSet<>(); //Все элементы списка которые не вошли в меню
    LinkedHashSet<String> inmenu = new LinkedHashSet<>(); //Все элементы списка которые в меню

    public RegionsMenu() {
        init();
        reg();
    }

    public void reg () {
        regions = YamlConfiguration.loadConfiguration(DungeonCore.instance().regions);
    }

    public void init () { //Начало
        LinkedHashSet<String> reg = new LinkedHashSet<>(regions.getKeys(false));
        handler(reg);

    }

    public void nextpage () { //Когда нажат изумрудный блок
        handler(all);
    }

    private void handler (LinkedHashSet<String> array) {
        inv = Bukkit.createInventory(this, 54, "§cRegions"); //Объявление инвентаря (каждая страница свой)
        ItemStack item;
        //top and footer
        for (int i = 0; i < 9; i++) {
                item = createItem("§a§lDungeonCore", Material.GRAY_STAINED_GLASS_PANE, null);
                inv.setItem(i, item);
                //footer
                for (int j = 45; j < 54; j++) {
                    inv.setItem(j, item);
                }
            }
        //left and right
        for (int i = 0; i < 54; i += 9) {
                item = createItem("§a§lDungeonCore", Material.GRAY_STAINED_GLASS_PANE, null);
                inv.setItem(i, item);
                //right
                for (int j = 8; j < 54; j += 9) {
                    inv.setItem(j, item);
                }
            }
        item = createItem("§a§lNext", Material.EMERALD_BLOCK, null);
        inv.setItem(50, item);
        //regions

        for (String key : array) {
                ConfigurationSection section = regions.getConfigurationSection(key); //Каждый новый конфиг(предмет) для добавления
                if (section == null) continue;
                item = createItem("§e§l" + section.getName(), Material.END_PORTAL_FRAME, null); //Создание предмета
                try {
                    inv.setItem(inv.firstEmpty(), item); //Добавляем предмет в меню
                    inmenu.add(section.getCurrentPath()); //Все элементы списка которые находятся в меню
                }catch(IndexOutOfBoundsException e) {
                    all.add(section.getCurrentPath()); //Все элементы списка которые не вошли в меню
            }
        } //Имена для End_Portal_Frame добавляются из конфига для каждой новой записи своя рамка
    }

    private ItemStack createItem(String name, Material mat, List<String> lore) { //Collections.singletonList("§4Hey how are you?")
        ItemStack item = new ItemStack(mat, 1);
        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName(name);
        meta.setLore(lore);
        item.setItemMeta(meta);
        return item;

    }

    @Override
    public Inventory getInventory() {
        return inv;
    }
}

Где создаётся инвентарь и в него помещаются предметы с названием из конфига. Проблема такова, что когда место кончается, то выдаёт ошибку. Поэтому я принял решение ловить её и создавать список с теми элементами, которым не хватило места(Можно ли как-то иначе это реализовать?). Так вот максимальное кол-во предметов в нём это 28 и "страница" под номером 2 открывается, но дальше не идёт т.к список начинается сначала тут я подумал добавить переменную которая будет хранить те имена, которые в данный момент уже показаны. Я попытался удалить значения данного списка(inmenu) из списка "all"(Дабы начинать список со следующей "страницы") при помощи
Код:
all.removeAll(inmenu);
в методе "nextpage" - т.е когда нажат изумрудный блок, но так почему-то не сработало и из-за моих не очень больших знаний в Java я отправился в гугл, но не найдя там ничего решил написать сюда за помощью в чём может быть причина такого исхода?

Вроде бы всё написал что нужно (Если код кривой, то можете дать совет?)
 
Юзай SmartInvs. Там уже все реализовано за тебя.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх