PartyInfoCommand.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.gmail.nossr50.commands.party;
  2. import com.gmail.nossr50.config.Config;
  3. import com.gmail.nossr50.datatypes.party.Party;
  4. import com.gmail.nossr50.datatypes.party.PartyFeature;
  5. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  6. import com.gmail.nossr50.locale.LocaleLoader;
  7. import com.gmail.nossr50.mcMMO;
  8. import org.bukkit.command.Command;
  9. import org.bukkit.command.CommandExecutor;
  10. import org.bukkit.command.CommandSender;
  11. import org.bukkit.entity.Player;
  12. import org.jetbrains.annotations.NotNull;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. public class PartyInfoCommand implements CommandExecutor {
  16. @Override
  17. public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
  18. switch (args.length) {
  19. case 0:
  20. case 1:
  21. if(mcMMO.getUserManager().queryPlayer((Player) sender) == null)
  22. {
  23. sender.sendMessage(LocaleLoader.getString("Profile.PendingLoad"));
  24. return true;
  25. }
  26. Player player = (Player) sender;
  27. McMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player);
  28. Party party = mmoPlayer.getParty();
  29. displayPartyHeader(player, party);
  30. displayShareModeInfo(player, party);
  31. displayPartyFeatures(player, party);
  32. displayMemberInfo(player, mmoPlayer, party);
  33. return true;
  34. default:
  35. sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "info"));
  36. return true;
  37. }
  38. }
  39. private void displayPartyHeader(Player player, Party party) {
  40. player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
  41. StringBuilder status = new StringBuilder();
  42. status.append(LocaleLoader.getString("Commands.Party.Status", party.getPartyName(), LocaleLoader.getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked")), party.getLevel()));
  43. if (!party.hasReachedLevelCap()) {
  44. status.append(" (").append(party.getXpToLevelPercentage()).append(")");
  45. }
  46. player.sendMessage(status.toString());
  47. }
  48. private void displayPartyFeatures(Player player, Party party) {
  49. player.sendMessage(LocaleLoader.getString("Commands.Party.Features.Header"));
  50. List<String> unlockedPartyFeatures = new ArrayList<>();
  51. List<String> lockedPartyFeatures = new ArrayList<>();
  52. for (PartyFeature partyFeature : PartyFeature.values()) {
  53. if (!partyFeature.hasPermission(player)) {
  54. continue;
  55. }
  56. if (isUnlockedFeature(party, partyFeature)) {
  57. unlockedPartyFeatures.add(partyFeature.getLocaleString());
  58. }
  59. else {
  60. lockedPartyFeatures.add(partyFeature.getFeatureLockedLocaleString());
  61. }
  62. }
  63. player.sendMessage(LocaleLoader.getString("Commands.Party.UnlockedFeatures", unlockedPartyFeatures.isEmpty() ? "None" : unlockedPartyFeatures));
  64. for (String message : lockedPartyFeatures) {
  65. player.sendMessage(message);
  66. }
  67. }
  68. private boolean isUnlockedFeature(Party party, PartyFeature partyFeature) {
  69. return party.getLevel() >= Config.getInstance().getPartyFeatureUnlockLevel(partyFeature);
  70. }
  71. private void displayShareModeInfo(Player player, Party party) {
  72. boolean xpShareEnabled = isUnlockedFeature(party, PartyFeature.XP_SHARE);
  73. if (!xpShareEnabled) {
  74. return;
  75. }
  76. String expShareInfo = "";
  77. if (xpShareEnabled) {
  78. expShareInfo = LocaleLoader.getString("Commands.Party.ExpShare", party.getXpShareMode().toString());
  79. }
  80. player.sendMessage(LocaleLoader.getString("Commands.Party.ShareMode") + expShareInfo);
  81. }
  82. private void displayMemberInfo(Player player, McMMOPlayer mmoPlayer, Party party) {
  83. /*
  84. * Only show members of the party that this member can see
  85. */
  86. List<Player> nearMembers = mcMMO.getPartyManager().getNearVisibleMembers(mmoPlayer);
  87. int membersOnline = party.getVisibleMembers(player).size();
  88. player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
  89. player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", nearMembers.size()+1, membersOnline));
  90. player.sendMessage(party.createMembersList(player));
  91. }
  92. }