package org.ultramine.mods.hawkeye; import java.text.SimpleDateFormat; import java.util.List; import net.minecraft.event.ClickEvent; import net.minecraft.event.ClickEvent.Action; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import org.ultramine.mods.hawkeye.entry.DataEntry; import org.ultramine.mods.hawkeye.util.HawkUtil; public class DisplayManager { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); public static void displayPage(PlayerSession session, int page) { List results = session.getSearchResults(); if (results != null && results.size() != 0) { int maxLines = session.isOnePoint() ? 10 : 8; int maxPages = (int)Math.ceil((double)results.size() / (double)maxLines); if (page <= maxPages && page >= 1) { HawkUtil.sendMessage(session.getSender(), "&8--------------------- &7Page (&c" + page + "&7/&c" + maxPages + "&7) &8--------------------" + (maxPages < 9 ? "-" : "")); if (session.isOnePoint()) { ChatComponentText line = new ChatComponentText("Location: "); line.b().setColor(EnumChatFormatting.GRAY); line.a(formatCoords((DataEntry)results.get(0))).appendText(" Actions: ").appendSibling((new ChatComponentText(Integer.toString(results.size()))).a((new ChatStyle()).setColor(EnumChatFormatting.YELLOW))); session.getSender().addChatMessage(line); } for(int i = (page - 1) * maxLines; i < (page - 1) * maxLines + maxLines && i != results.size(); ++i) { DataEntry entry = (DataEntry)results.get(i); if (session.isOnePoint()) { session.getSender().addChatMessage(formatDate(entry).appendText(" ").appendSibling(formatPlayer(entry)).appendText(" ").appendSibling(formatAction(entry)).appendText(" ").appendSibling(formatData(entry))); } else { ChatComponentText line1 = new ChatComponentText(""); line1.b().setColor(EnumChatFormatting.GRAY); line1.a((new ChatComponentText("| ")).a((new ChatStyle()).setColor(EnumChatFormatting.DARK_GRAY))).appendText("id:").appendSibling(formatID(entry)).appendText(" ").appendSibling(formatDate(entry)).appendText(" ").appendSibling(formatPlayer(entry)).appendText(" ").appendSibling(formatAction(entry)); session.getSender().addChatMessage(line1); ChatComponentText line2 = new ChatComponentText(""); line2.b().setColor(EnumChatFormatting.GRAY); line2.a((new ChatComponentText("| ")).a((new ChatStyle()).setColor(EnumChatFormatting.DARK_GRAY))).appendText(" Loc: ").appendSibling(formatCoords(entry)).appendText(" Data: ").appendSibling(formatData(entry)); session.getSender().addChatMessage(line2); } } } } else { HawkUtil.sendMessage(session.getSender(), "&cNo results found"); } } private static IChatComponent withColor(EnumChatFormatting color, String str) { return (new ChatComponentText(str)).a((new ChatStyle()).setColor(color)); } private static IChatComponent formatID(DataEntry entry) { String sid = Long.toString(entry.getDataId()); ChatComponentText id = new ChatComponentText(sid); id.b().setColor(EnumChatFormatting.RED); id.b().setChatClickEvent(new ClickEvent(Action.SUGGEST_COMMAND, sid)); return id; } private static IChatComponent formatDate(DataEntry entry) { return withColor(EnumChatFormatting.DARK_AQUA, DATE_FORMAT.format(entry.getDate())); } private static IChatComponent formatPlayer(DataEntry entry) { ChatComponentText player = new ChatComponentText(entry.getPlayer()); player.b().setColor(EnumChatFormatting.RED); player.b().setChatClickEvent(new ClickEvent(Action.SUGGEST_COMMAND, entry.getPlayer())); return player; } private static IChatComponent formatAction(DataEntry entry) { return withColor(EnumChatFormatting.GOLD, entry.getType().getConfigName()); } private static IChatComponent formatCoords(DataEntry entry) { ChatComponentText coords = new ChatComponentText("[" + entry.getWorld() + "](" + entry.getX() + "," + entry.getY() + "," + entry.getZ() + ")"); coords.b().setColor(EnumChatFormatting.GOLD); coords.b().setChatClickEvent(new ClickEvent(Action.SUGGEST_COMMAND, "/tp " + entry.getWorld() + " " + entry.getX() + " " + entry.getY() + " " + entry.getZ())); return coords; } private static IChatComponent formatData(DataEntry entry) { IChatComponent data = entry.getStringData(); if (data.getChatStyle().getColor() == null) { data.getChatStyle().setColor(EnumChatFormatting.GRAY); } return data; } }