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

Статус
Закрыто для дальнейших ответов.

HunterGaming

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
sqdFendy
Итак, возвращайся к теме по страницам инвентаря, я так и не понял как сделать, чтобы переходя на следующую страницу инвентаря там появлялись варпы другие, а предыдущие были на предыдущей странице.
 
Както так:
Main
Java:
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.*********ventory.ItemStack;
import org.*********ventory.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:
Java:
package ru.leymooo.plName;

import org.bukkit.Bukkit;
import org.*********ventory.Inventory;
import org.*********ventory.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;
    }
}
 
Както так:
Main
Java:
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.*********ventory.ItemStack;
import org.*********ventory.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:
Java:
package ru.leymooo.plName;

import org.bukkit.Bukkit;
import org.*********ventory.Inventory;
import org.*********ventory.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;
    }
}
Благодарю.
Можно еще пример?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх