I want to give online players a seperate scoreboard.The title & score name will be the same but the score for each player will be different. I've made 4 scoreboards but I don't know how to assign them to 4 onlineplayers onPlayerJoinEvent.What should I do? P.S how would I save the players score after the server reloads? Code: public class Main extends JavaPlugin{ private Scoreboard board; private Objective o; private Score score; private Scoreboard board2; private Objective o2; private Score score2; private Scoreboard board3; private Objective o3; private Score score3; private Scoreboard board4; private Objective o4; private Score score4; public void onEnable(){ initialize(); } public void initialize(){ ScoreboardManager sm = Bukkit.getScoreboardManager(); board = sm.getNewScoreboard(); o = board.registerNewObjective("Test", "dummy"); o.setDisplayName(ChatColor.BLACK + "Scoreboardtest"); o.setDisplaySlot(DisplaySlot.SIDEBAR); score = o.getScore(ChatColor.BLACK + "Score"); board2 = sm.getNewScoreboard(); o2 = board2.registerNewObjective("Test2", "dummy"); o2.setDisplayName(ChatColor.BLACK + "Scoreboardtest"); o2.setDisplaySlot(DisplaySlot.SIDEBAR); score2 = o.getScore(ChatColor.BLACK + "Score"); board3 = sm.getNewScoreboard(); o3 = board3.registerNewObjective("Test3", "dummy"); o3.setDisplayName(ChatColor.BLACK + "Scoreboardtest"); o3.setDisplaySlot(DisplaySlot.SIDEBAR); score3 = o.getScore(ChatColor.BLACK + "Score"); o4 = board4.registerNewObjective("Test4", "dummy"); o4.setDisplayName(ChatColor.BLACK + "Scoreboardtest"); o4.setDisplaySlot(DisplaySlot.SIDEBAR); score4 = o.getScore(ChatColor.BLACK + "Score"); score.setScore(0); score2.setScore(0); score3.setScore(0); score4.setScore(0); } @EventHandler public void onPlayerJoin(PlayerJoinEvent e){ Player p = e.getPlayer(); } }
Here Save the scoreboard data to a .yml file with the Players UUID, then call it when the player joins.
I've created individual scoreboards but I want to make it so that the score stays the same after the server reloads.What should I do? P.s How would I get player2's score and change the score? Code: public static ScoreboardManager sm = Bukkit.getScoreboardManager(); public static Map<UUID, Scoreboard> scoreboards = new HashMap<UUID, Scoreboard>(); @EventHandler public void onPlayerJoin(PlayerJoinEvent e){ Player p = e.getPlayer(); setScoreboard(p); } public void setScoreboard(final Player p){ Scoreboard board = sm.getNewScoreboard(); Objective o = board.registerNewObjective("Test", "dummy"); UUID uuid = p.getUniqueId(); scoreboards.put(uuid, board); o.setDisplayName("Test"); o.setDisplaySlot(DisplaySlot.SIDEBAR); p.setScoreboard(scoreboards.get(uuid)); Score score = o.getScore(ChatColor.BLACK + "Score"); score.setScore(0); p.setScoreboard(scoreboards.get(uuid)); } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { Player player = (Player) sender; if(args.length == 1){ String argument = args[0]; String pscore = args[1]; Player player2 = Bukkit.getPlayer(argument); if(player2 != null && player2.isOnline()){ } }
Save the score to a config file, and save it. The data should stay there after a reload. Here, have a look under the "Scoreboards" bit
The scoreboard isn't displaying for players.Is something wrong? Code: public class Main extends JavaPlugin implements Listener{ public static ScoreboardManager sm = Bukkit.getScoreboardManager(); public static Map<UUID, Scoreboard> scoreboards = new HashMap<UUID, Scoreboard>(); public void onEnable(){ Bukkit.getServer().getPluginManager().registerEvents(this, this); } public void onDisable(){ } public void setScoreboard(final Player p){ Scoreboard board = sm.getNewScoreboard(); Objective o = board.registerNewObjective("Test", "dummy"); UUID uuid = p.getUniqueId(); scoreboards.put(uuid, board); o.setDisplayName("Test"); o.setDisplaySlot(DisplaySlot.SIDEBAR); p.setScoreboard(scoreboards.get(uuid)); Score score = o.getScore(ChatColor.BLACK + "Score"); score.setScore(0); p.setScoreboard(scoreboards.get(uuid)); } @EventHandler public void onPlayerJoin(PlayerJoinEvent e){ Player p = e.getPlayer(); setScoreboard(p); } }
@timtower It still doesn't work. Code: public class Main extends JavaPlugin implements Listener{ public static ScoreboardManager sm = Bukkit.getScoreboardManager(); public static Map<UUID, Scoreboard> scoreboards = new HashMap<UUID, Scoreboard>(); public void onEnable(){ Bukkit.getServer().getPluginManager().registerEvents(this, this); } public void onDisable(){ } public void setScoreboard(final Player p){ Scoreboard board = sm.getNewScoreboard(); Objective o = board.registerNewObjective("Test", "dummy"); UUID uuid = p.getUniqueId(); scoreboards.put(uuid, board); o.setDisplayName("Test"); o.setDisplaySlot(DisplaySlot.SIDEBAR); p.setScoreboard(scoreboards.get(uuid)); Score score = o.getScore(ChatColor.BLACK + "Score"); score.setScore(0); p.setScoreboard(scoreboards.get(uuid)); } @SuppressWarnings("deprecation") @EventHandler public void onPlayerJoin(PlayerJoinEvent e){ Player p = e.getPlayer(); Bukkit.getScheduler().scheduleAsyncDelayedTask(this, new Runnable(){ @Override public void run() { setScoreboard(p); } },20 * 1); } }
@timtower Changed it to a syncdelayedtask. Code: public class Main extends JavaPlugin implements Listener{ public static ScoreboardManager sm = Bukkit.getScoreboardManager(); public static Map<UUID, Scoreboard> scoreboards = new HashMap<UUID, Scoreboard>(); public void onEnable(){ Bukkit.getServer().getPluginManager().registerEvents(this, this); } public void onDisable(){ } public void setScoreboard(final Player p){ Scoreboard board = sm.getNewScoreboard(); Objective o = board.registerNewObjective("Test", "dummy"); UUID uuid = p.getUniqueId(); scoreboards.put(uuid, board); o.setDisplayName("Test"); o.setDisplaySlot(DisplaySlot.SIDEBAR); p.setScoreboard(scoreboards.get(uuid)); Score score = o.getScore(ChatColor.BLACK + "Score"); score.setScore(0); p.setScoreboard(scoreboards.get(uuid)); } @EventHandler public void onPlayerJoin(PlayerJoinEvent e){ Player p = e.getPlayer(); Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){ @Override public void run() { setScoreboard(p); } },20 * 1); } } Buy it still throws up.a npe ....