MctopCommand.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package com.gmail.nossr50.commands.player;
  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.config.Config;
  9. import com.gmail.nossr50.database.Database;
  10. import com.gmail.nossr50.database.Leaderboard;
  11. import com.gmail.nossr50.locale.LocaleLoader;
  12. import com.gmail.nossr50.skills.utilities.SkillTools;
  13. import com.gmail.nossr50.util.StringUtils;
  14. public class MctopCommand implements CommandExecutor {
  15. @Override
  16. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  17. boolean useMySQL = Config.getInstance().getUseMySQL();
  18. switch (args.length) {
  19. case 0:
  20. display(1, "ALL", sender, useMySQL, command);
  21. return true;
  22. case 1:
  23. if (StringUtils.isInt(args[0])) {
  24. display(Integer.parseInt(args[0]), "ALL", sender, useMySQL, command);
  25. }
  26. else if (SkillTools.isSkill(args[0])) {
  27. display(1, args[0], sender, useMySQL, command);
  28. }
  29. else if (SkillTools.isLocalizedSkill(args[0])) {
  30. display(1, SkillTools.translateLocalizedSkill(args[0]), sender, useMySQL, command);
  31. }
  32. else {
  33. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  34. }
  35. return true;
  36. case 2:
  37. if (!StringUtils.isInt(args[1])) {
  38. return false;
  39. }
  40. if (SkillTools.isSkill(args[0])) {
  41. display(Integer.parseInt(args[1]), args[0], sender, useMySQL, command);
  42. }
  43. else if (SkillTools.isLocalizedSkill(args[0])) {
  44. display(Integer.parseInt(args[1]), SkillTools.translateLocalizedSkill(args[0]), sender, useMySQL, command);
  45. }
  46. else {
  47. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  48. }
  49. return true;
  50. default:
  51. return false;
  52. }
  53. }
  54. private void display(int page, String skill, CommandSender sender, boolean sql, Command command) {
  55. if (sql) {
  56. if (skill.equalsIgnoreCase("all")) {
  57. sqlDisplay(page, "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing", sender, command);
  58. }
  59. else {
  60. sqlDisplay(page, skill, sender, command);
  61. }
  62. }
  63. else {
  64. flatfileDisplay(page, skill, sender, command);
  65. }
  66. }
  67. private void flatfileDisplay(int page, String skill, CommandSender sender, Command command) {
  68. if (!skill.equalsIgnoreCase("all") && !sender.hasPermission("mcmmo.commands.mctop." + skill.toLowerCase())) {
  69. sender.sendMessage(command.getPermissionMessage());
  70. return;
  71. }
  72. Leaderboard.updateLeaderboards(); //Make sure we have the latest information
  73. String[] info = Leaderboard.retrieveInfo(skill, page);
  74. if (skill.equalsIgnoreCase("all")) {
  75. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  76. }
  77. else {
  78. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", StringUtils.getCapitalized(skill)));
  79. }
  80. int n = (page * 10) - 9; // Position
  81. for (String x : info) {
  82. if (x != null) {
  83. String digit = String.valueOf(n);
  84. if (n < 10) {
  85. digit = "0" + digit;
  86. }
  87. String[] splitx = x.split(":");
  88. // Format: 1. Playername - skill value
  89. sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
  90. n++;
  91. }
  92. }
  93. sender.sendMessage(LocaleLoader.getString("Commands.mctop.Tip"));
  94. }
  95. private void sqlDisplay(int page, String query, CommandSender sender, Command command) {
  96. if (!query.equalsIgnoreCase("taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing")) {
  97. if (!sender.hasPermission("mcmmo.commands.mctop." + query.toLowerCase())) {
  98. sender.sendMessage(command.getPermissionMessage());
  99. return;
  100. }
  101. }
  102. String tablePrefix = Config.getInstance().getMySQLTablePrefix();
  103. HashMap<Integer, ArrayList<String>> userslist = Database.read("SELECT " + query + ", user, NOW() FROM " + tablePrefix + "users JOIN " + tablePrefix + "skills ON (user_id = id) WHERE " + query + " > 0 ORDER BY " + query + " DESC, user LIMIT "+((page * 10) - 10)+",10");
  104. if (query.equals("taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing")) {
  105. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  106. }
  107. else {
  108. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", StringUtils.getCapitalized(query)));
  109. }
  110. int place = (page * 10) - 9;
  111. for (int i = 1; i <= 10; i++) {
  112. if (userslist.get(i) == null) {
  113. break;
  114. }
  115. // Format: 1. Playername - skill value
  116. sender.sendMessage(String.valueOf(place) + ". " + ChatColor.GREEN + userslist.get(i).get(1) + " - " + ChatColor.WHITE + userslist.get(i).get(0));
  117. place++;
  118. }
  119. sender.sendMessage(LocaleLoader.getString("Commands.mctop.Tip"));
  120. }
  121. }