Per Player Scoreboard

Discussion in 'Plugin Development' started by Woef2001, Feb 10, 2014.

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

    Woef2001

    for my plugin i tried to make a scoreboard for each player like Mineplex and i
    wanted to save the scores into a file.
    i've tried everything: searched forums and watched lots of tutorials but nothing worked...
    my code is now just a mess.
     
  2. Offline

    Gater12

  3. Offline

    Woef2001

    Code:java
    1. package me.woef2001.project001.scoreboard;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import me.woef2001.project001.Main;
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.OfflinePlayer;
    10. import org.bukkit.entity.Entity;
    11. import org.bukkit.entity.EntityType;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.entity.Projectile;
    14. import org.bukkit.event.EventHandler;
    15. import org.bukkit.event.Listener;
    16. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    17. import org.bukkit.event.entity.EntityDamageEvent;
    18. import org.bukkit.event.entity.PlayerDeathEvent;
    19. import org.bukkit.event.player.PlayerJoinEvent;
    20. import org.bukkit.event.player.PlayerQuitEvent;
    21. import org.bukkit.scoreboard.Objective;
    22. import org.bukkit.scoreboard.Score;
    23. import org.bukkit.scoreboard.Scoreboard;
    24. import org.bukkit.scoreboard.ScoreboardManager;
    25.  
    26. public class PluginScoreboard extends Main implements Listener{
    27.  
    28. private int Kills = 0;
    29. private int Deaths = 0;
    30. private int Streak = 0;
    31. private int Points = 0;
    32.  
    33. int onlineplayers = 0;
    34.  
    35. private Score sKills;
    36. private Score sDeaths;
    37. private Score sStreak;
    38. private Score sPoints;
    39.  
    40. private String displayname = ChatColor.GOLD + "Score: ";
    41.  
    42. //private Score s;
    43. private ScoreboardManager sbmanager = Bukkit.getScoreboardManager();
    44. private Scoreboard sb = sbmanager.getNewScoreboard();
    45. private Objective o = sb.registerNewObjective(killobj, "dummy");
    46. private double getBodyHeight(EntityType type){
    47. switch(type){
    48. case CREEPER:
    49. case ZOMBIE:
    50. case SKELETON:
    51. case PLAYER:
    52. case PIG_ZOMBIE:
    53. case VILLAGER:
    54. return 1.35d;
    55. default:
    56. return Float.POSITIVE_INFINITY;
    57. }
    58. }
    59.  
    60. public void setupScoreboard(Scoreboard sboard){
    61. sboard = Bukkit.getScoreboardManager().getNewScoreboard();
    62. sboard.registerNewObjective(ChatColor.GOLD + "Score", "dummy");
    63. }
    64. // Not Done!!
    65. /*public void setTheScoreboard(Player player){
    66.   o.setDisplayName(displayname);
    67.  
    68.  
    69.   for(String playerName : Bukkit.getOnlinePlayers()){
    70.   Player p = Bukkit.getPlayerExact(playerName);
    71.   p.setScoreboard(sb);
    72.   }
    73.   }*/
    74.  
    75.  
    76. @EventHandler
    77. public void onJoin(PlayerJoinEvent e){
    78.  
    79. onlineplayers++;
    80. int totalplayers = 0;
    81. int timesPlayed = 0;
    82. timesPlayed = (Integer)getConfig().get(e.getPlayer().getName() + ".Times Played", timesPlayed);
    83. totalplayers = (Integer)getConfig().get("Totak Unique Players" + ".Number");
    84.  
    85. if(getConfig().get(e.getPlayer().getName() + ".Times Played") == null){
    86. totalplayers++;
    87. timesPlayed++;
    88. getConfig().set("Total Unique Players" + ".Number", totalplayers);
    89. getConfig().set(e.getPlayer().getName() + ".Times Played", timesPlayed);
    90. }else{
    91. timesPlayed++;
    92. getConfig().set(e.getPlayer().getName() + ".Times Played", timesPlayed);
    93. }
    94. saveConfig();
    95.  
    96. /* Team Groen of Team Geel */
    97. int i = 0;
    98. if(i < Bukkit.getOnlinePlayers().length / 2){
    99. Team.addToTeam(TeamType.GREEN, e.getPlayer());
    100. i++;
    101. }else{
    102. Team.addToTeam(TeamType.YELLOW, e.getPlayer());
    103. }
    104.  
    105. setupScoreboard((Scoreboard)e.getPlayer());
    106. e.getPlayer().setScoreboard((Scoreboard)e.getPlayer());
    107.  
    108. }
    109.  
    110. @EventHandler
    111. public void onLeave(PlayerQuitEvent e){
    112. e.setQuitMessage(ChatColor.GOLD + "[...] " + ChatColor.AQUA + e.getPlayer().getName() + ChatColor.BLUE + " Left!");
    113. Team.removeFromTeam(e.getPlayer());
    114. onlineplayers--;
    115. if(Team.getGreenTeam().contains(e.getPlayer().getName())){
    116. Team.greenPlayers--;
    117. }else{
    118. Team.yellowPlayers--;
    119. }
    120. }
    121. @EventHandler
    122. public void onKill(PlayerDeathEvent e) {
    123.  
    124. Entity victim = e.getEntity();
    125. EntityType victimType = victim.getType();
    126.  
    127. EntityDamageEvent dc = e.getEntity().getLastDamageCause();
    128.  
    129. Projectile proj = (Projectile)((EntityDamageByEntityEvent)dc).getDamager();
    130.  
    131. double projY = proj.getLocation().getY();
    132. double victimY = victim.getLocation().getY();
    133. boolean headshot = projY - victimY > getBodyHeight(victimType);
    134.  
    135. String playerKill = ChatColor.GRAY + "Killed" + e.getEntity().getPlayer().getName() + ChatColor.AQUA + "[Streak: " + Streak + "]";
    136.  
    137. this.getConfig().set(e.getEntity().getPlayer().getName() + ".Scores" + ".Kills", Kills);
    138. this.getConfig().set(e.getEntity().getPlayer().getName() + ".Scores" + ".Deahts", Deaths);
    139. this.getConfig().set(e.getEntity().getPlayer().getName() + ".Scores" + ".Points", Points);
    140. this.getConfig().set(e.getEntity().getPlayer().getName() + ".Scores" + ".Streak", Streak);
    141.  
    142. Deaths = (Integer)getConfig().get(e.getEntity().getName() + ".Scores" + ".Deaths");
    143.  
    144.  
    145. // Only errors here because i've deleted stuff!
    146.  
    147. PlayerKills.put(Bukkit.getServer().getOfflinePlayer(killobj), sKills);
    148. getScoreboard().getObjective((String)e.getEntity().getPlayer().getKiller().getName()).getScore(Bukkit.getOfflinePlayer(killobj)).setScore(Kills);
    149.  
    150. if(PlayerDeaths.containsKey(Bukkit.getOfflinePlayer((String)e.getEntity().getName()))){
    151. Deaths++;
    152. sDeaths.setScore(Deaths);
    153. Streak = 0;
    154. }
    155. getScoreboard().getObjective((String)e.getEntity().getPlayer().getName()).getScore(Bukkit.getOfflinePlayer(deathobj)).setScore(Deaths);
    156.  
    157. getScoreboard().getObjective((String)e.getEntity().getPlayer().getName()).getScore(Bukkit.getOfflinePlayer(pointsobj)).setScore(Points);
    158. }
    159. }
    160.  


    it doesn't work anymore, so i'm gonna delete it and start over

    Gater12
    Do you know how to do this?
    can you help me?

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

    Gater12

    Woef2001
    I don't have an IDE on me at the moment. What I'm thinking might not work, and perhaps someone else online may help you. Otherwise, I might turn to this later (After I test my ideas...).
     
  5. I'm not sure at all how you want to set it out but I'm just giving you an example to work with, you won't get very far with having global variables for Scoreboards by the way.

    Code:
    public void setScoreboard(Player player) {
        Scoreboard scoreboard = player.getServer().getScoreboardManager().getNewScoreboard();
        Objective scoreboardObj = scoreboard.registerNewObjective("test", "dummy");
        scoreboardObj.setDisplaySlot(DisplaySlot.SIDE_BAR);
        scoreboardObj.setDisplayName(ChatColor.RED + "Scoreboard");
        player.setScoreboard(scoreboard);
    }
     
    public Scoreboard getScoreboard(Player player) {
        if (player.getScoreboard() == null) this.setScoreboard(player);
        return player.getScoreboard();
    }
     
    public void updateScoreboard(Player player, String property, int value) {
        Scoreboard pScoreboard = this.getScoreboard(player);
        pScoreboard.getObjective("test").getScore(Bukkit.getOfflinePlayer(property)).setScore(value);
        player.setScoreboard(pScoreboard);
    }
    
    Not sure if "setDisplayName" exists, might be setTitle or something.

    To set a colour to the "property" just use ChatColor class when using updateScoreboard method.
    E.g.
    Code:
    this.updateScoreboard(player, ChatColor.RED + "Swag", 69);
     
    gogobebe2 likes this.
Thread Status:
Not open for further replies.

Share This Page