ExperienceCommand.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.gmail.nossr50.commands.experience;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Set;
  5. import org.bukkit.command.Command;
  6. import org.bukkit.command.CommandSender;
  7. import org.bukkit.command.TabExecutor;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.util.StringUtil;
  10. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  11. import com.gmail.nossr50.datatypes.player.PlayerProfile;
  12. import com.gmail.nossr50.datatypes.skills.SkillType;
  13. import com.gmail.nossr50.locale.LocaleLoader;
  14. import com.gmail.nossr50.util.commands.CommandUtils;
  15. import com.gmail.nossr50.util.player.UserManager;
  16. import com.gmail.nossr50.util.skills.SkillUtils;
  17. import com.google.common.collect.ImmutableList;
  18. public abstract class ExperienceCommand implements TabExecutor {
  19. protected McMMOPlayer mcMMOPlayer;
  20. protected Player player;
  21. protected PlayerProfile profile;
  22. protected boolean allSkills;
  23. protected SkillType skill;
  24. protected int value;
  25. @Override
  26. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  27. switch (args.length) {
  28. case 2:
  29. if (CommandUtils.noConsoleUsage(sender)) {
  30. return true;
  31. }
  32. if (!permissionsCheckSelf(sender)) {
  33. sender.sendMessage(command.getPermissionMessage());
  34. return true;
  35. }
  36. if (!validateArguments(sender, args[0], args[1])) {
  37. return true;
  38. }
  39. mcMMOPlayer = UserManager.getPlayer(sender.getName());
  40. player = mcMMOPlayer.getPlayer();
  41. profile = mcMMOPlayer.getProfile();
  42. editValues();
  43. return true;
  44. case 3:
  45. if (!permissionsCheckOthers(sender)) {
  46. sender.sendMessage(command.getPermissionMessage());
  47. return true;
  48. }
  49. if (!validateArguments(sender, args[1], args[2])) {
  50. return true;
  51. }
  52. mcMMOPlayer = UserManager.getPlayer(args[0]);
  53. // If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
  54. if (mcMMOPlayer == null) {
  55. profile = new PlayerProfile(args[0], false);
  56. if (CommandUtils.unloadedProfile(sender, profile)) {
  57. return true;
  58. }
  59. editValues();
  60. profile.save(); // Since this is a temporary profile, we save it here.
  61. }
  62. else {
  63. profile = mcMMOPlayer.getProfile();
  64. player = mcMMOPlayer.getPlayer();
  65. editValues();
  66. }
  67. handleSenderMessage(sender, args[0]);
  68. return true;
  69. default:
  70. return false;
  71. }
  72. }
  73. @Override
  74. public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
  75. switch (args.length) {
  76. case 1:
  77. Set<String> playerNames = UserManager.getPlayers().keySet();
  78. return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
  79. case 2:
  80. return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
  81. default:
  82. return ImmutableList.of();
  83. }
  84. }
  85. protected abstract boolean permissionsCheckSelf(CommandSender sender);
  86. protected abstract boolean permissionsCheckOthers(CommandSender sender);
  87. protected abstract void handleCommand(SkillType skill);
  88. protected abstract void handlePlayerMessageAll();
  89. protected abstract void handlePlayerMessageSkill();
  90. private boolean validateArguments(CommandSender sender, String skillName, String value) {
  91. if (isInvalidInteger(sender, value) || isInvalidSkill(sender, skillName)) {
  92. return false;
  93. }
  94. return true;
  95. }
  96. private boolean isInvalidInteger(CommandSender sender, String value) {
  97. if (CommandUtils.isInvalidInteger(sender, value)) {
  98. return true;
  99. }
  100. this.value = Integer.parseInt(value);
  101. return false;
  102. }
  103. protected boolean isInvalidSkill(CommandSender sender, String skillName) {
  104. if (skillName.equalsIgnoreCase("all")) {
  105. allSkills = true;
  106. return false;
  107. }
  108. else if (CommandUtils.isInvalidSkill(sender, skillName)) {
  109. return true;
  110. }
  111. skill = SkillType.getSkill(skillName);
  112. return false;
  113. }
  114. protected void handleSenderMessage(CommandSender sender, String playerName) {
  115. if (allSkills) {
  116. sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", playerName));
  117. }
  118. else {
  119. sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", SkillUtils.getSkillName(skill), playerName));
  120. }
  121. }
  122. protected void editValues() {
  123. if (allSkills) {
  124. for (SkillType skillType : SkillType.values()) {
  125. handleCommand(skillType);
  126. }
  127. if (player != null) {
  128. handlePlayerMessageAll();
  129. }
  130. }
  131. else {
  132. handleCommand(skill);
  133. if (player != null) {
  134. handlePlayerMessageSkill();
  135. }
  136. }
  137. }
  138. }