package com.github.jamesnorris.ablockalypse.utility;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
public class ChatMenu {
private static final int ITEMS_PER_PAGE = 6;// add one for page number and menu name at top
private int pages;
private String menuName, lineColor, menuNameColor, pageIndicatorColor, currentPageNumberColor,
totalPageNumberColor;
private String[] menuItems;
private boolean itemsOnNewLine;
{
lineColor = "�f";
menuNameColor = "�c";
pageIndicatorColor = "�f";
currentPageNumberColor = "�d";
totalPageNumberColor = "�5";
}
public ChatMenu(String menuName, String[] menuItems) {
this(menuName, menuItems, true);
}
/**
* @deprecated Not putting items on a new line tricks the menu into making the page too long.
*/
@Deprecated public ChatMenu(String menuName, String[] menuItems, boolean itemsOnNewLine) {
this.menuName = menuName;
this.menuItems = menuItems;
this.itemsOnNewLine = itemsOnNewLine;
pages = (int) Math.ceil(menuItems.length / (ITEMS_PER_PAGE * 1.0/* to make it a double */));
}
public ChatColor getCurrentPageNumberColor() {
return ChatColor.getByChar(currentPageNumberColor);
}
public ChatColor getLineColor() {
return ChatColor.getByChar(lineColor);
}
public String[] getMenuItems() {
return menuItems;
}
public String getMenuName() {
return menuName;
}
public ChatColor getMenuNameColor() {
return ChatColor.getByChar(menuNameColor);
}
public int getNumberOfPages() {
return pages;
}
public ChatColor getPageIndicatorColor() {
return ChatColor.getByChar(pageIndicatorColor);
}
public ChatColor getTotalPageNumberColor() {
return ChatColor.getByChar(totalPageNumberColor);
}
public boolean makesNewLinePerItem() {
return itemsOnNewLine;
}
public void setCurrentPageNumberColor(ChatColor color) {
currentPageNumberColor = "�" + color.getChar();
}
public void setLineColor(ChatColor color) {
lineColor = "�" + color.getChar();
}
public void setMenuItems(String[] menuItems) {
this.menuItems = menuItems;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
public void setMenuNameColor(ChatColor color) {
menuNameColor = "�" + color.getChar();
}
public void setNewLinePerItem(boolean itemsOnNewLine) {
this.itemsOnNewLine = itemsOnNewLine;
}
public void setNumberOfPages(int pages) {
this.pages = pages;
}
public void setPageIndicatorColor(ChatColor color) {
pageIndicatorColor = "�" + color.getChar();
}
public void setTotalPageNumberColor(ChatColor color) {
totalPageNumberColor = "�" + color.getChar();
}
public void showPage(CommandSender user, int page) {
int pageOffset = page * (ITEMS_PER_PAGE - 1) - (ITEMS_PER_PAGE - 1);
String dashLine = lineColor + getDashLine(page);
user.sendMessage(dashLine + "�r " + menuNameColor + menuName + "�r" + pageIndicatorColor + " - pg " + "�r" + currentPageNumberColor + page + "�r" + totalPageNumberColor + "/" + pages + "�r " + dashLine);
if (page < 1 || page > pages) {
user.sendMessage("�cEMPTY PAGE");
return;
}
if (itemsOnNewLine) {
user.sendMessage(menuItems);
} else {
for (int item = pageOffset; item < pageOffset + ITEMS_PER_PAGE - 1; item++) {
if (menuItems.length <= item) {
return;
}
String line = "";
for (int i = 0; i < 42; i++) {
String menuItem = ChatColor.stripColor(menuItems[item]);
item++;
if (line.length() + menuItem.length() <= 42) {
line += menuItem + ", ";
} else {
break;
}
}
}
}
}
protected String getDashLine(int page) {
String dashLine = "";
int numberOfDashes = (42 - (page > 9 ? 2 : 1) - ChatColor.stripColor(menuName).length()) / 2;
for (int i = 1; i <= numberOfDashes; i++) {
dashLine += "-";
}
return dashLine;
}
}