Scoreboard Problems

Discussion in 'Plugin Development' started by LordVakar, Jun 3, 2014.

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

    LordVakar

    For some reason the scoreboard never shows up and scores aren't set or something :confused:
    Code:
    public class FFA extends JavaPlugin
    implements Listener
    {
    public static Plugin pl;
    public Scoreboard scoreboard;
    FileConfiguration config;
    public Map<String, Integer> killstreaks = new HashMap<String, Integer>();
     
    public void onEnable()
    {
    pl = this;
    config = pl.getConfig();
    registerCommands();
    registerEvents(this);
    getConfig().options().copyDefaults(true);
    saveDefaultConfig();
    saveConfig();
    }
     
    public void onDisable()
    {
    saveConfig();
    }
     
    public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) {
    for (Listener listener : listeners) {
    Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
    }
    }
     
    public void setupScoreboard(Player player) {
    ScoreboardManager manager = Bukkit.getScoreboardManager();
    Scoreboard board = manager.getNewScoreboard();
    Objective statsboard = board.registerNewObjective("Killstreaks", "dummy");
    statsboard.setDisplaySlot(DisplaySlot.SIDEBAR);
    statsboard.setDisplayName("Game");
    Score deaths = statsboard.getScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Deaths:"));
    Score kills = statsboard.getScore(Bukkit.getOfflinePlayer(ChatColor.GREEN + "Kills:"));
    Score killstreak = statsboard.getScore(Bukkit.getOfflinePlayer(ChatColor.GOLD + "Killstreaks:"));
    killstreak.setScore(killstreaks.get(player.getName()));
    kills.setScore(config.getInt("PlayerKills." + player.getName()));
    deaths.setScore(config.getInt("PlayerDeaths." + player.getName()));
    statsboard.setDisplaySlot(DisplaySlot.SIDEBAR);
    player.setScoreboard(board);
     
    if (!getConfig().contains("PlayerKills." + player.getName())){
    getConfig().set("PlayerKills." + player.getName(), 0);
    }
    else if(!getConfig().contains("PlayerDeaths." + player.getName())){
    getConfig().set("PlayerDeaths." + player.getName(), 0);
    }
    reloadConfig();
    }
    @EventHandler
    public void onPDE(PlayerDeathEvent event){
    Player victim = event.getEntity();
    Player killer = event.getEntity().getKiller();
    if (victim instanceof Player && killer instanceof Player) {
    if(config.get("PlayerKills." + killer.getName()) != null){
    config.set("PlayerKills." + killer.getName(), config.getInt("PlayerKills." + killer.getName()) + 1);
    this.saveConfig();
     
    }else{
    config.set("PlayerKills." + killer.getName(), 1);
    this.saveConfig();
    }
    if(config.get("PlayerDeaths." + victim.getName()) != null){
    config.set("PlayerDeaths." + victim.getName(), config.getInt("PlayerDeaths." + victim.getName()) + 1);
    this.saveConfig();
    }else{
    config.set("PlayerDeaths." + victim.getName(), 1);
    this.saveConfig();
    }
    if(!killstreaks.containsKey(killer.getName())) {
    killstreaks.put(killer.getName(), 0);
    }
    killstreaks.put(killer.getName(), killstreaks.get(killer.getName() +1));
    if(killstreaks.containsKey(victim.getName())) {
    victim.remove();
    }
    for(Player p : Bukkit.getOnlinePlayers()){
    setupScoreboard(victim);
    setupScoreboard(killer);
    }
    saveConfig();
    reloadConfig();
    }
    }
     
    @EventHandler
    public void SwapWorlds(PlayerChangedWorldEvent e){
    setupScoreboard(e.getPlayer());
    }
     
    @EventHandler
    public void Join(PlayerJoinEvent e) {
     
    setupScoreboard(e.getPlayer());
    }
     
  2. Offline

    fireblast709

    LordVakar Try swapping
    Code:java
    1. player.setScoreboard(board)
    and
    Code:java
    1. statsboard.setDisplaySlot(DisplaySlot.SIDEBAR)
    Also, don't use
    Code:java
    1. public static Plugin pl;
     
  3. Offline

    LordVakar

  4. Offline

    fireblast709

    LordVakar Just noticed your listener isn't registered.
    Code:java
    1. Bukkit.getPluginManager().registerListener(this, this);
     
  5. Offline

    LordVakar

    fireblast709
    I have a method that registers it for me but I guess I'll try adding that line in
    public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) { for (Listener listener : listeners) { Bukkit.getServer().getPluginManager().registerEvents(listener, plugin); } } EDIT: I think it's getServer().getPluginManager().registerEvents(this, this); not registerListener
     
  6. Offline

    fireblast709

    LordVakar yea the issue is, you call that method with just 'this'. Since you don't pass anything after that, the Listener...listeners equals Listener[0] (an empty Listener array). This will never do any of the code in the for loop.
     
  7. Offline

    LordVakar

    fireblast709
    Okay, the config started working and logging player kills and deaths but the scoreboard still doesn't show up
     
  8. Offline

    LordVakar

  9. Offline

    fireblast709

    Have you tried debugging? Also use get score(String) instead of getScore(OfflinePlayer)
     
Thread Status:
Not open for further replies.

Share This Page