ToggleCommand.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.gmail.nossr50.commands;
  2. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  3. import com.gmail.nossr50.util.commands.CommandUtils;
  4. import com.gmail.nossr50.util.player.UserManager;
  5. import com.google.common.collect.ImmutableList;
  6. import org.bukkit.command.Command;
  7. import org.bukkit.command.CommandSender;
  8. import org.bukkit.command.TabExecutor;
  9. import org.bukkit.util.StringUtil;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. public abstract class ToggleCommand implements TabExecutor {
  13. @Override
  14. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  15. switch (args.length) {
  16. case 0:
  17. if (CommandUtils.noConsoleUsage(sender)) {
  18. return true;
  19. }
  20. if (!hasSelfPermission(sender)) {
  21. sender.sendMessage(command.getPermissionMessage());
  22. return true;
  23. }
  24. if (!CommandUtils.hasPlayerDataKey(sender)) {
  25. return true;
  26. }
  27. applyCommandAction(UserManager.getPlayer(sender.getName()));
  28. return true;
  29. case 1:
  30. if (!hasOtherPermission(sender)) {
  31. sender.sendMessage(command.getPermissionMessage());
  32. return true;
  33. }
  34. String playerName = CommandUtils.getMatchedPlayerName(args[0]);
  35. McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName);
  36. if (!CommandUtils.checkPlayerExistence(sender, playerName, mcMMOPlayer)) {
  37. return true;
  38. }
  39. if (CommandUtils.isOffline(sender, mcMMOPlayer.getPlayer())) {
  40. return true;
  41. }
  42. applyCommandAction(mcMMOPlayer);
  43. sendSuccessMessage(sender, playerName);
  44. return true;
  45. default:
  46. return false;
  47. }
  48. }
  49. @Override
  50. public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
  51. switch (args.length) {
  52. case 1:
  53. List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
  54. return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
  55. default:
  56. return ImmutableList.of();
  57. }
  58. }
  59. protected abstract boolean hasOtherPermission(CommandSender sender);
  60. protected abstract boolean hasSelfPermission(CommandSender sender);
  61. protected abstract void applyCommandAction(McMMOPlayer mcMMOPlayer);
  62. protected abstract void sendSuccessMessage(CommandSender sender, String playerName);
  63. }