Scoreboard glitch?

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

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

    chasertw123

    Ok so I am having this problem with my scoreboards. Everything is starting up everything is working how it should but for some reason the scoreboard is not displaying how it should.

    The scorboard shows up like:
    Your Stats
    Kills: 10​
    Deaths: 7​
    0 6​
    KDR: 4​
    0.0 3​
    -=-=-=-=- 2​
    Coins: 1​
    50 0​

    There show be 10 total lines but for some reason 9, 8 and 5 aren't showing up! Here is my main class.

    Code:java
    1. package me.chasertw123.kitpvp;
    2.  
    3. import java.io.File;
    4. import java.io.FileInputStream;
    5. import java.io.FileOutputStream;
    6. import java.i:confused:bjectInputStream;
    7. import java.i:confused:bjectOutputStream;
    8. import java.util.ArrayList;
    9. import java.util.HashMap;
    10. import java.util.logging.Logger;
    11.  
    12. import me.chasertw123.kitpvp.listeners.DoubleJumpListener;
    13. import me.chasertw123.kitpvp.listeners.PlayerListener;
    14. import me.chasertw123.kitpvp.listeners.SoupListener;
    15. import me.chasertw123.kitpvp.misc.Messages;
    16. import me.chasertw123.kitpvp.misc.Rankings;
    17. import me.chasertw123.kitpvp.misc.Repair;
    18. import me.chasertw123.kitpvp.misc.Respawn;
    19. import me.chasertw123.kitpvp.misc.Soup;
    20.  
    21. import org.bukkit.Bukkit;
    22. import org.bukkit.ChatColor;
    23. import org.bukkit.command.Command;
    24. import org.bukkit.command.CommandSender;
    25. import org.bukkit.entity.Player;
    26. import org.bukkit.inventory.ItemStack;
    27. import org.bukkit.plugin.PluginManager;
    28. import org.bukkit.plugin.java.JavaPlugin;
    29. import org.bukkit.potion.PotionEffect;
    30. import org.bukkit.scoreboard.DisplaySlot;
    31. import org.bukkit.scoreboard.Objective;
    32. import org.bukkit.scoreboard.Scoreboard;
    33. import org.bukkit.scoreboard.ScoreboardManager;
    34.  
    35. public class KitPvP extends JavaPlugin {
    36.  
    37. /** Has Kit Checker **/
    38. public static ArrayList<String> haskit = new ArrayList<String>();
    39.  
    40. /** Repair/Refill Array Lists **/
    41. public static ArrayList<String> refill = new ArrayList<String>();
    42. public static ArrayList<String> repair = new ArrayList<String>();
    43.  
    44. /** Free Player Kit Array Lists **/
    45. public static ArrayList<String> barbarian = new ArrayList<String>();
    46. public static ArrayList<String> pyro = new ArrayList<String>();
    47. public static ArrayList<String> archer = new ArrayList<String>();
    48. public static ArrayList<String> snowman = new ArrayList<String>();
    49. public static ArrayList<String> ninja = new ArrayList<String>();
    50.  
    51. /** Premium Player Kit Array List **/
    52. public static ArrayList<String> dragon = new ArrayList<String>();
    53. public static ArrayList<String> irongolem = new ArrayList<String>();
    54.  
    55. /** Inventory Saver HashMaps **/
    56. public static HashMap<String, ItemStack[]> invsave = new HashMap<String, ItemStack[]>();
    57. public static HashMap<String, ItemStack[]> armorsave = new HashMap<String, ItemStack[]>();
    58.  
    59. /** Ranking System HashMap **/
    60. public static HashMap<String, Integer> scores;
    61. public static HashMap<String, Integer> kills;
    62. public static HashMap<String, Integer> deaths;
    63. public static HashMap<String, Integer> money;
    64.  
    65. public static KitPvP plugin;
    66.  
    67. Repair rep;
    68. Soup RefillSoup;
    69.  
    70. double kdr = 0.0;
    71.  
    72. public ScoreboardManager manager;
    73. public Scoreboard board;
    74. public Objective obj;
    75.  
    76. Logger logger = Logger.getLogger("Minecraft");
    77.  
    78. /** Enabled **/
    79. @SuppressWarnings("unchecked")
    80. public void onEnable() {
    81. rep = new Repair(this);
    82. RefillSoup = new Soup(this);
    83.  
    84. File dir = getDataFolder();
    85. if (!dir.exists())
    86. if(!dir.mkdir())
    87. logger.severe("Could not create directory for plugin: " + getDescription().getName());
    88.  
    89. scores = (HashMap<String, Integer>) load(new File(getDataFolder(), "scores.dat"));
    90. kills = (HashMap<String, Integer>) load(new File(getDataFolder(), "kills.dat"));
    91. deaths = (HashMap<String, Integer>) load(new File(getDataFolder(), "deaths.dat"));
    92. money = (HashMap<String, Integer>) load(new File(getDataFolder(), "money.dat"));
    93. if (scores == null) scores = new HashMap<String, Integer>();
    94. if (kills == null) kills = new HashMap<String, Integer>();
    95. if (deaths == null) deaths = new HashMap<String, Integer>();
    96. if (money == null) money = new HashMap<String, Integer>();
    97.  
    98. this.getConfig().options().copyDefaults(true);
    99. this.saveConfig();
    100. registerEvents();
    101.  
    102. manager = Bukkit.getServer().getScoreboardManager();
    103. board = manager.getNewScoreboard();
    104. obj = board.registerNewObjective("Test", "dummy");
    105.  
    106. logger.info("[CrownPvP] has been enabled!");
    107. }
    108.  
    109. /** Disable **/
    110. public void onDisable() {
    111. save(scores, new File(getDataFolder(), "scores.dat"));
    112. save(kills, new File(getDataFolder(), "kills.dat"));
    113. save(deaths, new File(getDataFolder(), "deaths.dat"));
    114. save(money, new File(getDataFolder(), "money.dat"));
    115. logger.info("[CrownPvP] has been disabled!");
    116. }
    117.  
    118. /** Event Register **/
    119. public void registerEvents() {
    120. PluginManager pm = this.getServer().getPluginManager();
    121. pm.registerEvents(new KitSelector(this), this);
    122. pm.registerEvents(new Special(this), this);
    123. pm.registerEvents(new PlayerListener(this), this);
    124. pm.registerEvents(new DoubleJumpListener(this), this);
    125. pm.registerEvents(new SoupListener(this), this);
    126. pm.registerEvents(new Respawn(this), this);
    127. pm.registerEvents(new Rankings(this), this);
    128. }
    129.  
    130. /** Save Objects **/
    131. public void save(Object o, File f) {
    132. try {
    133. if (!f.exists())
    134. f.createNewFile();
    135.  
    136. oos.writeObject(o);
    137. oos.flush();
    138. oos.close();
    139.  
    140. } catch (Exception e) {e.printStackTrace();}
    141. }
    142.  
    143. /** Load Objects **/
    144. public Object load(File f) {
    145. try {
    146. Object result = ois.readObject();
    147. ois.close();
    148. return result;
    149. } catch (Exception e) {return null;}
    150. }
    151.  
    152. /** Argument To Integer **/
    153. public static boolean isInt(String s) {
    154. try {
    155. Integer.parseInt(s);
    156. } catch (NumberFormatException nfe) {
    157. return false;
    158. }
    159. return true;
    160. }
    161.  
    162. /** Update Scoreboard **/
    163. public void update(Objective obj, Player p) {
    164. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
    165. obj.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "Your Stats");
    166.  
    167. try {kdr = kills.get(p.getName())/deaths.get(p.getName());} catch (ArithmeticException e) {kdr = 0;}
    168.  
    169. int k = kills.get(p.getName());
    170. int d = deaths.get(p.getName());
    171. int c = money.get(p.getName());
    172.  
    173. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:")).setScore(10);
    174. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + k)).setScore(9);
    175. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "-=-=-=-=-=-=-=-")).setScore(8);
    176.  
    177. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Deaths:")).setScore(7);
    178. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + d)).setScore(6);
    179. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "-=-=-=-=-=-=-=-")).setScore(5);
    180.  
    181. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "KDR:")).setScore(4);
    182. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + kdr)).setScore(3);
    183. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "-=-=-=-=-=-=-=-")).setScore(2);
    184.  
    185. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Coins:")).setScore(1);
    186. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + c)).setScore(0);
    187.  
    188. p.setScoreboard(board);
    189. }
    190.  
    191. /** Commands **/
    192. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    193. if (!(sender instanceof Player))
    194. return true;
    195.  
    196. Player p = (Player) sender;
    197.  
    198. if (cmd.getName().equalsIgnoreCase("Selectors")) {
    199. if (p.hasPermission("crownpvp.selection")) {
    200. p.getInventory().clear();
    201. p.getInventory().setArmorContents(null);
    202. for (PotionEffect effect : p.getActivePotionEffects()) { p.removePotionEffect(effect.getType()); }
    203. p.getInventory().addItem(SelectorItemStacks.Selector());
    204. p.getInventory().addItem(SelectorItemStacks.DonatorSelector());
    205. } else Messages.noPermission(p);
    206. } else if (cmd.getName().equalsIgnoreCase("Repair")) {
    207. if (p.hasPermission("crownpvp.repair")) {
    208. rep.Rep(p);
    209. } else Messages.noPermission(p);
    210. } else if (cmd.getName().equalsIgnoreCase("Refill")) {
    211. if (p.hasPermission("crownpvp.refill")) {
    212. Soup.RefillSoup(p);
    213. } else Messages.noPermission(p);
    214. } else if (cmd.getName().equalsIgnoreCase("Reset")) {
    215. if (p.hasPermission("crownpvp.reset")) {
    216. if (args.length == 1) {
    217. if (p.hasPermission("crownpvp.reset.others")) {
    218. Player target = Bukkit.getPlayerExact(args[0]);
    219. if (target != null) {
    220. Respawn.reset(target);
    221. Messages.sendMessage(p, ChatColor.GREEN + "You reset the kit status of "
    222. + ChatColor.GOLD + target.getName() + ChatColor.GREEN + "!");
    223. Messages.sendMessage(target, ChatColor.GOLD + p.getName() + ChatColor.GREEN
    224. + " reset your kit status!");
    225. } else Messages.notFound(p);
    226. } else Messages.noPermission(p);
    227. } else if (args.length == 0) {
    228. Respawn.reset(p);
    229. Messages.sendMessage(p, ChatColor.GREEN + "You reset your kit status!");
    230. }
    231. } else Messages.noPermission(p);
    232. } else if (cmd.getName().equalsIgnoreCase("SetRespawn")) {
    233. if (p.hasPermission("crownpvp.setrespawn")) {
    234. Respawn.setRespawn(p);
    235. } else Messages.noPermission(p);
    236. } else if (cmd.getName().equalsIgnoreCase("Unique")) {
    237. if (p.hasPermission("crownpvp.unique")) {
    238. int unique = scores.size();
    239. Messages.sendMessage(p, ChatColor.GREEN + "There have been a total of "
    240. + ChatColor.GOLD + unique + ChatColor.GREEN + " unique players!");
    241. } else Messages.noPermission(p);
    242. } else if (cmd.getName().equalsIgnoreCase("Stats")) {
    243. if (args.length == 0) {
    244. if (p.hasPermission("crownpvp.stats")) {
    245. try {kdr = kills.get(p.getName())/deaths.get(p.getName());} catch (ArithmeticException e) {kdr = 0;}
    246. p.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + p.getName() + "'s Stats:");
    247. p.sendMessage(ChatColor.GREEN + "Kills: " + ChatColor.WHITE + kills.get(p.getName()));
    248. p.sendMessage(ChatColor.GREEN + "Deaths: " + ChatColor.WHITE + deaths.get(p.getName()));
    249. p.sendMessage(ChatColor.GREEN + "KDR: " + ChatColor.WHITE + kdr);
    250. p.sendMessage(ChatColor.GREEN + "Coins: " + ChatColor.WHITE + money.get(p.getName()));
    251. } else Messages.noPermission(p);
    252. } else if (args.length == 1) {
    253. if (p.hasPermission("crownpvp.stats.others")) {
    254. Player target = Bukkit.getPlayerExact(args[0]);
    255. if (target != null) {
    256. try {kdr = kills.get(target.getName())/deaths.get(target.getName());} catch (ArithmeticException e) {kdr = 0;}
    257. p.sendMessage(ChatColor.GOLD + "" + ChatColor.BOLD + target.getName() + "'s Stats:");
    258. p.sendMessage(ChatColor.GREEN + "Kills: " + ChatColor.WHITE + kills.get(target.getName()));
    259. p.sendMessage(ChatColor.GREEN + "Deaths: " + ChatColor.WHITE + deaths.get(target.getName()));
    260. p.sendMessage(ChatColor.GREEN + "KDR: " + ChatColor.WHITE + kdr);
    261. p.sendMessage(ChatColor.GREEN + "Coins: " + ChatColor.WHITE + money.get(target.getName()));
    262. } else Messages.notFound(p);
    263. } else Messages.noPermission(p);
    264. }
    265. } else if (cmd.getName().equalsIgnoreCase("setChestPoint")) {
    266. if (p.hasPermission("crownpvp.setchestpoints")) {
    267. if (args.length == 0) {
    268. p.sendMessage(ChatColor.RED + "Improper Usage! Try /setchestpoint [1-5]");
    269. } else if (args.length == 1) {
    270. if (isInt(args[0])) {
    271. int num = Integer.parseInt(args[0]);
    272. if (!(num < 5 || num > 1) ) {
    273. getConfig().set("ChestPoints." + num + ".X", p.getLocation().getBlockX());
    274. getConfig().set("ChestPoints." + num + ".Y", p.getLocation().getBlockY());
    275. getConfig().set("ChestPoints." + num + ".Z", p.getLocation().getBlockZ());
    276. } else p.sendMessage(ChatColor.RED + "Improper Usage! Try /setchestpoint [1-5]");
    277. } else p.sendMessage(ChatColor.RED + "Improper Usage! Try /setchestpoint [1-5]");
    278. }
    279. } else Messages.noPermission(p);
    280. }
    281. return false;
    282. }
    283. }


    Just to clarify I am not getting errors on start up. Thanks!
     
  2. Offline

    Serilum

    I haven't worked with scoreboards before, but it could be the problem that you are trying to do too much at the same time. Can you try to put in a delay for let's say half of the scores?
     
  3. Offline

    chasertw123

    The problem is I am set the same object to a different score. By that I mean; if a player has 0 kills and 0 deaths it will only show one of the zeros. I am working on a way around this.
     
  4. a unique name can only be 1 time inside the scoreboard, if you try to set the score for that name again it will overwrite the old value, you may solve it by putting unique chatcolors at the end of the names, so they look the same, but aren't
     
  5. Offline

    chasertw123

    ferrybig
    Do you think me just doing + " " with different amounts of spaces will solve that?
     
  6. Offline

    Konkz

    Code:java
    1. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:")).setScore(10);
    2. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + k)).setScore(9);
    3. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "-=-=-=-=-=-=-=-")).setScore(8);
    4.  
    5. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Deaths:")).setScore(7);
    6. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + d)).setScore(6);
    7. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "-=-=-=-=-=-=-=- ")).setScore(5);
    8.  
    9. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "KDR:")).setScore(4);
    10. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + kdr)).setScore(3);
    11. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "-=-=-=-=-=-=-=- ")).setScore(2);
    12.  
    13. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Coins:")).setScore(1);
    14. obj.getScore(Bukkit.getOfflinePlayer(ChatColor.WHITE + "" + c)).setScore(0);


    Each entry on scoreboard has to be unique, a space should be sufficient.
     
Thread Status:
Not open for further replies.

Share This Page