Personal Scoreboards

Discussion in 'Plugin Development' started by Dubehh, Jul 15, 2014.

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

    Dubehh

    So I have this:
    Code:java
    1. package me.dubehh.Scoreboard;
    2.  
    3. import me.dubehh.Kingdom.Main;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.scoreboard.DisplaySlot;
    9. import org.bukkit.scoreboard.Objective;
    10. import org.bukkit.scoreboard.Scoreboard;
    11. import org.bukkit.scoreboard.ScoreboardManager;
    12.  
    13. public class Board {
    14.  
    15. final Main m;
    16. public Board(Main instance){
    17. m = instance;
    18. }
    19.  
    20. ScoreboardManager sm = Bukkit.getScoreboardManager();
    21. Scoreboard board = sm.getNewScoreboard();
    22. public Objective obj = board.registerNewObjective("dummy", "board");
    23. int onlinePlayer = Bukkit.getServer().getOnlinePlayers().length;
    24.  
    25. public void toggleScoreboard(Player p){
    26. if(p.getScoreboard().equals(board)){
    27. p.sendMessage(ChatColor.GRAY + "- Info bord uitgezet - ");
    28. p.setScoreboard(m.board.sm.getNewScoreboard());
    29. }else{
    30. p.sendMessage(ChatColor.GRAY + "- Info bord aangezet - ");
    31. loadObj(obj, p);
    32. p.setScoreboard(board);
    33. }
    34. }
    35. @SuppressWarnings("deprecation")
    36. public void loadObj(Objective obj, Player p){
    37. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    38. obj.setDisplayName(ChatColor.DARK_AQUA + "[" + ChatColor.AQUA + "The Roam" + ChatColor.DARK_AQUA + "]");
    39. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "Online: " + ChatColor.AQUA + onlinePlayer)).setScore(10);
    40. obj.getScore(Bukkit.getOfflinePlayer("")).setScore(9);
    41. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Jij")).setScore(8);
    42. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "Rang: " + ChatColor.AQUA + m.promote.getRank(p))).setScore(7);
    43. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "Kingdom: " + ChatColor.AQUA + m.methods.getKingdom(p))).setScore(6);
    44.  
    45. }


    Which is my scoreboard class.
    And everything works except the 'Rang' and 'Kingdom'.
    When I call the toggle method,
    I get kicked from my server with:

    http://gyazo.com/d56c2e2379f4a9a0b91b845329f2c40e (safe link)

    possible causes:
    - I use a player object inside the scoreboards? I want personal scoreboards.

    Thanks!
     
  2. Offline

    CorrieKay

    I havent checked out the scoreboard api myself, but the error is quite clear, the string you're passing in is far too long for the scoreboard. If you're passing in the player object, do player.getName() (or display name) instead.
     
  3. Offline

    Dubehh

    CorrieKay
    Well how would that make a differense?
    Since ' m.promote.getRank(p) ' is a String.

    Code:java
    1. public String getRank(Player p){
    2. if(someRank.contains(p)){
    3. return "Leader";
    4. }else{
    5. return "Villager";
    6. }
    7.  


    That is not IN my actual getRank method. But how I did it here, I did it in my real code.
     
  4. Offline

    fireblast709

    Dubehh there is a score name limit of 16 chars. Colour and format count as 2 chars. So villager gives 18 chars, which is more than 16
     
  5. Offline

    TheMcScavenger

    Just saying, I love how your plugin is half english and half dutch...
     
  6. Offline

    Dubehh

    TheMcScavenger
    I like to keep my code english.
    Like 1/2 methods are dutch. The rest is just messages.

    fireblast709
    Thanks! Didn't know ChatColor took space.
    Just wondering, is there a way to renew a score?
    Code:java
    1. obj.getScore(Bukkit.getOfflinePlayer("")).setScore(9);
    2. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Rang:")).setScore(8);
    3. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + m.promote.getRank(p))).setScore(7);
    4. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Kingdom:")).setScore(6);
    5. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + getKD(p))).setScore(5);

    For example,
    when the person shows the scoreboard, and he is a Villager the scoreboard shows 'Villager' like it should.
    but when I add him to, for example, 'Knight'. it will show:
    (scoreboard)
    Rang:
    Villager 7
    Knight 7

    (it creates a list of Ranks everytime the person is promoted / demoted. I'd like it to just update it from Villager to Knight.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  7. Offline

    fireblast709

    Dubehh reset the score for Villager
     
  8. Offline

    Dubehh

    fireblast709
    How can I 'reset' a score?
    I need to remove '7' than add a new thing to '7'. But how can I get a score number?
     
  9. Offline

    fireblast709

  10. Offline

    Dubehh

    fireblast709
    I tried
    Code:java
    1. board.resetScores(p);
    2.  
    3. board.resetScores(Bukkit.getOfflinePlayer(ChatColor.AQUA + m.promote.getRank(p)));


    both did not work :l.

    Current code
    Code:java
    1. ScoreboardManager sm = Bukkit.getScoreboardManager();
    2. Scoreboard board = sm.getNewScoreboard();
    3. public Objective obj = board.registerNewObjective("dummy", "board");
    4. int onlinePlayer;
    5.  
    6. public void toggleScoreboard(Player p){
    7. if(p.getScoreboard().equals(board)){
    8. p.sendMessage(ChatColor.GRAY + "- Info bord uitgezet - ");
    9. p.setScoreboard(m.board.sm.getNewScoreboard());
    10. }else{
    11. p.sendMessage(ChatColor.GRAY + "- Info bord aangezet - ");
    12. loadObj(obj, p);
    13. p.setScoreboard(board);
    14. }
    15. }
    16. @SuppressWarnings("deprecation")
    17. public void loadObj(Objective obj, Player p){
    18. onlinePlayer = Bukkit.getServer().getOnlinePlayers().length;
    19. board.resetScores(Bukkit.getOfflinePlayer(ChatColor.AQUA + m.promote.getRank(p)));
    20. board.resetScores(Bukkit.getOfflinePlayer(ChatColor.AQUA + getKD(p)));
    21. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    22. obj.setDisplayName(ChatColor.DARK_AQUA + "[" + ChatColor.AQUA + "The Roam" + ChatColor.DARK_AQUA + "]");
    23. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "Online: " + ChatColor.AQUA + onlinePlayer)).setScore(10);
    24. obj.getScore(Bukkit.getOfflinePlayer("")).setScore(9);
    25. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Rang:")).setScore(8);
    26. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + m.promote.getRank(p))).setScore(7);
    27. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Kingdom:")).setScore(6);
    28. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + getKD(p))).setScore(5);;
    29.  
    30. }
    31.  
    32.  
    33. public String getKD(Player p){
    34. if(m.getConfig().contains(p.getName())){
    35. String kd = m.getConfig().getString(p.getName() + ".Kingdom");
    36. return kd;
    37. }else{
    38. return "-";
    39. }
    40. }
    41.  
     
  11. Offline

    fireblast709

    Dubehh you need to reset scores before promoting
     
  12. Offline

    Dubehh

    fireblast709
    Still the same.
    Code:java
    1. final Main m;
    2. public Board(Main instance){
    3. m = instance;
    4. }
    5.  
    6. ScoreboardManager sm = Bukkit.getScoreboardManager();
    7. Scoreboard board = sm.getNewScoreboard();
    8. public Objective obj = board.registerNewObjective("dummy", "board");
    9. int onlinePlayer;
    10.  
    11. public void toggleScoreboard(Player p){
    12. if(p.getScoreboard().equals(board)){
    13. p.sendMessage(ChatColor.GRAY + "- Info bord uitgezet - ");
    14. p.setScoreboard(m.board.sm.getNewScoreboard());
    15. }else{
    16. p.sendMessage(ChatColor.GRAY + "- Info bord aangezet - ");
    17. loadObj(obj, p);
    18. p.setScoreboard(board);
    19. }
    20. }
    21. public void clearScore(){
    22. for(OfflinePlayer player : board.getPlayers())
    23. {
    24. if(obj.getName().contains(ChatColor.AQUA + "")){
    25. board.resetScores(player);
    26. }
    27. }
    28. }
    29. @SuppressWarnings("deprecation")
    30. public void loadObj(Objective obj, Player p){
    31. onlinePlayer = Bukkit.getServer().getOnlinePlayers().length;
    32. clearScore();
    33.  
    34. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    35. obj.setDisplayName(ChatColor.DARK_AQUA + "[" + ChatColor.AQUA + "The Roam" + ChatColor.DARK_AQUA + "]");
    36. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "Online: " + ChatColor.AQUA + onlinePlayer)).setScore(10);
    37. obj.getScore(Bukkit.getOfflinePlayer("")).setScore(9);
    38. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Rang:")).setScore(8);
    39. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + m.promote.getRank(p))).setScore(7);
    40. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "Kingdom:")).setScore(6);
    41. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.AQUA + getKD(p))).setScore(5);;
    42.  
    43. }
    44.  
    45.  
    46. public String getKD(Player p){
    47. if(m.getConfig().contains(p.getName())){
    48. String kd = m.getConfig().getString(p.getName() + ".Kingdom");
    49. return kd;
    50. }else{
    51. return "-";
    52. }
    53. }
    54.  
    55.  
    56.  
    57.  
    58.  
    59.  
    60. }


    Promote
    Code:java
    1.  
    2. public void promotePlayer(Player p, Player sender){
    3. m.board.loadObj(m.board.obj, p);
    4. if(!(isPromoted(p))){
    5. setRidderI(p);
    6. p.sendMessage(pref + "dutch message");
    7. sender.sendMessage(pref + "dutch message");
    8. return;
    9. }else if(isRidderI(p)){
    10. setRidderII(p);
    11. p.sendMessage(pref + "dutch message");
    12. sender.sendMessage(pref + "dutch message");
    13. return;
    14. }else if(isRidderII(p)){
    15. setHertog(p);
    16. p.sendMessage(pref + "dutch message");
    17. sender.sendMessage(pref + "dutch message");
    18. return;
    19. }else{
    20. sender.sendMessage(pref + "dutch message");
    21. }
    22. }
    23.  
     
  13. Offline

    Dubehh

  14. Offline

    Dubehh

    'nother bump
     
Thread Status:
Not open for further replies.

Share This Page