package org.ultramine.mods.hawkeye; import java.text.SimpleDateFormat; import java.util.List; import net.minecraft.event.ClickEvent; 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; /** * Manages displaying of search results. Includes utilities for handling pages * of results * * @author oliverw92 */ public class DisplayManager { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); /** * Displays a page of data from the specified {@link PlayerSession} search * results. Contains appropriate methods for detecing errors e.g. no results * * @param session * {@link PlayerSession} * @param page * page number to display */ public static void displayPage(PlayerSession session, int page) { //Check if any results are found List<DataEntry> results = session.getSearchResults(); if(results == null || results.size() == 0) { HawkUtil.sendMessage(session.getSender(), "&cNo results found"); return; } //Work out max pages. Return if page is higher than max pages int maxLines = session.isOnePoint() ? 10 : 8; int maxPages = (int) Math.ceil((double) results.size() / maxLines); if(page > maxPages || page < 1) return; //Begin displaying page HawkUtil.sendMessage(session.getSender(), "&8--------------------- &7Page (&c" + page + "&7/&c" + maxPages + "&7) &8--------------------" + (maxPages < 9 ? "-" : "")); if(session.isOnePoint()) { ChatComponentText line = new ChatComponentText("Location: "); line.getChatStyle().setColor(EnumChatFormatting.GRAY); line.appendSibling(formatCoords(results.get(0))) .appendText(" Actions: ") .appendSibling(new ChatComponentText(Integer.toString(results.size())).setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); session.getSender().addChatMessage(line); } for(int i = (page - 1) * maxLines; i < ((page - 1) * maxLines) + maxLines; i++) { if(i == results.size()) break; DataEntry entry = results.get(i); // sendLine(session.getSender(), "&cid:" + entry.getDataId() + " &7" + entry.getFormattedDate().substring(5) + " &c" + entry.getPlayer() + " &7" + entry.getType().getConfigName()); // sendLine(session.getSender(), " &cLoc: &7" + entry.getWorld() + "-" + entry.getX() + "," + entry.getY() + "," + entry.getZ() + " &cData: &7" + entry.getStringData()); 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.getChatStyle().setColor(EnumChatFormatting.GRAY); line1.appendSibling(new ChatComponentText("| ").setChatStyle(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.getChatStyle().setColor(EnumChatFormatting.GRAY); line2.appendSibling(new ChatComponentText("| ").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.DARK_GRAY))) .appendText(" Loc: ") .appendSibling(formatCoords(entry)) .appendText(" Data: ") .appendSibling(formatData(entry)); session.getSender().addChatMessage(line2); } } // Util.sendMessage(session.getSender(), "&8-----------------------------------------------------"); return; } private static IChatComponent withColor(EnumChatFormatting color, String str) { return new ChatComponentText(str).setChatStyle(new ChatStyle().setColor(color)); } private static IChatComponent formatID(DataEntry entry) { String sid = Long.toString(entry.getDataId()); ChatComponentText id = new ChatComponentText(sid); id.getChatStyle().setColor(EnumChatFormatting.RED); id.getChatStyle().setChatClickEvent(new ClickEvent(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.getChatStyle().setColor(EnumChatFormatting.RED); player.getChatStyle().setChatClickEvent(new ClickEvent(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.getChatStyle().setColor(EnumChatFormatting.GOLD); coords.getChatStyle().setChatClickEvent(new ClickEvent(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; } }