Advertisement
jts3304

PaginatedList.java

Jun 28th, 2017
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.77 KB | None | 0 0
  1. package me.smorce.thanalogic;
  2.  
  3. import java.util.List;
  4. import net.md_5.bungee.api.ChatColor;
  5. import net.md_5.bungee.api.chat.BaseComponent;
  6. import net.md_5.bungee.api.chat.ClickEvent;
  7. import net.md_5.bungee.api.chat.ComponentBuilder;
  8. import net.md_5.bungee.api.chat.HoverEvent;
  9. import net.md_5.bungee.api.chat.TextComponent;
  10.  
  11. public class PaginatedList
  12. {
  13.     private final String header;
  14.     private final int pageSize;
  15.     private final List<BaseComponent> contents;
  16.     private final String pageChangeCommand;
  17.     private final int pages;
  18.  
  19.     /**
  20.      * Stores TextComponent objects that can be fetched in paginated form
  21.      *
  22.      * @param header
  23.      *            - the header displayed at the top of each page
  24.      * @param pageSize
  25.      *            - the number of contents per page, a page size of 0 indicates that there will only be one page
  26.      * @param contents
  27.      *            - the list of contents to be paginated
  28.      * @param pageChangeCommand
  29.      *            - the command to use when changing pages
  30.      */
  31.     public PaginatedList(String header, Integer pageSize, List<BaseComponent> contents, String pageChangeCommand)
  32.     {
  33.         this.header = header;
  34.         if(pageSize == null)
  35.         {
  36.             pageSize = contents.size();
  37.         }
  38.         this.pageSize = pageSize;
  39.         this.contents = contents;
  40.         this.pageChangeCommand = pageChangeCommand;
  41.         pages = contents.size() / pageSize;
  42.     }
  43.  
  44.     public BaseComponent getPage(int page)
  45.     {
  46.         page = Math.min(pages, Math.max(1, page));
  47.         ComponentBuilder builder = new ComponentBuilder(this.header + " - ");
  48.         builder.color(ChatColor.BLUE).bold(true);
  49.         if(page != 1)
  50.         {
  51.             builder.append("[Previous] ").bold(false)
  52.                     .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
  53.                             new ComponentBuilder("Click here to go to the previous page").create()))
  54.                     .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, this.pageChangeCommand + (page - 1)));
  55.         }
  56.         builder.append("Page " + page + "/" + pages).bold(false);
  57.         if(page != pages)
  58.         {
  59.             builder.append(" - [Next]")
  60.                     .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
  61.                             new ComponentBuilder("Click here to go to the next page").create()))
  62.                     .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, this.pageChangeCommand + (page + 1)));
  63.         }
  64.         TextComponent content = new TextComponent(builder.create() + "\n");
  65.         int firstIndex = pageSize * (page - 1);
  66.         int lastIndex = Math.min(firstIndex + pageSize, this.contents.size() - 1);
  67.         for(int i = firstIndex; i < lastIndex; i++)
  68.         {
  69.             content.addExtra(new TextComponent(this.contents.get(i) + "\n"));
  70.         }
  71.         return content;
  72.     }
  73.  
  74.     public BaseComponent getPage()
  75.     {
  76.         return getPage(1);
  77.     }
  78.  
  79.     public String getHeader()
  80.     {
  81.         return header;
  82.     }
  83.  
  84.     public int getPageSize()
  85.     {
  86.         return pageSize;
  87.     }
  88.  
  89.     public List<BaseComponent> getContents()
  90.     {
  91.         return contents;
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement