2013-01-30 15:17:50 +01:00
|
|
|
package com.gmail.nossr50.party;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
|
|
|
import com.gmail.nossr50.config.Config;
|
2013-01-30 17:53:51 +01:00
|
|
|
import com.gmail.nossr50.skills.utilities.SkillType;
|
2013-01-30 15:17:50 +01:00
|
|
|
import com.gmail.nossr50.util.Users;
|
|
|
|
|
2013-02-01 06:38:25 +01:00
|
|
|
public final class ShareHandler {
|
|
|
|
public enum XpShareMode {
|
|
|
|
NONE,
|
|
|
|
EQUAL;
|
|
|
|
|
|
|
|
public static XpShareMode getFromString(String string) {
|
|
|
|
try {
|
|
|
|
return valueOf(string);
|
|
|
|
}
|
|
|
|
catch (IllegalArgumentException exception) {
|
|
|
|
return NONE;
|
2013-02-01 13:57:00 +01:00
|
|
|
}
|
|
|
|
catch (NullPointerException exception) {
|
|
|
|
return NONE;
|
2013-02-01 06:38:25 +01:00
|
|
|
}
|
2013-01-30 15:17:50 +01:00
|
|
|
}
|
2013-02-01 06:38:25 +01:00
|
|
|
};
|
2013-01-30 17:25:44 +01:00
|
|
|
|
2013-02-01 06:38:25 +01:00
|
|
|
private static boolean running; // Used to prevent permanent sharing, McMMOPlayer.addXp() uses it
|
2013-01-30 15:17:50 +01:00
|
|
|
|
2013-02-01 06:38:25 +01:00
|
|
|
private ShareHandler() {}
|
2013-01-30 15:17:50 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Distribute XP amongst party members.
|
|
|
|
*
|
2013-01-31 01:42:40 +01:00
|
|
|
* @param xp XP without party sharing
|
2013-01-30 15:17:50 +01:00
|
|
|
*/
|
2013-02-01 06:38:25 +01:00
|
|
|
public static void handleEqualXpShare(int xp, Player player, Party party, SkillType skillType) {
|
|
|
|
running = true;
|
|
|
|
|
|
|
|
if (party.getXpShareMode() == XpShareMode.EQUAL) {
|
|
|
|
List<Player> nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
|
2013-01-30 15:17:50 +01:00
|
|
|
|
2013-02-02 04:42:24 +01:00
|
|
|
if (nearMembers.isEmpty()) {
|
2013-02-02 04:33:26 +01:00
|
|
|
running = false;
|
|
|
|
return;
|
2013-02-01 06:38:25 +01:00
|
|
|
}
|
2013-01-30 15:17:50 +01:00
|
|
|
|
2013-02-02 04:33:26 +01:00
|
|
|
double partySize = nearMembers.size() + 1;
|
|
|
|
double splitXp = xp / partySize * Config.getInstance().getPartyShareBonus();
|
|
|
|
|
2013-02-01 06:38:25 +01:00
|
|
|
for (Player member : nearMembers) {
|
2013-02-02 04:33:26 +01:00
|
|
|
Users.getPlayer(member).addXp(skillType, (int) Math.ceil(splitXp));
|
2013-01-30 15:17:50 +01:00
|
|
|
}
|
|
|
|
}
|
2013-02-01 06:38:25 +01:00
|
|
|
|
|
|
|
running = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean isRunning() {
|
|
|
|
return running;
|
2013-01-30 15:17:50 +01:00
|
|
|
}
|
|
|
|
}
|