public abstract class PaginableInventory extends InventoryConstructor { @Setter private List iconsPage; @Getter private int size; @Setter @Getter private int page; @Setter private Player player; //ICONS NEXT and BEFORE @Setter private Icon nextPage; @Setter private int positionNextPage; @Setter private Icon previousPage; @Setter private int positionPreviousPage; public PaginableInventory(int sizeGui) { super(sizeGui); this.size = sizeGui; } private void emptyInventory() { if(getInventory().firstEmpty() == -1) { for(int i = 0; i < size + 1; i++) { getInventory().remove(i); } player.updateInventory(); } } public void setPage(int page) { Objects.requireNonNull(positionNextPage, "Position Next Page is missing"); Objects.requireNonNull(positionPreviousPage, "Position Previous Page is missing"); int maxPage = getMaxPage(); Bukkit.broadcastMessage("MaxPage: " + String.valueOf(iconsPage.size() / size)); if(page > maxPage) { if(this.page == maxPage) return; page = maxPage; } else if( page < 0) { if(page == 0) return; page = 0; } if(maxPage > 0) { if(page == maxPage && previousPage != null) { setItem(previousPage, positionPreviousPage); } else if(page == maxPage && nextPage != null) { setItem(nextPage, positionNextPage); } else { //PREVIOUS ItemStack head_previous = AlixMaterial.PLAYER_HEAD.parseItem(); ItemMeta meta_previous = head_previous.getItemMeta(); AlixSkull.applySkin(meta_previous, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWYxMzNlOTE5MTlkYjBhY2VmZGMyNzJkNjdmZDg3YjRiZTg4ZGM0NGE5NTg5NTg4MjQ0NzRlMjFlMDZkNTNlNiJ9fX0="); head_previous.setItemMeta(meta_previous); //NEXT ItemStack head_next = AlixMaterial.PLAYER_HEAD.parseItem(); ItemMeta meta_next = head_next.getItemMeta(); AlixSkull.applySkin(meta_next, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTNmYzUyMjY0ZDhhZDllNjU0ZjQxNWJlZjAxYTIzOTQ3ZWRiY2NjY2Y2NDkzNzMyODliZWE0ZDE0OTU0MWY3MCJ9fX0="); head_previous.setItemMeta(meta_next); if(previousPage == null) previousPage = new Icon(head_previous, action -> { previousPage(); }); if(nextPage == null) nextPage = new Icon(head_next, action -> { nextPage(); }); setItem(nextPage, positionNextPage); setItem(previousPage, positionPreviousPage); } } this.page = page; emptyInventory(); //Add Items List icons = getPageItems(page); for(int i = 0; i < iconsPage.size(); i++) { if(i < icons.size()) { if(getInventory().getItem(i) == null) { addItem(icons.get(i)); continue; } setItem(icons.get(i), i); } } } public int getMaxPage() { //Math.round(iconsPage.size() / size) return (int) Math.ceil(iconsPage.size() / size); } public void nextPage() { this.setPage(page + 1); } public void previousPage() { this.setPage(page - 1); } public InventoryConstructor getInventoryConstructor() { return this; } public List getPageItems(int i) { int Start = i * size; int End = Math.min((i + 1) * size, iconsPage.size()); return iconsPage.subList(Start, End); } }