/src/main/java/com/gmail/nossr50/datatypes/party/Party.java

https://gitlab.com/Slind/mcMMO · Java · 343 lines · 260 code · 78 blank · 5 comment · 31 complexity · 8bdb53ea299f6be14cd461d2adf6be9e MD5 · raw file

  1. package com.gmail.nossr50.datatypes.party;
  2. import java.text.DecimalFormat;
  3. import java.util.ArrayList;
  4. import java.util.LinkedHashSet;
  5. import java.util.List;
  6. import org.bukkit.ChatColor;
  7. import org.bukkit.Sound;
  8. import org.bukkit.entity.Player;
  9. import com.gmail.nossr50.mcMMO;
  10. import com.gmail.nossr50.config.Config;
  11. import com.gmail.nossr50.config.experience.ExperienceConfig;
  12. import com.gmail.nossr50.datatypes.experience.FormulaType;
  13. import com.gmail.nossr50.locale.LocaleLoader;
  14. import com.gmail.nossr50.party.PartyManager;
  15. import com.gmail.nossr50.util.EventUtils;
  16. import com.gmail.nossr50.util.Misc;
  17. public class Party {
  18. private final LinkedHashSet<String> members = new LinkedHashSet<String>();
  19. private String leader;
  20. private String name;
  21. private String password;
  22. private boolean locked;
  23. private Party ally;
  24. private int level;
  25. private float xp;
  26. private ShareMode xpShareMode = ShareMode.NONE;
  27. private ShareMode itemShareMode = ShareMode.NONE;
  28. private boolean shareLootDrops = true;
  29. private boolean shareMiningDrops = true;
  30. private boolean shareHerbalismDrops = true;
  31. private boolean shareWoodcuttingDrops = true;
  32. private boolean shareMiscDrops = true;
  33. public Party(String name) {
  34. this.name = name;
  35. }
  36. public Party(String leader, String name) {
  37. this.leader = leader;
  38. this.name = name;
  39. this.locked = true;
  40. this.level = 0;
  41. }
  42. public Party(String leader, String name, String password) {
  43. this.leader = leader;
  44. this.name = name;
  45. this.password = password;
  46. this.locked = true;
  47. this.level = 0;
  48. }
  49. public Party(String leader, String name, String password, boolean locked) {
  50. this.leader = leader;
  51. this.name = name;
  52. this.password = password;
  53. this.locked = locked;
  54. this.level = 0;
  55. }
  56. public LinkedHashSet<String> getMembers() {
  57. return members;
  58. }
  59. public List<Player> getOnlineMembers() {
  60. List<Player> onlineMembers = new ArrayList<Player>();
  61. for (String memberName : members) {
  62. Player member = mcMMO.p.getServer().getPlayerExact(memberName);
  63. if (member != null) {
  64. onlineMembers.add(member);
  65. }
  66. }
  67. return onlineMembers;
  68. }
  69. public String getName() {
  70. return name;
  71. }
  72. public String getLeader() {
  73. return leader;
  74. }
  75. public String getPassword() {
  76. return password;
  77. }
  78. public boolean isLocked() {
  79. return locked;
  80. }
  81. public Party getAlly() {
  82. return ally;
  83. }
  84. public List<String> getItemShareCategories() {
  85. List<String> shareCategories = new ArrayList<String>();
  86. for (ItemShareType shareType : ItemShareType.values()) {
  87. if (sharingDrops(shareType)) {
  88. shareCategories.add(shareType.getLocaleString());
  89. }
  90. }
  91. return shareCategories;
  92. }
  93. public void setName(String name) {
  94. this.name = name;
  95. }
  96. public void setLeader(String leader) {
  97. this.leader = leader;
  98. }
  99. public void setPassword(String password) {
  100. this.password = password;
  101. }
  102. public void setLocked(boolean locked) {
  103. this.locked = locked;
  104. }
  105. public void setAlly(Party ally) {
  106. this.ally = ally;
  107. }
  108. public int getLevel() {
  109. return level;
  110. }
  111. public void setLevel(int level) {
  112. this.level = level;
  113. }
  114. public float getXp() {
  115. return xp;
  116. }
  117. public void setXp(float xp) {
  118. this.xp = xp;
  119. }
  120. public void addXp(float xp) {
  121. setXp(getXp() + xp);
  122. }
  123. protected float levelUp() {
  124. float xpRemoved = getXpToLevel();
  125. setLevel(getLevel() + 1);
  126. setXp(getXp() - xpRemoved);
  127. return xpRemoved;
  128. }
  129. public int getXpToLevel() {
  130. FormulaType formulaType = ExperienceConfig.getInstance().getFormulaType();
  131. return (mcMMO.getFormulaManager().getCachedXpToLevel(level, formulaType)) * (getOnlineMembers().size() + Config.getInstance().getPartyXpCurveMultiplier());
  132. }
  133. public String getXpToLevelPercentage() {
  134. DecimalFormat percent = new DecimalFormat("##0.00%");
  135. return percent.format( this.getXp() / getXpToLevel());
  136. }
  137. /**
  138. * Applies an experience gain
  139. *
  140. * @param xp Experience amount to add
  141. */
  142. public void applyXpGain(float xp) {
  143. if (!EventUtils.handlePartyXpGainEvent(this, xp)) {
  144. return;
  145. }
  146. if (getXp() < getXpToLevel()) {
  147. return;
  148. }
  149. int levelsGained = 0;
  150. float xpRemoved = 0;
  151. while (getXp() >= getXpToLevel()) {
  152. if (hasReachedLevelCap()) {
  153. setXp(0);
  154. return;
  155. }
  156. xpRemoved += levelUp();
  157. levelsGained++;
  158. }
  159. if (!EventUtils.handlePartyLevelChangeEvent(this, levelsGained, xpRemoved)) {
  160. return;
  161. }
  162. if (!Config.getInstance().getPartyInformAllMembers()) {
  163. Player leader = mcMMO.p.getServer().getPlayer(this.leader);
  164. leader.sendMessage(LocaleLoader.getString("Party.LevelUp", levelsGained, getLevel()));
  165. if (Config.getInstance().getLevelUpSoundsEnabled()) {
  166. leader.playSound(leader.getLocation(), Sound.LEVEL_UP, Misc.LEVELUP_VOLUME, Misc.LEVELUP_PITCH);
  167. }
  168. return;
  169. }
  170. PartyManager.informPartyMembersLevelUp(this, levelsGained, getLevel());
  171. }
  172. public boolean hasReachedLevelCap() {
  173. return Config.getInstance().getPartyLevelCap() < getLevel() + 1;
  174. }
  175. public void setXpShareMode(ShareMode xpShareMode) {
  176. this.xpShareMode = xpShareMode;
  177. }
  178. public ShareMode getXpShareMode() {
  179. return xpShareMode;
  180. }
  181. public void setItemShareMode(ShareMode itemShareMode) {
  182. this.itemShareMode = itemShareMode;
  183. }
  184. public ShareMode getItemShareMode() {
  185. return itemShareMode;
  186. }
  187. public boolean sharingDrops(ItemShareType shareType) {
  188. switch (shareType) {
  189. case HERBALISM:
  190. return shareHerbalismDrops;
  191. case LOOT:
  192. return shareLootDrops;
  193. case MINING:
  194. return shareMiningDrops;
  195. case MISC:
  196. return shareMiscDrops;
  197. case WOODCUTTING:
  198. return shareWoodcuttingDrops;
  199. default:
  200. return false;
  201. }
  202. }
  203. public void setSharingDrops(ItemShareType shareType, boolean enabled) {
  204. switch (shareType) {
  205. case HERBALISM:
  206. shareHerbalismDrops = enabled;
  207. break;
  208. case LOOT:
  209. shareLootDrops = enabled;
  210. break;
  211. case MINING:
  212. shareMiningDrops = enabled;
  213. break;
  214. case MISC:
  215. shareMiscDrops = enabled;
  216. break;
  217. case WOODCUTTING:
  218. shareWoodcuttingDrops = enabled;
  219. break;
  220. default:
  221. return;
  222. }
  223. }
  224. public String createMembersList(String playerName, List<Player> nearMembers) {
  225. StringBuilder memberList = new StringBuilder();
  226. for (String memberName : this.getMembers()) {
  227. Player member = mcMMO.p.getServer().getPlayerExact(memberName);
  228. if (this.getLeader().equalsIgnoreCase(memberName)) {
  229. memberList.append(ChatColor.GOLD);
  230. if (member == null) {
  231. memberName = memberName.substring(0, 1) + ChatColor.GRAY + ChatColor.ITALIC + "" + memberName.substring(1);
  232. }
  233. }
  234. else if (member != null) {
  235. memberList.append(ChatColor.WHITE);
  236. }
  237. else {
  238. memberList.append(ChatColor.GRAY);
  239. }
  240. if (!nearMembers.contains(member) && !playerName.equalsIgnoreCase(memberName)) {
  241. memberList.append(ChatColor.ITALIC + "");
  242. }
  243. memberList.append(memberName).append(ChatColor.RESET).append(" ");
  244. }
  245. return memberList.toString();
  246. }
  247. @Override
  248. public boolean equals(Object obj) {
  249. if (obj == null) {
  250. return false;
  251. }
  252. if (!(obj instanceof Party)) {
  253. return false;
  254. }
  255. Party other = (Party) obj;
  256. if ((this.getName() == null) || (other.getName() == null)) {
  257. return false;
  258. }
  259. return this.getName().equals(other.getName());
  260. }
  261. @Override
  262. public int hashCode() {
  263. return super.hashCode();
  264. }
  265. }