Separate Scoreboards

Discussion in 'Plugin Development' started by FlawlezZ, Oct 24, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    FlawlezZ

    Hey, I want to make Nametags below the name of a player. How can I make it that everyone has it own? Currently everybody has the same. :(

    Code:java
    1. public void onEnable() {
    2. ScoreboardManager manager = Bukkit.getScoreboardManager();
    3. Scoreboard board = manager.getMainScoreboard();
    4.  
    5. Objective objective = board.registerNewObjective("Flawssentials", "Achievement.THE_END");
    6. objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
    7.  
    8. final Scoreboard finalBoard = board;
    9. final Objective finalObjective = objective;
    10.  
    11.  
    12. Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    13. @Override
    14. public void run() {
    15. for (Player online : Bukkit.getOnlinePlayers()) {
    16.  
    17. String color = "GRAY";
    18. String rank = getRank(online.getName());
    19.  
    20. if (getMorale(online.getName()) >= 1000) {
    21. color = "AQUA";
    22. } else if (getMorale(online.getName()) <= -1000) {
    23. color = "DARK_RED";
    24. }
    25. finalObjective.setDisplayName("[" + ChatColor.valueOf(color) + rank + ChatColor.WHITE + "]");
    26. online.setScoreboard(finalBoard);
    27. getLogger().info("Scoreboards gesetzt");
    28. }
    29. }
    30.  
    31.  
    32. }, 0L, 60*20L);
    33. }
     
  2. Offline

    Atakyn

    This is just a basic format to have per player scoreboards:

    Code:java
    1. private Scoreboard scoreboard;
    2. private Objective objective;
    3. public void setInfoScoreboard(Player player) {
    4. scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
    5. objective = scoreboard.registerNewObjective(player.getName(), "dummy");
    6. objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
    7. Score score = objective.getScore(Bukkit.getOfflinePlayer(player);
    8. score.setScore(SCORE_VALUE);
    9. player.setScoreboard(scoreboard);
    10. }

    This allows you to set the objective and the score of the score board.
    Why this works: every time the method runs a new scoreboard will be created just for that player.

    Then under a player join event:
    Code:java
    1. public void onJoin(PlayerJoinEvent e){
    2. setInfoScoreboard(e.getPlayer());
    3. }

    This will set the scoreboard to the player when the player joins the server.

    Don't forget to register events!
     
Thread Status:
Not open for further replies.

Share This Page