package org.shininet.bukkit.itemrenamer; import java.util.List; import java.util.Map; import java.util.WeakHashMap; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; /** * A utility class for paging messages. * @author Kristian */ public class PagedMessage { /** * Number of lines per page. */ public static final int PAGE_LINE_COUNT = 9; // Paged message private final Map<CommandSender, List<String>> pagedMessage = new WeakHashMap<CommandSender, List<String>>(); public String getPage(CommandSender receiver, int pageIndex) { List<String> paged = pagedMessage.get(receiver); // Make sure the player has any pages if (paged != null) { List<String> output = Lists.newArrayList(); int lastPage = ((paged.size() - 1) / PAGE_LINE_COUNT) + 1; for (int i = PAGE_LINE_COUNT * (pageIndex - 1); i < PAGE_LINE_COUNT * pageIndex; i++) { if (i < paged.size()) { output.add(" " + paged.get(i)); } } // More data? if (pageIndex < lastPage) { output.add("Send /renamer page " + (pageIndex + 1) + " for the next page."); } return Joiner.on("\n").join(output); } else { return ChatColor.RED + "No pages found."; } } /** * Send a message by splitting it up into pages. * @param receiver - the reciever. * @param message - the message to send. * @return The preliminary message to send to the player. */ public String createPage(CommandSender receiver, String message) { List<String> messages = Lists.newArrayList(Splitter.on("\n").split(message)); if (messages.size() > 0 && messages.size() > PAGE_LINE_COUNT) { // Divide the messages into chuncks pagedMessage.put(receiver, messages); return getPage(receiver, 1); } else { // Just send it without any fuzz return message; } } }