Some Scoreboard trouble

Discussion in 'Plugin Development' started by Dippoakabob, Jul 30, 2013.

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

    Dippoakabob

    I've been working on a server for quite some time now, and I have gotten everything down, accept for my custom plugin's Scoreboard. I have a scoreboard that's working, but it puts the CPU under so much stress that the server can barely run. The CPU usage, with 3 people on goes from 1% to ~30%. I've found that the issue is with the scoreboard. This is the code that I have updating every 3 seconds that appears to be causing the lag:
    Code:java
    1. package com.melonmc.kitpvp;
    2. import java.util.HashMap;
    3.  
    4. import org.bukkit.Bukkit;
    5. import org.bukkit.ChatColor;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.player.PlayerQuitEvent;
    10. import org.bukkit.scoreboard.DisplaySlot;
    11. import org.bukkit.scoreboard.Objective;
    12. import org.bukkit.scoreboard.Score;
    13. import org.bukkit.scoreboard.Scoreboard;
    14. import org.bukkit.scoreboard.ScoreboardManager;
    15.  
    16. import com.melonmc.kitpvp.Main;
    17.  
    18.  
    19. public class BoardManagement implements Listener{
    20.  
    21. Main plugin;
    22.  
    23. public BoardManagement(Main main){
    24. plugin = main;
    25. }
    26.  
    27. ScoreboardManager manager;
    28.  
    29. HashMap<String, Scoreboard> playerScoreboards = new HashMap<String, Scoreboard>();
    30.  
    31. @EventHandler
    32. public void onQuit(PlayerQuitEvent event){
    33. Player player = event.getPlayer();
    34. if(playerScoreboards.containsKey(player.getName())){
    35. playerScoreboards.remove(player.getName());
    36. }
    37. }
    38.  
    39. public void updateScores(){
    40. for(Player player:Bukkit.getOnlinePlayers()){
    41. if(playerScoreboards.containsKey(player.getName())){
    42. Scoreboard board = playerScoreboards.get(player.getName());
    43. Objective objective = board.getObjective(DisplaySlot.SIDEBAR);
    44.  
    45. Score scoreKills = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:"));
    46. Score scoreDeaths = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Deaths:"));
    47. Score scoreCredits = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Credits:"));
    48. Score scoreWorth = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Worth:"));
    49. Score scoreKS = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kill Streak:"));
    50.  
    51. scoreKS.setScore(plugin.cm.KS.get(player) != null ? plugin.cm.KS.get(player):0);
    52. scoreDeaths.setScore((int)plugin.cm.getDeaths(player));
    53. scoreKills.setScore((int)plugin.cm.getKills(player));
    54. scoreCredits.setScore((int)plugin.cm.getCredits(player));
    55. scoreWorth.setScore((int)plugin.cm.getWorth(player));
    56. }else{
    57. manager = Bukkit.getScoreboardManager();
    58. Scoreboard board = manager.getNewScoreboard();
    59. Objective objective = board.registerNewObjective("stats", "dummy");
    60.  
    61. board.clearSlot(DisplaySlot.SIDEBAR);
    62. objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    63. objective.setDisplayName(ChatColor.GOLD + player.getName() + "");
    64.  
    65. Score scoreKills = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:"));
    66. Score scoreDeaths = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Deaths:"));
    67. Score scoreCredits = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Credits:"));
    68. Score scoreWorth = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Worth:"));
    69. Score scoreKS = objective.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kill Streak:"));
    70.  
    71. scoreKS.setScore(plugin.cm.KS.get(player) != null ? plugin.cm.KS.get(player):0);
    72. scoreDeaths.setScore((int)plugin.cm.getDeaths(player));
    73. scoreKills.setScore((int)plugin.cm.getKills(player));
    74. scoreCredits.setScore((int)plugin.cm.getCredits(player));
    75. scoreWorth.setScore((int)plugin.cm.getWorth(player));
    76.  
    77. player.setScoreboard(board);
    78. playerScoreboards.put(player.getName(), board);
    79. }
    80. }
    81. }
    82.  
    83. }

    If you can help me in any way or if you need any more info please let me know. :)
     
  2. Offline

    clienthax

    Why are you updating every 3 seconds , why not just update on a entity death?.

    You're looping through all players that have ever been on your server, and every 3 seconds that is unneeded
     
  3. Offline

    Dippoakabob

    I'll give it a shot, thanks.
     
Thread Status:
Not open for further replies.

Share This Page