Setting seperate scoreboards

Discussion in 'Plugin Development' started by S431, Aug 19, 2017.

Thread Status:
Not open for further replies.
  1. Code:
    ublic 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);
           
         }
    }
    I was trying to set seperate scoreboards for players but the onPlayerJoinEvent sends a NullPointerException...
     
  2. Offline

    timtower Administrator Administrator Moderator

    @S431 Full error log please.
     
  3. @timtower
    [Scoreboard] Task #2 for Scoreboard v1.0.0 generated an exception
    java.lang.NullPointerException
    at com.Code.Scoreboard.Main.setScoreboard(Main.java:32) ~[?:?]
    at com.Code.Scoreboard.Main$1.run(Main.java:50) ~[?:?]
    at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.craftbukkit.v1_7_R4.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:641) [spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289) [spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [spigot.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]

    full error log
     
  4. Offline

    timtower Administrator Administrator Moderator

    @S431 Please remove the public static stuff, change it to private and initialize them in the onEnable
     
  5. @timtower
    I changed the public static stuff to private.
    How would I initalize the variable on the onEnable method ?
    Code:
    public class Main extends JavaPlugin implements Listener{
        private ScoreboardManager sm = Bukkit.getScoreboardManager();
         private 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);
         }
        @EventHandler
         public void onPlayerJoin(PlayerJoinEvent e){
                Player p = e.getPlayer();
                Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
    
                    @Override
                    public void run() {
                    setScoreboard(p);
                      
                    }
              
                },20 * 1);
              
         }
    }
     
  6. Offline

    timtower Administrator Administrator Moderator

    @S431 You move everything after the = to inside the onEnable.
     
  7. @timtower Like this?
    Code:
    public class Main extends JavaPlugin implements Listener{
        private ScoreboardManager sm;
         private Map<UUID, Scoreboard> scoreboards;
        public void onEnable(){
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            sm = Bukkit.getScoreboardManager();
            scoreboards = new HashMap<UUID,Scoreboard>();
        }
        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);
         }
        @EventHandler
         public void onPlayerJoin(PlayerJoinEvent e){
                Player p = e.getPlayer();
                Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
    
                    @Override
                    public void run() {
                    setScoreboard(p);
                       
                    }
               
                },20 * 1);
               
         }
    }
    
     
  8. Offline

    timtower Administrator Administrator Moderator

    @S431 Only the part that sets the value, not the declaration.
     
  9. edited the code
    @timtower It got rid of the npe but no scoreboard apperars
     
    Last edited: Aug 19, 2017
  10. Offline

    timtower Administrator Administrator Moderator

    @S431 You never set the scoreboard for the player.
     
  11. @timtower I'very set the scoreboard for the player on the player join using the setScoreboard ()method.
     
  12. Offline

    timtower Administrator Administrator Moderator

    @S431 But why isn't that the last call in the method?
    And try to use a score of 20 or something like that.
     
Thread Status:
Not open for further replies.

Share This Page