MctopCommand.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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.Leaderboard;
  12. import com.gmail.nossr50.util.Misc;
  13. import com.gmail.nossr50.util.Skills;
  14. public class MctopCommand implements CommandExecutor {
  15. @Override
  16. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  17. String usage = ChatColor.RED + "Proper usage is /mctop [skill] [page]"; //TODO: Needs more locale.
  18. if (!Config.getInstance().getUseMySQL()) {
  19. switch (args.length) {
  20. case 0:
  21. flatfileDisplay(1, "ALL", sender);
  22. return true;
  23. case 1:
  24. if (Misc.isInt(args[0])) {
  25. flatfileDisplay(Integer.valueOf(args[0]), "ALL", sender);
  26. }
  27. else if (Skills.isSkill(args[0])) {
  28. flatfileDisplay(1, args[0].toUpperCase(), sender);
  29. }
  30. else {
  31. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  32. }
  33. return true;
  34. case 2:
  35. if (!Skills.isSkill(args[0])) {
  36. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  37. return true;
  38. }
  39. if (Misc.isInt(args[1])) {
  40. flatfileDisplay(Integer.valueOf(args[1]), args[0].toUpperCase(), sender);
  41. }
  42. else {
  43. sender.sendMessage(usage);
  44. }
  45. return true;
  46. default:
  47. sender.sendMessage(usage);
  48. return true;
  49. }
  50. }
  51. else {
  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. }
  86. private void flatfileDisplay(int page, String skill, CommandSender sender) {
  87. String[] info = Leaderboard.retrieveInfo(skill, page);
  88. if (skill == "ALL") {
  89. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  90. }
  91. else {
  92. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", new Object[] { Misc.getCapitalized(skill) }));
  93. }
  94. int n = (page * 10) - 9; // Position
  95. for (String x : info) {
  96. if (x != null) {
  97. String digit = String.valueOf(n);
  98. if (n < 10) {
  99. digit = "0" + digit;
  100. }
  101. String[] splitx = x.split(":");
  102. // Format: 1. Playername - skill value
  103. sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
  104. n++;
  105. }
  106. }
  107. }
  108. private void sqlDisplay(int page, String query, CommandSender sender) {
  109. String tablePrefix = Config.getInstance().getMySQLTablePrefix();
  110. HashMap<Integer, ArrayList<String>> userslist = McMMO.database.read("SELECT " + query + ", user_id FROM " + tablePrefix + "skills WHERE " + query + " > 0 ORDER BY " + query + " DESC ");
  111. if (query == "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() || McMMO.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 = McMMO.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. }