PartyInfoCommand.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.gmail.nossr50.commands.party;
  2. import com.gmail.nossr50.datatypes.party.Party;
  3. import com.gmail.nossr50.datatypes.party.PartyFeature;
  4. import com.gmail.nossr50.datatypes.party.ShareMode;
  5. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  6. import com.gmail.nossr50.mcMMO;
  7. import com.gmail.nossr50.util.StringUtils;
  8. import org.bukkit.ChatColor;
  9. import org.bukkit.command.Command;
  10. import org.bukkit.command.CommandExecutor;
  11. import org.bukkit.command.CommandSender;
  12. import org.bukkit.entity.Player;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. public class PartyInfoCommand implements CommandExecutor {
  16. private final mcMMO pluginRef;
  17. public PartyInfoCommand(mcMMO pluginRef) {
  18. this.pluginRef = pluginRef;
  19. }
  20. @Override
  21. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  22. switch (args.length) {
  23. case 0:
  24. case 1:
  25. if (pluginRef.getUserManager().getPlayer((Player) sender) == null) {
  26. sender.sendMessage(pluginRef.getLocaleManager().getString("Profile.PendingLoad"));
  27. return true;
  28. }
  29. Player player = (Player) sender;
  30. McMMOPlayer mcMMOPlayer = pluginRef.getUserManager().getPlayer(player);
  31. Party party = mcMMOPlayer.getParty();
  32. displayPartyHeader(player, party);
  33. displayShareModeInfo(player, party);
  34. displayPartyFeatures(player, party);
  35. displayMemberInfo(player, mcMMOPlayer, party);
  36. return true;
  37. default:
  38. sender.sendMessage(pluginRef.getLocaleManager().getString("Commands.Usage.1", "party", "info"));
  39. return true;
  40. }
  41. }
  42. private void displayPartyHeader(Player player, Party party) {
  43. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.Header"));
  44. /*if (!party.hasReachedLevelCap()) {
  45. status.append(" (").append(party.getXpToLevelPercentage()).append(")");
  46. }*/
  47. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.Status", party.getName(), pluginRef.getLocaleManager().getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked")), party.getLevel())
  48. /*if (!party.hasReachedLevelCap()) {
  49. status.append(" (").append(party.getXpToLevelPercentage()).append(")");
  50. }*/);
  51. }
  52. private void displayPartyFeatures(Player player, Party party) {
  53. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.Features.Header"));
  54. List<String> unlockedPartyFeatures = new ArrayList<>();
  55. List<String> lockedPartyFeatures = new ArrayList<>();
  56. for (PartyFeature partyFeature : PartyFeature.values()) {
  57. if (!partyFeature.hasPermission(player)) {
  58. continue;
  59. }
  60. if (isUnlockedFeature(party, partyFeature)) {
  61. unlockedPartyFeatures.add(getPartyFeatureLocaleString(partyFeature));
  62. } else {
  63. lockedPartyFeatures.add(getFeatureLockedLocaleString(partyFeature));
  64. }
  65. }
  66. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.UnlockedFeatures", unlockedPartyFeatures.isEmpty() ? "None" : unlockedPartyFeatures));
  67. for (String message : lockedPartyFeatures) {
  68. player.sendMessage(message);
  69. }
  70. }
  71. public String getPartyFeatureLocaleString(PartyFeature partyFeature) {
  72. return pluginRef.getLocaleManager().getString("Party.Feature." + StringUtils.getPrettyPartyFeatureString(partyFeature).replace(" ", ""));
  73. }
  74. public String getFeatureLockedLocaleString(PartyFeature partyFeature) {
  75. return pluginRef.getLocaleManager().getString("Ability.Generic.Template.Lock",
  76. pluginRef.getLocaleManager().getString("Party.Feature.Locked."
  77. + StringUtils.getPrettyPartyFeatureString(partyFeature).replace(" ", ""),
  78. pluginRef.getPartyManager().getPartyFeatureUnlockLevel(partyFeature)));
  79. }
  80. private boolean isUnlockedFeature(Party party, PartyFeature partyFeature) {
  81. return party.getLevel() >= pluginRef.getPartyManager().getPartyFeatureUnlockLevel(partyFeature);
  82. }
  83. private void displayShareModeInfo(Player player, Party party) {
  84. boolean xpShareEnabled = isUnlockedFeature(party, PartyFeature.XP_SHARE);
  85. boolean itemShareEnabled = isUnlockedFeature(party, PartyFeature.ITEM_SHARE);
  86. boolean itemSharingActive = (party.getItemShareMode() != ShareMode.NONE);
  87. if (!xpShareEnabled && !itemShareEnabled) {
  88. return;
  89. }
  90. String expShareInfo = "";
  91. String itemShareInfo = "";
  92. String separator = "";
  93. if (xpShareEnabled) {
  94. expShareInfo = pluginRef.getLocaleManager().getString("Commands.Party.ExpShare", party.getXpShareMode().toString());
  95. }
  96. if (itemShareEnabled) {
  97. itemShareInfo = pluginRef.getLocaleManager().getString("Commands.Party.ItemShare", party.getItemShareMode().toString());
  98. }
  99. if (xpShareEnabled && itemShareEnabled) {
  100. separator = ChatColor.DARK_GRAY + " || ";
  101. }
  102. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.ShareMode") + expShareInfo + separator + itemShareInfo);
  103. if (itemSharingActive) {
  104. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.ItemShareCategories", party.getItemShareCategories()));
  105. }
  106. }
  107. private void displayMemberInfo(Player player, McMMOPlayer mcMMOPlayer, Party party) {
  108. /*
  109. * Only show members of the party that this member can see
  110. */
  111. List<Player> nearMembers = pluginRef.getPartyManager().getNearVisibleMembers(mcMMOPlayer);
  112. int membersOnline = party.getVisibleMembers(player).size();
  113. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.Members.Header"));
  114. player.sendMessage(pluginRef.getLocaleManager().getString("Commands.Party.MembersNear", nearMembers.size() + 1, membersOnline));
  115. player.sendMessage(party.createMembersList(player));
  116. }
  117. }