Updating A Scoreboards Objectives!

Discussion in 'Plugin Development' started by chasertw123, Mar 29, 2014.

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

    chasertw123

    OK so i am having a problem that when every I try and update my scoreboard if a number is different it will just add another line! I was wondering if anyone knows how I can fix this. Here is most of my main class. It includes all of the scoreboard related methods.
    Code:java
    1. package me.chasertw123.kitpvp;
    2.  
    3. import java.io.ByteArrayOutputStream;
    4. import java.io.DataOutputStream;
    5. import java.io.File;
    6. import java.io.FileInputStream;
    7. import java.io.FileOutputStream;
    8. import java.io.ObjectInputStream;
    9. import java.io.ObjectOutputStream;
    10. import java.util.ArrayList;
    11. import java.util.HashMap;
    12. import java.util.logging.Logger;
    13.  
    14. import me.chasertw123.kitpvp.kits.ArcherKit;
    15. import me.chasertw123.kitpvp.kits.SnowmanKit;
    16. import me.chasertw123.kitpvp.listeners.DoubleJumpListener;
    17. import me.chasertw123.kitpvp.listeners.PlayerListener;
    18. import me.chasertw123.kitpvp.listeners.SoupListener;
    19. import me.chasertw123.kitpvp.misc.Messages;
    20. import me.chasertw123.kitpvp.misc.Rankings;
    21. import me.chasertw123.kitpvp.misc.Repair;
    22. import me.chasertw123.kitpvp.misc.TeleportHandler;
    23. import me.chasertw123.kitpvp.misc.Soup;
    24.  
    25. import org.bukkit.Bukkit;
    26. import org.bukkit.ChatColor;
    27. import org.bukkit.command.Command;
    28. import org.bukkit.command.CommandSender;
    29. import org.bukkit.entity.Player;
    30. import org.bukkit.inventory.ItemStack;
    31. import org.bukkit.plugin.PluginManager;
    32. import org.bukkit.plugin.java.JavaPlugin;
    33. import org.bukkit.scoreboard.DisplaySlot;
    34. import org.bukkit.scoreboard.Objective;
    35. import org.bukkit.scoreboard.Scoreboard;
    36. import org.bukkit.scoreboard.ScoreboardManager;
    37.  
    38. public class KitPvP extends JavaPlugin {
    39.  
    40. /** Has Kit Checker **/
    41. public static ArrayList<String> haskit = new ArrayList<String>();
    42.  
    43. /** Repair/Refill Array Lists **/
    44. public static ArrayList<String> refill = new ArrayList<String>();
    45. public static ArrayList<String> repair = new ArrayList<String>();
    46.  
    47. /** Free Player Kit Array Lists **/
    48. public static ArrayList<String> barbarian = new ArrayList<String>();
    49. public static ArrayList<String> pyro = new ArrayList<String>();
    50. public static ArrayList<String> archer = new ArrayList<String>();
    51. public static ArrayList<String> snowman = new ArrayList<String>();
    52. public static ArrayList<String> ninja = new ArrayList<String>();
    53.  
    54. /** Premium Player Kit Array List **/
    55. public static ArrayList<String> dragon = new ArrayList<String>();
    56. public static ArrayList<String> irongolem = new ArrayList<String>();
    57.  
    58. /** Inventory Saver HashMaps **/
    59. public static HashMap<String, ItemStack[]> invsave = new HashMap<String, ItemStack[]>();
    60. public static HashMap<String, ItemStack[]> armorsave = new HashMap<String, ItemStack[]>();
    61.  
    62. /** Ranking System HashMap **/
    63. public static HashMap<String, Integer> scores;
    64. public static HashMap<String, Integer> kills;
    65. public static HashMap<String, Integer> deaths;
    66. public static HashMap<String, Integer> money;
    67.  
    68. public static KitPvP plugin;
    69.  
    70. Repair rep;
    71. Soup RefillSoup;
    72. static ArcherKit ArcherSpecial;
    73. static SnowmanKit SnowmanSpecial;
    74.  
    75. double kdr = 0.0;
    76.  
    77. public ScoreboardManager manager;
    78. public Scoreboard board;
    79. public Scoreboard reset;
    80. public Objective resetobj;
    81. public Objective obj;
    82.  
    83. Logger logger = Logger.getLogger("Minecraft");
    84.  
    85. /** Enabled **/
    86. @SuppressWarnings("unchecked")
    87. public void onEnable() {
    88. rep = new Repair(this);
    89. RefillSoup = new Soup(this);
    90. ArcherSpecial = new ArcherKit(this);
    91. SnowmanSpecial = new SnowmanKit(this);
    92.  
    93. File dir = getDataFolder();
    94. if (!dir.exists())
    95. if(!dir.mkdir())
    96. logger.severe("Could not create directory for plugin: " + getDescription().getName());
    97.  
    98. scores = (HashMap<String, Integer>) load(new File(getDataFolder(), "scores.dat"));
    99. kills = (HashMap<String, Integer>) load(new File(getDataFolder(), "kills.dat"));
    100. deaths = (HashMap<String, Integer>) load(new File(getDataFolder(), "deaths.dat"));
    101. money = (HashMap<String, Integer>) load(new File(getDataFolder(), "money.dat"));
    102. if (scores == null) scores = new HashMap<String, Integer>();
    103. if (kills == null) kills = new HashMap<String, Integer>();
    104. if (deaths == null) deaths = new HashMap<String, Integer>();
    105. if (money == null) money = new HashMap<String, Integer>();
    106.  
    107. getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
    108. this.getConfig().options().copyDefaults(true);
    109. this.saveConfig();
    110. registerEvents();
    111.  
    112. manager = Bukkit.getServer().getScoreboardManager();
    113. board = manager.getNewScoreboard();
    114. reset = manager.getNewScoreboard();
    115. obj = board.registerNewObjective("Test", "dummy");
    116. resetobj = reset.registerNewObjective("Reset", "dummy");
    117.  
    118. logger.info("[CrownPvP] has been enabled!");
    119. }
    120.  
    121. /** Disable **/
    122. public void onDisable() {
    123. save(scores, new File(getDataFolder(), "scores.dat"));
    124. save(kills, new File(getDataFolder(), "kills.dat"));
    125. save(deaths, new File(getDataFolder(), "deaths.dat"));
    126. save(money, new File(getDataFolder(), "money.dat"));
    127. logger.info("[CrownPvP] has been disabled!");
    128. }
    129.  
    130. /** Event Register **/
    131. public void registerEvents() {
    132. PluginManager pm = this.getServer().getPluginManager();
    133. pm.registerEvents(new KitSelector(this), this);
    134. pm.registerEvents(new Special(this), this);
    135. pm.registerEvents(new PlayerListener(this), this);
    136. pm.registerEvents(new DoubleJumpListener(this), this);
    137. pm.registerEvents(new SoupListener(this), this);
    138. pm.registerEvents(new Rankings(this), this);
    139. }
    140.  
    141. /** Save Objects **/
    142. public void save(Object o, File f) {
    143. try {
    144. if (!f.exists())
    145. f.createNewFile();
    146.  
    147. oos.writeObject(o);
    148. oos.flush();
    149. oos.close();
    150. } catch (Exception e) {e.printStackTrace();}
    151. }
    152.  
    153. /** Load Objects **/
    154. public Object load(File f) {
    155. try {
    156. Object result = ois.readObject();
    157. ois.close();
    158. return result;
    159. } catch (Exception e) {return null;}
    160. }
    161.  
    162. /** Argument To Integer **/
    163. public static boolean isInt(String s) {
    164. try {
    165. Integer.parseInt(s);
    166. } catch (NumberFormatException nfe) {
    167. return false;
    168. }
    169. return true;
    170. }
    171.  
    172. /** Send To Hub **/
    173. public void sendToServer(Player p, String ts) {
    174.  
    175. try {
    176. out.writeUTF("Connect");
    177. out.writeUTF(ts);
    178. } catch (Exception e) {e.printStackTrace();}
    179. p.sendPluginMessage(this, "BungeeCord", b.toByteArray());
    180. }
    181.  
    182. /** Update Scoreboard **/
    183. // Fix the updating numbers //
    184. public void update(Objective obj, Player p) {
    185.  
    186. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    187. obj.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "Your Stats");
    188.  
    189. if (!(kills.containsKey(p.getName()) && deaths.containsKey(p.getName()))) return;
    190.  
    191. double dd = deaths.get(p.getName());
    192. double dk = kills.get(p.getName());
    193.  
    194. try {kdr = dk / dd;} catch (ArithmeticException e) {kdr = 0.0;}
    195.  
    196. int k = kills.get(p.getName());
    197. int d = deaths.get(p.getName());
    198. int c = money.get(p.getName());
    199.  
    200. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:")).setScore(10);
    201. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + k + " ")).setScore(9);
    202. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + " ")).setScore(8);
    203.  
    204. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Deaths:")).setScore(7);
    205. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + d)).setScore(6);
    206. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + " ")).setScore(5);
    207.  
    208. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "KDR:")).setScore(4);
    209. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + kdr)).setScore(3);
    210. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + " ")).setScore(2);
    211.  
    212. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Coins:")).setScore(1);
    213. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + c + " ")).setScore(0);
    214.  
    215. p.setScoreboard(board);
    216. }


    Thanks for reading!
     
  2. Offline

    tissin

    Remove the old line first.
     
  3. Offline

    chasertw123

    tissin
    Can you elaborate on how to do this. Sorry this is my first time working with scoreboards! :D

    Also I am having a problem were if the players kdr is a decimal they will immediately crash. Does anyone know how to fix this?

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

    tommyhoogstra

  5. Offline

    chasertw123

    tommyhoogstra
    Ok I fixed that but I still need to know how to reset the scoreboard completely.

    Bump! :D
     
Thread Status:
Not open for further replies.

Share This Page