2012-01-09 20:00:13 +01:00
package com.gmail.nossr50.commands.mc ;
import java.util.ArrayList ;
import java.util.HashMap ;
import org.bukkit.ChatColor ;
import org.bukkit.command.Command ;
import org.bukkit.command.CommandExecutor ;
import org.bukkit.command.CommandSender ;
2012-06-05 16:13:10 +02:00
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.mcMMO ;
2012-04-26 16:27:57 +02:00
import com.gmail.nossr50.config.Config ;
2012-04-27 11:47:11 +02:00
import com.gmail.nossr50.locale.LocaleLoader ;
import com.gmail.nossr50.util.Leaderboard ;
import com.gmail.nossr50.util.Misc ;
2012-05-01 19:58:47 +02:00
import com.gmail.nossr50.util.Skills ;
2012-01-09 20:00:13 +01:00
public class MctopCommand implements CommandExecutor {
2012-04-20 20:01:21 +02:00
@Override
public boolean onCommand ( CommandSender sender , Command command , String label , String [ ] args ) {
2012-04-23 01:34:34 +02:00
String usage = ChatColor . RED + " Proper usage is /mctop [skill] [page] " ; //TODO: Needs more locale.
2012-06-05 15:57:10 +02:00
2012-04-27 05:58:21 +02:00
if ( ! Config . getInstance ( ) . getUseMySQL ( ) ) {
2012-04-20 20:01:21 +02:00
switch ( args . length ) {
case 0 :
flatfileDisplay ( 1 , " ALL " , sender ) ;
return true ;
case 1 :
2012-04-27 11:47:11 +02:00
if ( Misc . isInt ( args [ 0 ] ) ) {
2012-04-20 20:01:21 +02:00
flatfileDisplay ( Integer . valueOf ( args [ 0 ] ) , " ALL " , sender ) ;
}
else if ( Skills . isSkill ( args [ 0 ] ) ) {
flatfileDisplay ( 1 , args [ 0 ] . toUpperCase ( ) , sender ) ;
}
else {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.Skill.Invalid " ) ) ;
2012-04-20 20:01:21 +02:00
}
return true ;
case 2 :
2012-04-23 01:34:34 +02:00
if ( ! Skills . isSkill ( args [ 0 ] ) ) {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.Skill.Invalid " ) ) ;
2012-04-23 01:34:34 +02:00
return true ;
}
2012-04-27 11:47:11 +02:00
if ( Misc . isInt ( args [ 1 ] ) ) {
2012-04-20 20:01:21 +02:00
flatfileDisplay ( Integer . valueOf ( args [ 1 ] ) , args [ 0 ] . toUpperCase ( ) , sender ) ;
}
else {
sender . sendMessage ( usage ) ;
}
return true ;
default :
sender . sendMessage ( usage ) ;
return true ;
}
}
else {
String powerlevel = " taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " ;
switch ( args . length ) {
case 0 :
sqlDisplay ( 1 , powerlevel , sender ) ;
return true ;
case 1 :
2012-04-27 11:47:11 +02:00
if ( Misc . isInt ( args [ 0 ] ) ) {
2012-04-20 20:01:21 +02:00
sqlDisplay ( Integer . valueOf ( args [ 0 ] ) , powerlevel , sender ) ;
}
else if ( Skills . isSkill ( args [ 0 ] ) ) {
sqlDisplay ( 1 , args [ 0 ] . toLowerCase ( ) , sender ) ;
}
else {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.Skill.Invalid " ) ) ;
2012-04-20 20:01:21 +02:00
}
return true ;
case 2 :
2012-04-23 01:34:34 +02:00
if ( ! Skills . isSkill ( args [ 0 ] ) ) {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.Skill.Invalid " ) ) ;
2012-04-23 01:34:34 +02:00
return true ;
}
2012-04-27 11:47:11 +02:00
if ( Misc . isInt ( args [ 1 ] ) ) {
2012-04-20 20:01:21 +02:00
sqlDisplay ( Integer . valueOf ( args [ 1 ] ) , args [ 0 ] . toLowerCase ( ) , sender ) ;
}
else {
sender . sendMessage ( usage ) ;
}
2012-04-23 01:34:34 +02:00
return true ;
2012-04-20 20:01:21 +02:00
default :
sender . sendMessage ( usage ) ;
return true ;
}
}
}
private void flatfileDisplay ( int page , String skill , CommandSender sender ) {
String [ ] info = Leaderboard . retrieveInfo ( skill , page ) ;
if ( skill = = " ALL " ) {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.PowerLevel.Leaderboard " ) ) ;
2012-04-20 20:01:21 +02:00
}
else {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.Skill.Leaderboard " , new Object [ ] { Misc . getCapitalized ( skill ) } ) ) ;
2012-04-20 20:01:21 +02:00
}
int n = ( page * 10 ) - 9 ; // Position
for ( String x : info ) {
if ( x ! = null ) {
String digit = String . valueOf ( n ) ;
if ( n < 10 ) {
digit = " 0 " + digit ;
}
String [ ] splitx = x . split ( " : " ) ;
// Format: 1. Playername - skill value
sender . sendMessage ( digit + " . " + ChatColor . GREEN + splitx [ 1 ] + " - " + ChatColor . WHITE + splitx [ 0 ] ) ;
n + + ;
}
}
}
private void sqlDisplay ( int page , String query , CommandSender sender ) {
2012-04-27 05:58:21 +02:00
String tablePrefix = Config . getInstance ( ) . getMySQLTablePrefix ( ) ;
2012-04-26 16:27:57 +02:00
HashMap < Integer , ArrayList < String > > userslist = mcMMO . database . read ( " SELECT " + query + " , user_id FROM " + tablePrefix + " skills WHERE " + query + " > 0 ORDER BY " + query + " DESC " ) ;
2012-04-20 20:01:21 +02:00
if ( query = = " taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing " ) {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.PowerLevel.Leaderboard " ) ) ;
2012-04-20 20:01:21 +02:00
}
else {
2012-04-27 11:47:11 +02:00
sender . sendMessage ( LocaleLoader . getString ( " Commands.Skill.Leaderboard " , new Object [ ] { Misc . getCapitalized ( query ) } ) ) ;
2012-04-20 20:01:21 +02:00
}
for ( int i = ( page * 10 ) - 9 ; i < = ( page * 10 ) ; i + + ) {
2012-04-26 16:27:57 +02:00
if ( i > userslist . size ( ) | | mcMMO . database . read ( " SELECT user FROM " + tablePrefix + " users WHERE id = ' " + Integer . valueOf ( userslist . get ( i ) . get ( 1 ) ) + " ' " ) = = null ) {
2012-04-20 20:01:21 +02:00
break ;
}
2012-04-26 16:27:57 +02:00
HashMap < Integer , ArrayList < String > > username = mcMMO . database . read ( " SELECT user FROM " + tablePrefix + " users WHERE id = ' " + Integer . valueOf ( userslist . get ( i ) . get ( 1 ) ) + " ' " ) ;
2012-04-20 20:01:21 +02:00
sender . sendMessage ( String . valueOf ( i ) + " . " + ChatColor . GREEN + userslist . get ( i ) . get ( 0 ) + " - " + ChatColor . WHITE + username . get ( 1 ) . get ( 0 ) ) ;
}
}
2012-01-09 20:00:13 +01:00
}