package net.rosamei.alixapi.guis.gui; import lombok.Getter; import lombok.Setter; import net.rosamei.alixapi.guis.gui.Components.Icon; import net.rosamei.alixapi.various.AlixMaterial; import net.rosamei.alixapi.various.AlixSkull; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.util.List; import java.util.Objects; /** * Paginable Inventory extend it * @since 1.0 * @author RosaMei */ public abstract class PaginableInventory extends InventoryConstructor { @Setter private List iconsPage; @Setter private int[] paginableSlots; @Getter private final 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, int[] slots) { super(sizeGui); this.size = sizeGui; this.paginableSlots = slots; } private void emptyInventory() { if(getInventory().firstEmpty() == -1) { for(int i = 0; i < size + 1; i++) { getInventory().setItem(i, null); } 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(); emptyInventory(); if(page > maxPage) { if(this.page == maxPage) return; page = maxPage; player.sendMessage(ChatColor.RED + "You are in the last page, you can't go any futher!"); } else if( page < 0) { if(page == 0) return; player.sendMessage(ChatColor.RED + "You are in the first page, you can't go any futher!"); 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, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTg5ZGQ3YWY0YzgwM2I1Mjg3YzQzMzcwN2M3YzQzN2NjMjhkNTIxYmI2ODJjNDdhNGQzZDVkMmE0OGFmYTYifX19"); head_previous.setItemMeta(meta_previous); //NEXT ItemStack head_next = AlixMaterial.PLAYER_HEAD.parseItem(); ItemMeta meta_next = head_next.getItemMeta(); AlixSkull.applySkin(meta_next, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWEyNmU1ZmYxODY3NzhlZWU2ZGJmOThhMTUwNzQzODRjMzIxMWQxNmJlMGYyOTQ2MGJiZDk2NGFlZmYifX19"); head_next.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; //Add Items List icons = getPageItems(page); int length = paginableSlots.length; for (int x = 0; x getPageItems(int page) { int size = paginableSlots.length; int Start = page * size; int End = Math.min((page + 1) * size, iconsPage.size()); return iconsPage.subList(Start, End); } } //Todo: idk //Just i don't have any immagination about making it