package com.crossge.hungergames.Commands;
import java.util.ArrayList;
import java.util.Collections;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class CmdLeaderboards extends Cmd
{
public boolean commandUse(CommandSender sender, String[] args)
{
if(args.length == 0 || args.length > 2)
return false;
if (sender instanceof Player)
{
Player p = (Player) sender;
if(p.hasPermission("HungerGames.leaderboards"))
{
String type = "";
if(args[0].equalsIgnoreCase("points"))
type = "points";
else if(args[0].equalsIgnoreCase("wins"))
type = "wins";
else if(args[0].equalsIgnoreCase("kills"))
type = "kills";
else if(args[0].equalsIgnoreCase("deaths"))
type = "deaths";
else if(args[0].equalsIgnoreCase("games"))
type = "games";
else
{
p.sendMessage(var.errorCol() + lang.translate("Error: Unknown stat type."));
return false;
}
int page = 1;
if(args.length == 2)
{
try
{
page = Integer.parseInt(args[1]);
}
catch(Exception e)
{
p.sendMessage(var.errorCol() + lang.translate("Error: Page entered not an integer."));
return false;
}
}
if(page == 0)
page = 1;
ArrayList<String> leader = s.leaderboards();
ArrayList<String> t = getType(leader, type);
int size = pages(t.size());
if(page > size)
{
p.sendMessage(var.errorCol() + lang.translate("Error: Max pages are") + " " + Integer.toString(size) + ".");
return true;
}
p.sendMessage(var.defaultCol() + ChatColor.WHITE + lang.translate("Page") + " " + Integer.toString(page) +
" " + lang.translate("of") + " " + Integer.toString(size) + " " + lang.translate("for stat") + " " + type + ".");
page = page - 1;
for(int i = 0; i < 8; i++)
{
if(t.size() == i + 8 * page)
break;
p.sendMessage(var.defaultCol() + Integer.toString(i + 1 + 8 * page) + " " + t.get(i + 8 * page));
}
}
else
p.sendMessage(var.errorCol() + lang.translate("Error: You may not view the leaderboards for the Hunger Games."));
}
else
{
String type = "";
if(args[0].equalsIgnoreCase("points"))
type = "points";
else if(args[0].equalsIgnoreCase("wins"))
type = "wins";
else if(args[0].equalsIgnoreCase("kills"))
type = "kills";
else if(args[0].equalsIgnoreCase("deaths"))
type = "deaths";
else if(args[0].equalsIgnoreCase("games"))
type = "games";
else
{
sender.sendMessage(var.errorCol() + lang.translate("Error: Unknown stat type."));
return false;
}
int page = 1;
if(args.length == 2)
{
try
{
page = Integer.parseInt(args[1]);
}
catch(Exception e)
{
sender.sendMessage(var.errorCol() + lang.translate("Error: Page entered not an integer."));
return false;
}
}
if(page == 0)
page = 1;
ArrayList<String> leader = s.leaderboards();
ArrayList<String> t = getType(leader, type);
int size = pages(t.size());
if(page > size)
{
sender.sendMessage(var.errorCol() + lang.translate("Error: Max pages are") + " " + Integer.toString(size) + ".");
return true;
}
sender.sendMessage(var.defaultCol() + ChatColor.WHITE + lang.translate("Page") + " " + Integer.toString(page) +
" " + lang.translate("of") + " " + Integer.toString(size) + " " + lang.translate("for stat") + " " + type + ".");
page = page - 1;
for(int i = 0; i < 8; i++)
{
if(t.size() == i + 8 * page)
break;
sender.sendMessage(var.defaultCol() + Integer.toString(i + 1 + 8 * page) + " " + t.get(i + 8 * page));
}
}
return true;
}
private ArrayList<String> getType(ArrayList<String> leaders, String type)
{
ArrayList<String> temp = new ArrayList<String>();
ArrayList<String> unSorted = new ArrayList<String>();
String name = "";
for(int i = 0; i < leaders.size(); i++)
{
name = leaders.get(i).split(" ")[0];
if(type.equalsIgnoreCase("points"))
unSorted.add(name + " " + leaders.get(i).split(" ")[1]);
else if(type.equalsIgnoreCase("wins"))
unSorted.add(name + " " + leaders.get(i).split(" ")[2]);
else if(type.equalsIgnoreCase("kills"))
unSorted.add(name + " " + leaders.get(i).split(" ")[3]);
else if(type.equalsIgnoreCase("deaths"))
unSorted.add(name + " " + leaders.get(i).split(" ")[4]);
else if(type.equalsIgnoreCase("games"))
unSorted.add(name + " " + leaders.get(i).split(" ")[5]);
}
Collections.sort(unSorted);
String obj = "";
for(int i = 0; i < unSorted.size(); i++)
{
obj = getObj(unSorted, i);
if(obj != null)
temp.add(obj);
}
return temp;
}
public String getObj(ArrayList<String> unSorted, int time)
{
ArrayList<Integer> leadsort = new ArrayList<Integer>();
for(int i = 0; i < unSorted.size(); i++)
leadsort.add(Integer.parseInt(unSorted.get(i).split(" ")[1]));
Collections.sort(leadsort);
Collections.reverse(leadsort);
if (unSorted.size() < time + 1)
return null;
int occurrence = 1;
for (int i = 0; i < time; i++)
if(leadsort.get(i).equals(leadsort.get(time)))
occurrence++;
int leadSpot = leadCords(Integer.toString(leadsort.get(time)), occurrence, unSorted);
if (leadSpot == -1)
return null;
return unSorted.get(leadSpot);
}
private int leadCords(String amount, int occurrence, ArrayList<String> sorting)
{
int counter = 1;
for(int i = 0; i < sorting.size(); i++)
{
if(sorting.get(i).split(" ")[1].equalsIgnoreCase(amount))
{
if(counter == occurrence)
return i;
counter++;
}
}
return -1;
}
private int pages(int size)
{
int rounder = 0;
if (size%8 != 0)
rounder = 1;
return (size/8) + rounder;
}
}