MctopCommand.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package com.gmail.nossr50.commands.mc;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import org.bukkit.ChatColor;
  5. import org.bukkit.command.Command;
  6. import org.bukkit.command.CommandExecutor;
  7. import org.bukkit.command.CommandSender;
  8. import com.gmail.nossr50.mcMMO;
  9. import com.gmail.nossr50.config.Config;
  10. import com.gmail.nossr50.locale.LocaleLoader;
  11. import com.gmail.nossr50.util.Database;
  12. import com.gmail.nossr50.util.Leaderboard;
  13. import com.gmail.nossr50.util.Misc;
  14. import com.gmail.nossr50.util.Skills;
  15. public class MctopCommand implements CommandExecutor {
  16. @Override
  17. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  18. String usage = ChatColor.RED + "Proper usage is /mctop [skill] [page]"; //TODO: Needs more locale.
  19. if (!Config.getInstance().getUseMySQL()) {
  20. switch (args.length) {
  21. case 0:
  22. flatfileDisplay(1, "ALL", sender);
  23. return true;
  24. case 1:
  25. if (Misc.isInt(args[0])) {
  26. flatfileDisplay(Integer.valueOf(args[0]), "ALL", sender);
  27. }
  28. else if (Skills.isSkill(args[0])) {
  29. flatfileDisplay(1, args[0].toUpperCase(), sender);
  30. }
  31. else {
  32. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  33. }
  34. return true;
  35. case 2:
  36. if (!Skills.isSkill(args[0])) {
  37. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  38. return true;
  39. }
  40. if (Misc.isInt(args[1])) {
  41. flatfileDisplay(Integer.valueOf(args[1]), args[0].toUpperCase(), sender);
  42. }
  43. else {
  44. sender.sendMessage(usage);
  45. }
  46. return true;
  47. default:
  48. sender.sendMessage(usage);
  49. return true;
  50. }
  51. }
  52. String powerlevel = "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing";
  53. switch (args.length) {
  54. case 0:
  55. sqlDisplay(1, powerlevel, sender);
  56. return true;
  57. case 1:
  58. if (Misc.isInt(args[0])) {
  59. sqlDisplay(Integer.valueOf(args[0]), powerlevel, sender);
  60. }
  61. else if (Skills.isSkill(args[0])) {
  62. sqlDisplay(1, args[0].toLowerCase(), sender);
  63. }
  64. else {
  65. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  66. }
  67. return true;
  68. case 2:
  69. if (!Skills.isSkill(args[0])) {
  70. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  71. return true;
  72. }
  73. if (Misc.isInt(args[1])) {
  74. sqlDisplay(Integer.valueOf(args[1]), args[0].toLowerCase(), sender);
  75. }
  76. else {
  77. sender.sendMessage(usage);
  78. }
  79. return true;
  80. default:
  81. sender.sendMessage(usage);
  82. return true;
  83. }
  84. }
  85. private void flatfileDisplay(int page, String skill, CommandSender sender) {
  86. String[] info = Leaderboard.retrieveInfo(skill, page);
  87. if (skill.equals("ALL")) {
  88. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  89. }
  90. else {
  91. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", new Object[] { Misc.getCapitalized(skill) }));
  92. }
  93. int n = (page * 10) - 9; // Position
  94. for (String x : info) {
  95. if (x != null) {
  96. String digit = String.valueOf(n);
  97. if (n < 10) {
  98. digit = "0" + digit;
  99. }
  100. String[] splitx = x.split(":");
  101. // Format: 1. Playername - skill value
  102. sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
  103. n++;
  104. }
  105. }
  106. }
  107. private void sqlDisplay(int page, String query, CommandSender sender) {
  108. String tablePrefix = Config.getInstance().getMySQLTablePrefix();
  109. Database database = mcMMO.getPlayerDatabase();
  110. HashMap<Integer, ArrayList<String>> userslist = database.read("SELECT " + query + ", user_id FROM " + tablePrefix + "skills WHERE " + query + " > 0 ORDER BY " + query + " DESC ");
  111. if (query.equals("taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing")) {
  112. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  113. }
  114. else {
  115. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", new Object[] { Misc.getCapitalized(query) }));
  116. }
  117. for (int i = (page * 10) - 9; i <= (page * 10); i++) {
  118. if (i > userslist.size() || database.read("SELECT user FROM " + tablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null) {
  119. break;
  120. }
  121. HashMap<Integer, ArrayList<String>> username = database.read("SELECT user FROM " + tablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
  122. sender.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
  123. }
  124. }
  125. }