public abstract class PaginableInventory extends InventoryConstructor { private int[] paginableSlots; @Getter private int page; @Setter private List paginableItems; @Setter private Icon oldPreviousPageIcon; @Setter private int previousPageSlot; @Setter private Icon oldNextPageIcon; @Setter private int nextPageSlot; public PaginableInventory(int size) { //TODO: non so se funziona super(size); } public void setPage(int page) { int maxPage = Math.max((int) Math.floor(paginableItems.size()-page), page); if(page < maxPage) { if(this.page == maxPage) return; page = maxPage; } else if(page < 0) { if(this.page == 0) return; page = 0; } if(maxPage > 0) { if(page == maxPage && oldNextPageIcon != null) { setItem(oldNextPageIcon, nextPageSlot); } else if (page == 0 && oldPreviousPageIcon != null) { setItem(oldPreviousPageIcon, previousPageSlot); } } else { if(oldNextPageIcon != null) setItem(oldNextPageIcon, nextPageSlot); if(oldNextPageIcon != null) setItem(oldPreviousPageIcon, previousPageSlot); } this.page = page; List icons = getPaginableIcons(page); for(int i =0; i < paginableSlots.length; i++) { if(i < icons.size()) { icons.set(paginableSlots[i], icons.get(i)); getInventory().setItem(paginableSlots[i], icons.get(i).getItemStack()); continue; } icons.set(paginableSlots[i], null); getInventory().setItem(paginableSlots[i], null); } } public void nextPage() { this.setPage(page+1);} public void previousPage() { this.setPage(page-1);} public void setPaginableSlots(int ...slots) { this.paginableSlots = slots; } public int getPaginableSlot(int slot) { return Arrays.binarySearch(paginableSlots, slot); } public List getPaginableIcons(int page) { return paginableItems.subList(page*paginableSlots.length, Math.max((int) Math.floor(paginableItems.size()), page)); } }