|  | @@ -17,13 +17,20 @@ public class PartyExperienceManager {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private int partyLevel;
 | 
	
		
			
				|  |  |      private float partyExperience;
 | 
	
		
			
				|  |  | -    private ShareMode xpShareMode   = ShareMode.NONE;
 | 
	
		
			
				|  |  | +    private final @NotNull Party partyRef;
 | 
	
		
			
				|  |  | +    private final @NotNull PartyMemberManager partyMemberManagerRef;
 | 
	
		
			
				|  |  | +    private @NotNull ShareMode xpShareMode = ShareMode.NONE;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public void setXpShareMode(ShareMode xpShareMode) {
 | 
	
		
			
				|  |  | +    public PartyExperienceManager(@NotNull PartyMemberManager partyMemberManager, @NotNull Party party) {
 | 
	
		
			
				|  |  | +        this.partyRef = party;
 | 
	
		
			
				|  |  | +        this.partyMemberManagerRef = partyMemberManager;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public void setXpShareMode(@NotNull ShareMode xpShareMode) {
 | 
	
		
			
				|  |  |          this.xpShareMode = xpShareMode;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public ShareMode getXpShareMode() {
 | 
	
		
			
				|  |  | +    public @NotNull ShareMode getXpShareMode() {
 | 
	
		
			
				|  |  |          return xpShareMode;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -33,7 +40,7 @@ public class PartyExperienceManager {
 | 
	
		
			
				|  |  |       * @param xp Experience amount to add
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  |      public void applyXpGain(float xp) {
 | 
	
		
			
				|  |  | -        if (!EventUtils.handlePartyXpGainEvent(this, xp)) {
 | 
	
		
			
				|  |  | +        if (!EventUtils.handlePartyXpGainEvent(partyRef, xp)) {
 | 
	
		
			
				|  |  |              return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -54,12 +61,12 @@ public class PartyExperienceManager {
 | 
	
		
			
				|  |  |              levelsGained++;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (!EventUtils.handlePartyLevelChangeEvent(this, levelsGained, xpRemoved)) {
 | 
	
		
			
				|  |  | +        if (!EventUtils.handlePartyLevelChangeEvent(partyRef, levelsGained, xpRemoved)) {
 | 
	
		
			
				|  |  |              return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (!Config.getInstance().getPartyInformAllMembers()) {
 | 
	
		
			
				|  |  | -            Player leader = mcMMO.p.getServer().getPlayer(this.leader.getUniqueId());
 | 
	
		
			
				|  |  | +            Player leader = mcMMO.p.getServer().getPlayer(partyMemberManagerRef.getPartyLeader().getUniqueId());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (leader != null) {
 | 
	
		
			
				|  |  |                  leader.sendMessage(LocaleLoader.getString("Party.LevelUp", levelsGained, getLevel()));
 | 
	
	
		
			
				|  | @@ -68,10 +75,10 @@ public class PartyExperienceManager {
 | 
	
		
			
				|  |  |                      SoundManager.sendSound(leader, leader.getLocation(), SoundType.LEVEL_UP);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            return;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        mcMMO.getPartyManager().informPartyMembersLevelUp(this, levelsGained, getLevel());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            mcMMO.getPartyManager().informPartyMembersLevelUp(partyRef, levelsGained, getLevel());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public boolean hasReachedLevelCap() {
 | 
	
	
		
			
				|  | @@ -79,19 +86,19 @@ public class PartyExperienceManager {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public int getLevel() {
 | 
	
		
			
				|  |  | -        return level;
 | 
	
		
			
				|  |  | +        return partyLevel;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void setLevel(int level) {
 | 
	
		
			
				|  |  | -        this.level = level;
 | 
	
		
			
				|  |  | +        partyLevel = level;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public float getXp() {
 | 
	
		
			
				|  |  | -        return xp;
 | 
	
		
			
				|  |  | +        return partyExperience;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void setXp(float xp) {
 | 
	
		
			
				|  |  | -        this.xp = xp;
 | 
	
		
			
				|  |  | +        this.partyExperience = xp;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void addXp(float xp) {
 | 
	
	
		
			
				|  | @@ -107,13 +114,18 @@ public class PartyExperienceManager {
 | 
	
		
			
				|  |  |          return xpRemoved;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    //TODO: Why is it based on the number of party members? seems dumb
 | 
	
		
			
				|  |  |      public int getXpToLevel() {
 | 
	
		
			
				|  |  |          FormulaType formulaType = ExperienceConfig.getInstance().getFormulaType();
 | 
	
		
			
				|  |  | -        return (mcMMO.getFormulaManager().getXPtoNextLevel(level, formulaType)) * (getPartyMembers().size() + Config.getInstance().getPartyXpCurveMultiplier());
 | 
	
		
			
				|  |  | +        return (mcMMO.getFormulaManager().getXPtoNextLevel(partyLevel, formulaType)) * (partyMemberManagerRef.getPartyMembers().size() + Config.getInstance().getPartyXpCurveMultiplier());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public @NotNull String getXpToLevelPercentage() {
 | 
	
		
			
				|  |  |          DecimalFormat percent = new DecimalFormat("##0.00%");
 | 
	
		
			
				|  |  |          return percent.format(this.getXp() / getXpToLevel());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public @NotNull Party getParty() {
 | 
	
		
			
				|  |  | +        return partyRef;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |