MctopCommand.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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.config.Config;
  9. import com.gmail.nossr50.database.Database;
  10. import com.gmail.nossr50.locale.LocaleLoader;
  11. import com.gmail.nossr50.skills.utilities.SkillTools;
  12. import com.gmail.nossr50.skills.utilities.SkillType;
  13. import com.gmail.nossr50.util.Leaderboard;
  14. import com.gmail.nossr50.util.Misc;
  15. public class MctopCommand implements CommandExecutor {
  16. @Override
  17. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  18. String usage = LocaleLoader.getString("Commands.Usage.2", new Object[] {"mctop", "[" + LocaleLoader.getString("Commands.Usage.Skill") + "]", "[" + LocaleLoader.getString("Commands.Usage.Page") + "]"});
  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 (SkillTools.isSkill(args[0])) {
  29. flatfileDisplay(1, args[0].toUpperCase(), sender);
  30. }
  31. else if (SkillTools.isLocalizedSkill(args[0])) {
  32. flatfileDisplay(1, SkillTools.translateLocalizedSkill(args[0]).toUpperCase(), sender);
  33. }
  34. else {
  35. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  36. }
  37. return true;
  38. case 2:
  39. if (Misc.isInt(args[1])) {
  40. if (SkillTools.isSkill(args[0])) {
  41. flatfileDisplay(Integer.valueOf(args[1]), args[0].toUpperCase(), sender);
  42. }
  43. else if (SkillTools.isLocalizedSkill(args[0])) {
  44. flatfileDisplay(Integer.valueOf(args[1]), SkillTools.translateLocalizedSkill(args[0]).toUpperCase(), sender);
  45. }
  46. else {
  47. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  48. }
  49. }
  50. else {
  51. sender.sendMessage(usage);
  52. }
  53. return true;
  54. default:
  55. sender.sendMessage(usage);
  56. return true;
  57. }
  58. }
  59. String powerlevel = "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing";
  60. switch (args.length) {
  61. case 0:
  62. sqlDisplay(1, powerlevel, sender);
  63. return true;
  64. case 1:
  65. if (Misc.isInt(args[0])) {
  66. sqlDisplay(Integer.valueOf(args[0]), powerlevel, sender);
  67. }
  68. else if (SkillTools.isSkill(args[0])) {
  69. sqlDisplay(1, args[0].toLowerCase(), sender);
  70. }
  71. else if (SkillTools.isLocalizedSkill(args[0])) {
  72. sqlDisplay(1, SkillTools.translateLocalizedSkill(args[0]).toLowerCase(), sender);
  73. }
  74. else {
  75. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  76. }
  77. return true;
  78. case 2:
  79. if (Misc.isInt(args[1])) {
  80. if (SkillTools.isSkill(args[0])) {
  81. sqlDisplay(Integer.valueOf(args[1]), args[0].toLowerCase(), sender);
  82. }
  83. else if (SkillTools.isLocalizedSkill(args[0])) {
  84. sqlDisplay(Integer.valueOf(args[1]), SkillTools.translateLocalizedSkill(args[0]).toLowerCase(), sender);
  85. }
  86. else {
  87. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
  88. }
  89. }
  90. else {
  91. sender.sendMessage(usage);
  92. }
  93. return true;
  94. default:
  95. sender.sendMessage(usage);
  96. return true;
  97. }
  98. }
  99. private void flatfileDisplay(int page, String skill, CommandSender sender) {
  100. Leaderboard.updateLeaderboards(); //Make sure we have the latest information
  101. SkillType skillType = SkillType.getSkill(skill);
  102. String[] info = Leaderboard.retrieveInfo(skillType, page);
  103. if (skill.equalsIgnoreCase("ALL")) {
  104. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  105. }
  106. else {
  107. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", new Object[] { Misc.getCapitalized(skill) }));
  108. }
  109. int n = (page * 10) - 9; // Position
  110. for (String x : info) {
  111. if (x != null) {
  112. String digit = String.valueOf(n);
  113. if (n < 10) {
  114. digit = "0" + digit;
  115. }
  116. String[] splitx = x.split(":");
  117. // Format: 1. Playername - skill value
  118. sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
  119. n++;
  120. }
  121. }
  122. sender.sendMessage(LocaleLoader.getString("Commands.mctop.Tip"));
  123. }
  124. private void sqlDisplay(int page, String query, CommandSender sender) {
  125. String tablePrefix = Config.getInstance().getMySQLTablePrefix();
  126. 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");
  127. if (query.equals("taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing")) {
  128. sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
  129. }
  130. else {
  131. sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", new Object[] { Misc.getCapitalized(query) }));
  132. }
  133. int place = (page * 10) - 9;
  134. for (int i = 1; i <= 10; i++) {
  135. if(userslist.get(i) == null) {
  136. break;
  137. }
  138. sender.sendMessage(String.valueOf(place) + ". " + ChatColor.GREEN + userslist.get(i).get(1) + " - " + ChatColor.WHITE + userslist.get(i).get(0));
  139. place++;
  140. }
  141. sender.sendMessage(LocaleLoader.getString("Commands.mctop.Tip"));
  142. }
  143. }