Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Варпы по страницам.

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

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

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

    Баллы:
    46
    Имя в Minecraft:
    HunterGaming13
    Итак, возвращайся к теме по страницам инвентаря, я так и не понял как сделать, чтобы переходя на следующую страницу инвентаря там появлялись варпы другие, а предыдущие были на предыдущей странице.
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Както так:
    Main
    Код:
    package ru.leymooo.plName;
    
    import java.util.HashMap;
    import java.util.Set;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.google.common.collect.Sets;
    
    public class Main extends JavaPlugin implements Listener {
        HashMap<Integer, PageInv> warps = new HashMap<Integer, PageInv>();
        @Override
        public void onEnable() {
            //Создаем лист с варпами, или используем существующий.
            Set<String> localWarpList = Sets.newConcurrentHashSet();
            //Заполянем его.(Этот цикл тупо для теста.)
            //Если ессентиалс даёт уже готовый список, то это можно пропустить.
            for (int i = 0; i<240;i++) {
                localWarpList.add(i+"");
            }
            int page = 1;
            //Запускаем цикл до того пока наш список не очистится.
            while (!localWarpList.isEmpty()) {
                int maxItems = 54;
                int limit = 0;
                PageInv pageI = new PageInv(page);
                //Добавляем предметы для перемешения по страницам. Слоты в сундуке начинаются с 0 до 53.
                if (page == 1 && localWarpList.size() > 54) {
                    pageI.getInventory().setItem(53, getItemStackWithName("nextPage", Material.BARRIER));
                } else if (page != 1 && localWarpList.size() > 53) {
                    pageI.getInventory().setItem(53, getItemStackWithName("nextPage", Material.BARRIER));
                    pageI.getInventory().setItem(45, getItemStackWithName("prevPage", Material.GRASS));
                } else if (page != 1 && localWarpList.size() <= 53) {
                    pageI.getInventory().setItem(45, getItemStackWithName("prevPage", Material.GRASS));
                }
                //Заполняем гуи предметами.
                for (String warp : localWarpList) {
                    if (limit == maxItems) {
                        continue;
                    }
                    if (pageI.getInventory().getItem(limit) == null) {
                        pageI.getInventory().setItem(limit, getItemStackWithName(warp, Material.GLASS));
                        localWarpList.remove(warp);
                    }
                    ++limit;
                }
                //Кешируем гуи
                warps.put(page, pageI);
                ++page;
            }
            Bukkit.getPluginManager().registerEvents(this, this);
        }
        private ItemStack getItemStackWithName(String name, Material mat) {
            ItemStack it = new ItemStack(mat);
            ItemMeta meta = it.getItemMeta();
            meta.setDisplayName(name);
            it.setItemMeta(meta);
            return it;
        }
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            //Открываем игроку первую страницу
            ((Player)sender).openInventory(warps.get(1).getInventory());
            return true;
        }
    
        @EventHandler
        public void onClick(InventoryClickEvent e) {
            //чекаем что это наш инвентарь
            if (e.getInventory().getHolder() instanceof PageInv) {
                PageInv inv = (PageInv) e.getInventory().getHolder();
                e.setCancelled(true);
                //перемешяем по страницам
                if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.BARRIER) {
                    e.getWhoClicked().openInventory(warps.get((inv.getPage()+1)).getInventory());
                    return;
                }
                if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.GRASS) {
                    e.getWhoClicked().openInventory(warps.get((inv.getPage()-1)).getInventory());
                    return;
                }
                //TODO: Teleport to warp
            }
        }
    }
    
    PageInv:
    Код:
    package ru.leymooo.plName;
    
    import org.bukkit.Bukkit;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.InventoryHolder;
    
    public class PageInv implements InventoryHolder {
        private int page;
        private Inventory inv;
        public PageInv(int page) {
            this.inv = Bukkit.createInventory(this, 54);
            this.page = page;
        }
        @Override
        public Inventory getInventory() {
            return this.inv;
        }
        public int getPage() {
            return this.page;
        }
    }
    
     
  4. Автор темы
    HunterGaming

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

    Баллы:
    46
    Имя в Minecraft:
    HunterGaming13
    Благодарю.[DOUBLEPOST=1493208787,1491935028][/DOUBLEPOST]Можно еще пример?
     
Статус темы:
Закрыта.

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