Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.smorce.thanalogic;
- import java.util.List;
- import net.md_5.bungee.api.ChatColor;
- import net.md_5.bungee.api.chat.BaseComponent;
- import net.md_5.bungee.api.chat.ClickEvent;
- import net.md_5.bungee.api.chat.ComponentBuilder;
- import net.md_5.bungee.api.chat.HoverEvent;
- import net.md_5.bungee.api.chat.TextComponent;
- public class PaginatedList
- {
- private final String header;
- private final int pageSize;
- private final List<BaseComponent> contents;
- private final String pageChangeCommand;
- private final int pages;
- /**
- * Stores TextComponent objects that can be fetched in paginated form
- *
- * @param header
- * - the header displayed at the top of each page
- * @param pageSize
- * - the number of contents per page, a page size of 0 indicates that there will only be one page
- * @param contents
- * - the list of contents to be paginated
- * @param pageChangeCommand
- * - the command to use when changing pages
- */
- public PaginatedList(String header, Integer pageSize, List<BaseComponent> contents, String pageChangeCommand)
- {
- this.header = header;
- if(pageSize == null)
- {
- pageSize = contents.size();
- }
- this.pageSize = pageSize;
- this.contents = contents;
- this.pageChangeCommand = pageChangeCommand;
- pages = contents.size() / pageSize;
- }
- public BaseComponent getPage(int page)
- {
- page = Math.min(pages, Math.max(1, page));
- ComponentBuilder builder = new ComponentBuilder(this.header + " - ");
- builder.color(ChatColor.BLUE).bold(true);
- if(page != 1)
- {
- builder.append("[Previous] ").bold(false)
- .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
- new ComponentBuilder("Click here to go to the previous page").create()))
- .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, this.pageChangeCommand + (page - 1)));
- }
- builder.append("Page " + page + "/" + pages).bold(false);
- if(page != pages)
- {
- builder.append(" - [Next]")
- .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
- new ComponentBuilder("Click here to go to the next page").create()))
- .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, this.pageChangeCommand + (page + 1)));
- }
- TextComponent content = new TextComponent(builder.create() + "\n");
- int firstIndex = pageSize * (page - 1);
- int lastIndex = Math.min(firstIndex + pageSize, this.contents.size() - 1);
- for(int i = firstIndex; i < lastIndex; i++)
- {
- content.addExtra(new TextComponent(this.contents.get(i) + "\n"));
- }
- return content;
- }
- public BaseComponent getPage()
- {
- return getPage(1);
- }
- public String getHeader()
- {
- return header;
- }
- public int getPageSize()
- {
- return pageSize;
- }
- public List<BaseComponent> getContents()
- {
- return contents;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement