package in.twizmwaz.cardinal.command;
import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException;
import in.twizmwaz.cardinal.GameHandler;
import in.twizmwaz.cardinal.chat.ChatConstant;
import in.twizmwaz.cardinal.chat.LocalizedChatMessage;
import in.twizmwaz.cardinal.rotation.LoadedMap;
import in.twizmwaz.cardinal.util.ChatUtils;
import in.twizmwaz.cardinal.util.Contributor;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class RotationCommands {
@Command(aliases = {"rotation", "rot"}, desc = "Shows the current rotation.", usage = "[page]")
public static void rotation(final CommandContext cmd, CommandSender sender) throws CommandException {
int index = cmd.argsLength() == 0 ? 1 : cmd.getInteger(0);
List<LoadedMap> rot = GameHandler.getGameHandler().getRotation().getRotation();
int pages = (int) Math.ceil((rot.size() + 7) / 8);
if (index > pages)
throw new CommandException("Invalid page number specified! Maximum page number is " + pages + ".");
sender.sendMessage(ChatColor.RED + "------------- " + ChatColor.WHITE + new LocalizedChatMessage(ChatConstant.UI_ROTATION_CURRENT).getMessage(ChatUtils.getLocale(sender)) + ChatColor.DARK_AQUA + " (" + ChatColor.AQUA + index + ChatColor.DARK_AQUA + " of " + ChatColor.AQUA + pages + ChatColor.DARK_AQUA + ") " + ChatColor.RED + "-------------");
String[] maps = {"", "", "", "", "", "", "", ""};
for (int i = 0; i <= maps.length - 1; i++) {
int position = 8 * (index - 1) + i;
try {
LoadedMap mapInfo = rot.get(position);
if (mapInfo.getAuthors().size() == 1) {
maps[i] = maps[i] + ChatColor.GOLD + mapInfo.getName() + ChatColor.DARK_PURPLE + " " + new LocalizedChatMessage(ChatConstant.MISC_BY).getMessage(ChatUtils.getLocale(sender)) + " " + ChatColor.RED + mapInfo.getAuthors().get(0).getName();
} else if (mapInfo.getAuthors().size() > 1) {
maps[i] = maps[i] + ChatColor.GOLD + mapInfo.getName() + ChatColor.DARK_PURPLE + " " + new LocalizedChatMessage(ChatConstant.MISC_BY).getMessage(ChatUtils.getLocale(sender)) + " ";
for (Contributor author : mapInfo.getAuthors()) {
if (mapInfo.getAuthors().indexOf(author) < mapInfo.getAuthors().size() - 2) {
maps[i] = maps[i] + ChatColor.RED + author.getName() + ChatColor.DARK_PURPLE + ", ";
} else if (mapInfo.getAuthors().indexOf(author) == mapInfo.getAuthors().size() - 2) {
maps[i] = maps[i] + ChatColor.RED + author.getName() + ChatColor.DARK_PURPLE + " " + new LocalizedChatMessage(ChatConstant.MISC_AND).getMessage(ChatUtils.getLocale(sender)) + " ";
} else if (mapInfo.getAuthors().indexOf(author) == mapInfo.getAuthors().size() - 1) {
maps[i] = maps[i] + ChatColor.RED + author.getName();
}
}
}
if (GameHandler.getGameHandler().getRotation().getNextIndex() == position) {
maps[i] = ChatColor.DARK_AQUA + "" + (position + 1) + ". " + maps[i];
} else {
maps[i] = ChatColor.WHITE + "" + (position + 1) + ". " + maps[i];
}
} catch (IndexOutOfBoundsException e) {
}
}
for (String map : maps) {
if (!map.equalsIgnoreCase("")) {
sender.sendMessage(map);
}
}
}
@Command(aliases = {"maps", "maplist", "ml"}, desc = "Shows all currently loaded maps.", usage = "[page]")
public static void maps(final CommandContext cmd, CommandSender sender) throws CommandException {
int index;
try {
index = cmd.getInteger(0);
} catch (IndexOutOfBoundsException ex) {
index = 1;
}
List<LoadedMap> loadedList = GameHandler.getGameHandler().getRotation().getLoaded();
List<String> mapNames = new ArrayList<>();
for (LoadedMap map : loadedList) {
mapNames.add(map.getName());
}
Collections.sort(mapNames);
List<LoadedMap> ordered = new ArrayList<>();
for (String map : mapNames) {
for (LoadedMap loadedMap : loadedList) {
if (loadedMap.getName().equals(map)) {
ordered.add(loadedMap);
break;
}
}
}
int pages = (int) Math.ceil((loadedList.size() + 7) / 8);
if (index > pages)
throw new CommandException("Invalid page number specified! Maximum page number is " + pages + ".");
sender.sendMessage(ChatColor.RED + "--------------- " + ChatColor.WHITE + new LocalizedChatMessage(ChatConstant.UI_MAPLOADED).getMessage(ChatUtils.getLocale(sender)) + ChatColor.DARK_AQUA + " (" + ChatColor.AQUA + index + ChatColor.DARK_AQUA + " of " + ChatColor.AQUA + pages + ChatColor.DARK_AQUA + ") " + ChatColor.RED + "---------------");
String[] maps = {"", "", "", "", "", "", "", ""};
for (int i = 0; i <= maps.length - 1; i++) {
int position = 8 * (index - 1) + i;
if (position < ordered.size()) {
LoadedMap mapInfo = ordered.get(position);
if (mapInfo.getAuthors().size() == 1) {
maps[i] = maps[i] + ChatColor.GOLD + mapInfo.getName() + ChatColor.DARK_PURPLE + " " + new LocalizedChatMessage(ChatConstant.MISC_BY).getMessage(ChatUtils.getLocale(sender)) + " " + ChatColor.RED + mapInfo.getAuthors().get(0).getName();
} else if (mapInfo.getAuthors().size() > 1) {
maps[i] = maps[i] + ChatColor.GOLD + mapInfo.getName() + ChatColor.DARK_PURPLE + " " + new LocalizedChatMessage(ChatConstant.MISC_BY).getMessage(ChatUtils.getLocale(sender)) + " ";
for (Contributor author : mapInfo.getAuthors()) {
if (mapInfo.getAuthors().indexOf(author) < mapInfo.getAuthors().size() - 2) {
maps[i] = maps[i] + ChatColor.RED + author.getName() + ChatColor.DARK_PURPLE + ", ";
} else if (mapInfo.getAuthors().indexOf(author) == mapInfo.getAuthors().size() - 2) {
maps[i] = maps[i] + ChatColor.RED + author.getName() + ChatColor.DARK_PURPLE + " " + new LocalizedChatMessage(ChatConstant.MISC_AND).getMessage(ChatUtils.getLocale(sender)) + " ";
} else if (mapInfo.getAuthors().indexOf(author) == mapInfo.getAuthors().size() - 1) {
maps[i] = maps[i] + ChatColor.RED + author.getName();
}
}
}
maps[i] = ChatColor.WHITE + "" + (position + 1) + ". " + maps[i];
}
}
for (String map : maps) {
if (!map.equalsIgnoreCase("")) {
sender.sendMessage(map);
}
}
}
}