|
@@ -28,7 +28,6 @@ import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType;
|
|
|
import org.apache.commons.lang.Validate;
|
|
|
|
|
|
public class ScoreboardWrapper {
|
|
|
-
|
|
|
// Initialization variables
|
|
|
public final String playerName;
|
|
|
private final Scoreboard scoreboard;
|
|
@@ -69,6 +68,7 @@ public class ScoreboardWrapper {
|
|
|
}
|
|
|
|
|
|
public BukkitTask updateTask = null;
|
|
|
+
|
|
|
private class ScoreboardQuickUpdate extends BukkitRunnable {
|
|
|
@Override
|
|
|
public void run() {
|
|
@@ -78,6 +78,7 @@ public class ScoreboardWrapper {
|
|
|
}
|
|
|
|
|
|
public BukkitTask revertTask = null;
|
|
|
+
|
|
|
private class ScoreboardChangeTask extends BukkitRunnable {
|
|
|
@Override
|
|
|
public void run() {
|
|
@@ -87,6 +88,7 @@ public class ScoreboardWrapper {
|
|
|
}
|
|
|
|
|
|
public BukkitTask cooldownTask = null;
|
|
|
+
|
|
|
private class ScoreboardCooldownTask extends BukkitRunnable {
|
|
|
@Override
|
|
|
public void run() {
|
|
@@ -121,7 +123,8 @@ public class ScoreboardWrapper {
|
|
|
try {
|
|
|
cooldownTask.cancel();
|
|
|
}
|
|
|
- catch (Throwable ignored) {}
|
|
|
+ catch (Throwable ignored) {
|
|
|
+ }
|
|
|
|
|
|
cooldownTask = null;
|
|
|
}
|
|
@@ -381,7 +384,8 @@ public class ScoreboardWrapper {
|
|
|
try {
|
|
|
updateTask.cancel();
|
|
|
}
|
|
|
- catch (Throwable ignored) {} // catch NullPointerException and IllegalStateException and any Error; don't care
|
|
|
+ catch (Throwable ignored) {
|
|
|
+ } // catch NullPointerException and IllegalStateException and any Error; don't care
|
|
|
|
|
|
updateTask = null;
|
|
|
|
|
@@ -399,124 +403,125 @@ public class ScoreboardWrapper {
|
|
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
|
|
|
|
|
switch (sidebarType) {
|
|
|
- case NONE:
|
|
|
- break;
|
|
|
+ case NONE:
|
|
|
+ break;
|
|
|
|
|
|
- case SKILL_BOARD:
|
|
|
- Validate.notNull(targetSkill);
|
|
|
+ case SKILL_BOARD:
|
|
|
+ Validate.notNull(targetSkill);
|
|
|
|
|
|
- if (!targetSkill.isChildSkill()) {
|
|
|
- int currentXP = mcMMOPlayer.getSkillXpLevel(targetSkill);
|
|
|
+ if (!targetSkill.isChildSkill()) {
|
|
|
+ int currentXP = mcMMOPlayer.getSkillXpLevel(targetSkill);
|
|
|
|
|
|
- sidebarObjective.getScore(ScoreboardManager.LABEL_CURRENT_XP).setScore(currentXP);
|
|
|
- sidebarObjective.getScore(ScoreboardManager.LABEL_REMAINING_XP).setScore(mcMMOPlayer.getXpToLevel(targetSkill) - currentXP);
|
|
|
- }
|
|
|
- else {
|
|
|
- for (SkillType parentSkill : FamilyTree.getParents(targetSkill)) {
|
|
|
- sidebarObjective.getScore(ScoreboardManager.skillLabels.get(parentSkill)).setScore(mcMMOPlayer.getSkillLevel(parentSkill));
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.LABEL_CURRENT_XP).setScore(currentXP);
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.LABEL_REMAINING_XP).setScore(mcMMOPlayer.getXpToLevel(targetSkill) - currentXP);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ for (SkillType parentSkill : FamilyTree.getParents(targetSkill)) {
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.skillLabels.get(parentSkill)).setScore(mcMMOPlayer.getSkillLevel(parentSkill));
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.LABEL_LEVEL).setScore(mcMMOPlayer.getSkillLevel(targetSkill));
|
|
|
|
|
|
- if (targetSkill.getAbility() != null) {
|
|
|
- boolean stopUpdating;
|
|
|
+ if (targetSkill.getAbility() != null) {
|
|
|
+ boolean stopUpdating;
|
|
|
|
|
|
- if (targetSkill == SkillType.MINING) {
|
|
|
- // Special-Case: Mining has two abilities, both with cooldowns
|
|
|
- Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.SUPER_BREAKER));
|
|
|
- Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.BLAST_MINING));
|
|
|
- int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.SUPER_BREAKER), 0);
|
|
|
- int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.BLAST_MINING), 0);
|
|
|
+ if (targetSkill == SkillType.MINING) {
|
|
|
+ // Special-Case: Mining has two abilities, both with cooldowns
|
|
|
+ Score cooldownSB = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.SUPER_BREAKER));
|
|
|
+ Score cooldownBM = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(AbilityType.BLAST_MINING));
|
|
|
+ int secondsSB = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.SUPER_BREAKER), 0);
|
|
|
+ int secondsBM = Math.max(mcMMOPlayer.calculateTimeRemaining(AbilityType.BLAST_MINING), 0);
|
|
|
|
|
|
- cooldownSB.setScore(secondsSB);
|
|
|
- cooldownBM.setScore(secondsBM);
|
|
|
+ cooldownSB.setScore(secondsSB);
|
|
|
+ cooldownBM.setScore(secondsBM);
|
|
|
|
|
|
- stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
|
|
+ stopUpdating = (secondsSB == 0 && secondsBM == 0);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ AbilityType ability = targetSkill.getAbility();
|
|
|
+ Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
|
|
+ int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
|
|
+
|
|
|
+ cooldown.setScore(seconds);
|
|
|
+
|
|
|
+ stopUpdating = seconds == 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (stopUpdating) {
|
|
|
+ stopCooldownUpdating();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ startCooldownUpdating();
|
|
|
+ }
|
|
|
}
|
|
|
- else {
|
|
|
- AbilityType ability = targetSkill.getAbility();
|
|
|
- Score cooldown = sidebarObjective.getScore(ScoreboardManager.abilityLabelsSkill.get(ability));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case COOLDOWNS_BOARD:
|
|
|
+ boolean anyCooldownsActive = false;
|
|
|
+
|
|
|
+ for (AbilityType ability : AbilityType.values()) {
|
|
|
int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
|
|
|
|
|
- cooldown.setScore(seconds);
|
|
|
+ if (seconds != 0) {
|
|
|
+ anyCooldownsActive = true;
|
|
|
+ }
|
|
|
|
|
|
- stopUpdating = seconds == 0;
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.abilityLabelsColored.get(ability)).setScore(seconds);
|
|
|
}
|
|
|
|
|
|
- if (stopUpdating) {
|
|
|
- stopCooldownUpdating();
|
|
|
+ if (anyCooldownsActive) {
|
|
|
+ startCooldownUpdating();
|
|
|
}
|
|
|
else {
|
|
|
- startCooldownUpdating();
|
|
|
+ stopCooldownUpdating();
|
|
|
}
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case COOLDOWNS_BOARD:
|
|
|
- boolean anyCooldownsActive = false;
|
|
|
+ break;
|
|
|
|
|
|
- for (AbilityType ability : AbilityType.values()) {
|
|
|
- int seconds = Math.max(mcMMOPlayer.calculateTimeRemaining(ability), 0);
|
|
|
+ case STATS_BOARD:
|
|
|
+ // Select the profile to read from
|
|
|
+ PlayerProfile newProfile;
|
|
|
|
|
|
- if (seconds != 0) {
|
|
|
- anyCooldownsActive = true;
|
|
|
+ if (targetProfile != null) {
|
|
|
+ newProfile = targetProfile; // offline
|
|
|
+ }
|
|
|
+ else if (targetPlayer == null) {
|
|
|
+ newProfile = mcMMOPlayer.getProfile(); // self
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ newProfile = UserManager.getPlayer(targetPlayer).getProfile(); // online
|
|
|
}
|
|
|
|
|
|
- sidebarObjective.getScore(ScoreboardManager.abilityLabelsColored.get(ability)).setScore(seconds);
|
|
|
- }
|
|
|
-
|
|
|
- if (anyCooldownsActive) {
|
|
|
- startCooldownUpdating();
|
|
|
- }
|
|
|
- else {
|
|
|
- stopCooldownUpdating();
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case STATS_BOARD:
|
|
|
- // Select the profile to read from
|
|
|
- PlayerProfile newProfile;
|
|
|
-
|
|
|
- if (targetProfile != null) {
|
|
|
- newProfile = targetProfile; // offline
|
|
|
- }
|
|
|
- else if (targetPlayer == null) {
|
|
|
- newProfile = mcMMOPlayer.getProfile(); // self
|
|
|
- }
|
|
|
- else {
|
|
|
- newProfile = UserManager.getPlayer(targetPlayer).getProfile(); // online
|
|
|
- }
|
|
|
+ // Calculate power level here
|
|
|
+ int powerLevel = 0;
|
|
|
+ for (SkillType skill : SkillType.values()) { // Include child skills, but not in power level
|
|
|
+ int level = newProfile.getSkillLevel(skill);
|
|
|
|
|
|
- // Calculate power level here
|
|
|
- int powerLevel = 0;
|
|
|
- for (SkillType skill : SkillType.values()) { // Include child skills, but not in power level
|
|
|
- int level = newProfile.getSkillLevel(skill);
|
|
|
+ if (!skill.isChildSkill()) {
|
|
|
+ powerLevel += level;
|
|
|
+ }
|
|
|
|
|
|
- if (!skill.isChildSkill())
|
|
|
- powerLevel += level;
|
|
|
+ // TODO: Verify that this is what we want - calculated in power level but not displayed
|
|
|
+ if (!skill.getPermissions(player)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- // TODO: Verify that this is what we want - calculated in power level but not displayed
|
|
|
- if (!skill.getPermissions(player)) {
|
|
|
- continue;
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.skillLabels.get(skill)).setScore(level);
|
|
|
}
|
|
|
|
|
|
- sidebarObjective.getScore(ScoreboardManager.skillLabels.get(skill)).setScore(level);
|
|
|
- }
|
|
|
-
|
|
|
- sidebarObjective.getScore(ScoreboardManager.LABEL_POWER_LEVEL).setScore(powerLevel);
|
|
|
- break;
|
|
|
+ sidebarObjective.getScore(ScoreboardManager.LABEL_POWER_LEVEL).setScore(powerLevel);
|
|
|
+ break;
|
|
|
|
|
|
- case RANK_BOARD:
|
|
|
- case TOP_BOARD:
|
|
|
+ case RANK_BOARD:
|
|
|
+ case TOP_BOARD:
|
|
|
/*
|
|
|
* @see #acceptRankData(Map<SkillType, Integer> rank)
|
|
|
* @see #acceptLeaderboardData(List<PlayerStat> stats)
|
|
|
*/
|
|
|
- break;
|
|
|
+ break;
|
|
|
|
|
|
- default:
|
|
|
- break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|