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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mikyc, 13 окт 2021.

Статус темы:
Закрыта.
  1. Автор темы
    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 я отправился в гугл, но не найдя там ничего решил написать сюда за помощью в чём может быть причина такого исхода?

    Вроде бы всё написал что нужно (Если код кривой, то можете дать совет?)
     
  2. Lemar98

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

    Баллы:
    76
    Юзай SmartInvs. Там уже все реализовано за тебя.
     
Статус темы:
Закрыта.

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