diff --git a/Changelog.txt b/Changelog.txt index 397283d85..c33a7c7cb 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -26,6 +26,7 @@ Version 1.4.06-dev + Added config option to multiply xp gains from mob spawner mobs + Added multiplier to Archery XP based on bow force + Added information about /party itemshare and /party expshare to the party help page + + Added option to use scoreboards for power level display instead of Spout. = Fixed bug where players were able to join the same party multiple times = Fixed displaying partial names when trying to use /ptp = Fixed wolves from Call of the Wild only having 8 health diff --git a/src/main/java/com/gmail/nossr50/config/Config.java b/src/main/java/com/gmail/nossr50/config/Config.java index f3cb64f26..ec245f03d 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/src/main/java/com/gmail/nossr50/config/Config.java @@ -80,6 +80,8 @@ public class Config extends AutoUpdateConfigLoader { public boolean getSkillScoreboardEnabled() { return config.getBoolean("Scoreboards.Skillname.Use", true); } public int getSkillScoreboardTime() { return config.getInt("Scoreboards.Skillname.Display_Time", 10); } + public boolean getPowerLevelsEnabled() { return config.getBoolean("Scoreboards.Power_Level.Use", true); } + /* Database Purging */ public int getPurgeInterval() { return config.getInt("Database_Purging.Purge_Interval", -1); } public int getOldUsersCutoff() { return config.getInt("Database_Purging.Old_User_Cutoff", 6); } diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index a54b49d83..d59098d57 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -54,6 +54,7 @@ import com.gmail.nossr50.util.MobHealthbarUtils; import com.gmail.nossr50.util.Motd; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.player.UserManager; +import com.gmail.nossr50.util.scoreboards.ScoreboardManager; import com.gmail.nossr50.util.skills.SkillUtils; public class PlayerListener implements Listener { @@ -144,6 +145,7 @@ public class PlayerListener implements Listener { } UserManager.addUser(player).actualizeRespawnATS(); + ScoreboardManager.enablePowerLevelDisplay(player); } /** diff --git a/src/main/java/com/gmail/nossr50/runnables/scoreboards/ScoreboardChangeTask.java b/src/main/java/com/gmail/nossr50/runnables/scoreboards/ScoreboardChangeTask.java index 7daa8dd2a..364e4e5e2 100644 --- a/src/main/java/com/gmail/nossr50/runnables/scoreboards/ScoreboardChangeTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/scoreboards/ScoreboardChangeTask.java @@ -19,6 +19,7 @@ public class ScoreboardChangeTask extends BukkitRunnable { public void run() { if (player.isOnline()) { player.setScoreboard(oldScoreboard); + ScoreboardManager.enablePowerLevelDisplay(player); } ScoreboardManager.clearPendingTask(player.getName()); diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java index 4611e9427..aa9ab263f 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java @@ -23,6 +23,7 @@ import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.runnables.scoreboards.ScoreboardChangeTask; import com.gmail.nossr50.util.Permissions; +import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.skills.SkillUtils; public class ScoreboardManager { @@ -32,6 +33,7 @@ public class ScoreboardManager { private final static String PLAYER_STATS_HEADER = "mcMMO Stats"; private final static String PLAYER_RANK_HEADER = "mcMMO Rankings"; private final static String PLAYER_INSPECT_HEADER = "mcMMO Stats: "; + private final static String POWER_LEVEL_HEADER = "Power Level"; private final static List SCOREBOARD_TASKS = new ArrayList(); @@ -43,6 +45,32 @@ public class ScoreboardManager { PLAYER_SCOREBOARDS.put(playerName, mcMMO.p.getServer().getScoreboardManager().getNewScoreboard()); } + public static void enablePowerLevelDisplay(Player player) { + if (!Config.getInstance().getPowerLevelsEnabled()) { + return; + } + + Scoreboard scoreboard = player.getScoreboard(); + Objective objective; + + if (scoreboard.getObjective(DisplaySlot.BELOW_NAME) == null) { + objective = scoreboard.registerNewObjective(POWER_LEVEL_HEADER, "dummy"); + + objective.getScore(player).setScore(UserManager.getPlayer(player).getPowerLevel()); + objective.setDisplaySlot(DisplaySlot.BELOW_NAME); + } + else { + objective = scoreboard.getObjective(POWER_LEVEL_HEADER); + + if (scoreboard.getObjective(POWER_LEVEL_HEADER) != null) { + objective.getScore(player).setScore(UserManager.getPlayer(player).getPowerLevel()); + } + else { + mcMMO.p.debug("Another plugin is using this scoreboard slot, so power levels cannot be enabled."); //TODO: Locale + } + } + } + public static void enablePlayerSkillScoreboard(McMMOPlayer mcMMOPlayer, SkillType skill) { Player player = mcMMOPlayer.getPlayer(); Scoreboard oldScoreboard = player.getScoreboard(); @@ -307,6 +335,7 @@ public class ScoreboardManager { String playerName = player.getName(); player.setScoreboard(newScoreboard); + enablePowerLevelDisplay(player); if (displayTime != -1 && !SCOREBOARD_TASKS.contains(playerName)) { new ScoreboardChangeTask(player, oldScoreboard).runTaskLater(mcMMO.p, displayTime * 20); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 81526c88e..52cfedc59 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -56,6 +56,9 @@ Scoreboards: Skillname: Use: true Display_Time: 10 + # Should mcMMO display power levels on scoreboards? + Power_Level: + Use: true Mob_Healthbar: # Default display for mob health bars - HEARTS, BAR, or DISABLED