Scope issue with scoreboard teams?

Discussion in 'Plugin Development' started by ThePandaPlayer, Aug 21, 2017.

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

    ThePandaPlayer

    Hello all! I am having trouble with a scoreboard. Here is the code:
    Code:
        public void onEnable() {
           
            this.getServer().getPluginManager().registerEvents(this,this);
            Team ownerrank = rank.registerNewTeam("owner");
            ownerrank.setPrefix(ChatColor.RED+"Owner"+ChatColor.WHITE);
            Team platformadmin = rank.registerNewTeam("platformadmin");
            platformadmin.setPrefix(ChatColor.RED+"Platform Admin"+ChatColor.WHITE);
            Team adminrank = rank.registerNewTeam("admin");
            adminrank.setPrefix(ChatColor.RED+"Admin"+ChatColor.WHITE);
            Team devrank = rank.registerNewTeam("dev");
            devrank.setPrefix(ChatColor.YELLOW+"Dev");
            Team srmodrank = rank.registerNewTeam("srmod");
            srmodrank.setPrefix(ChatColor.DARK_PURPLE+"Sr.Mod"+ChatColor.WHITE);
            Team modrank = rank.registerNewTeam("mod");
            modrank.setPrefix(ChatColor.DARK_PURPLE+"Mod"+ChatColor.WHITE);
            Team deluxerank = rank.registerNewTeam("deluxe");
            deluxerank.setPrefix(ChatColor.GOLD+"✪"+ChatColor.YELLOW);
           
           
           
           
           
        }
    public void updateRanks() {
      for(Player p : Bukkit.getOnlinePlayers()) {
        if(p.hasPermission(owner) {
           ownerrank.addPlayer(p);
    This is where the problem lies: ownerrank.addPlayer(p); Eclipse gives me an error saying "ownerrank cannot be resolved" is this a scope issue?
     
  2. Offline

    timtower Administrator Administrator Moderator

  3. Offline

    ThePandaPlayer

    @timtower
    Okay, how would I fix this. I want the ranks to be updated every time a player joins and leaves.
     
  4. Offline

    timtower Administrator Administrator Moderator

  5. Offline

    ThePandaPlayer

    Okay I'll see about it.

    @timtower
    Okay, when I load up the server it gives me an error:
    Code:
    [08:12:16] [Server thread/ERROR]: Could not load 'plugins\MCDuelsPrefix.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:133) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:326) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.loadPlugins(CraftServer.java:298) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:205) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:544) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_141]
    Caused by: java.lang.NullPointerException
        at com.mcduels.prefix.Main.<init>(Main.java:28) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_141]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_141]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_141]
        at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_141]
        at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_141]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        ... 6 more
    [08:12:16]
    If you look closely, "at com.mcduels.prefix.Main.<init>(Main.java:28)~[?:1.8.0_141]
    That means, at line 28 there is some kind of error. Look what line 28 of my code is:

    Code:
    package com.mcduels.prefix;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.permissions.Permission;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.Team;
    
    public class Main extends JavaPlugin implements Listener {
      
      
        public Permission owner = new Permission("mcduels.prefix.owner");
        public Permission backadmin = new Permission("mcduels.prefix.platformadmin");
        public Permission admin = new Permission("mcduels.perefix.admin");
        public Permission dev = new Permission("mcduels.prefix.dev");
        public Permission srmod = new Permission("mcduels.prefix.srmod");
        public Permission mod = new Permission("mcduels.prefix.mod");
        public Permission yt = new Permission("mcduels.prefix.yt");
        public Permission premium = new Permission("mcduels.prefix.premium");
        public Permission deluxe = new Permission("mcduels.prefix.deluxe");
      
        private Scoreboard rank;
        
        Team ownerrank = rank.registerNewTeam("owner");
        Team platformadmin = rank.registerNewTeam("platformadmin");
        Team premiumrank = rank.registerNewTeam("premium");
        Team adminrank = rank.registerNewTeam("admin");
        Team devrank = rank.registerNewTeam("dev");
        Team srmodrank = rank.registerNewTeam("srmod");
        Team modrank = rank.registerNewTeam("mod");
        Team deluxerank = rank.registerNewTeam("deluxe");
        Team op = rank.registerNewTeam("op");
        Team ytrank = rank.registerNewTeam("yt");
        
      
      
        @Override
        public void onEnable() {
          
            this.getServer().getPluginManager().registerEvents(this,this);
    
            ownerrank.setPrefix(ChatColor.RED+"Owner"+ChatColor.WHITE);
          
            op.setPrefix(ChatColor.DARK_RED+"Op"+ChatColor.WHITE);
          
            platformadmin.setPrefix(ChatColor.RED+"Platform Admin"+ChatColor.WHITE);
          
            adminrank.setPrefix(ChatColor.RED+"Admin"+ChatColor.WHITE);
          
            devrank.setPrefix(ChatColor.YELLOW+"Dev");
          
            srmodrank.setPrefix(ChatColor.DARK_PURPLE+"Sr.Mod"+ChatColor.WHITE);
          
            modrank.setPrefix(ChatColor.DARK_PURPLE+"Mod"+ChatColor.WHITE);
          
            deluxerank.setPrefix(ChatColor.GOLD+"✪"+ChatColor.YELLOW);
          
            ytrank.setPrefix(ChatColor.RED+"You"+ChatColor.DARK_RED+"Tube");
          
            premiumrank.setPrefix(ChatColor.BLUE+"✯"+ChatColor.DARK_AQUA);
          
          
          
          
          
        }
      
        @SuppressWarnings("deprecation")
        public void updateRanks() {
            for(Player p : Bukkit.getOnlinePlayers()) {
                if(p.isOp()) {
                    op.addPlayer(p);
                    return;
                }
              
                else if(p.hasPermission(owner)) {
                  
                    ownerrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(admin)) {
                    adminrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(dev)) {
                    devrank.addPlayer(p);
                }
                else if(p.hasPermission(srmod)) {
                    srmodrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(mod)) {
                    modrank.addPlayer(p);
                    return;
                }
              
                else if(p.hasPermission(backadmin)) {
                    platformadmin.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(yt)) {
                    ytrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(premium)) {
                    premiumrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(deluxe)) {
                    deluxerank.addPlayer(p);
                    return;
                }
                else {
                    return;
                  
                  
                }
              
              
            }
          
        }
      
      
    
      
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e)  {
          
            Main rankReloader = new Main();
            rankReloader.updateRanks();
          
        }
      
      
    
    }
    
    [EDIT: Oops! I had the Teams commented to see if it still errored. (It didn't but it cut out the main functionality]
    Line 28 is where I start declaring my Team fields.
    Any way to fix this?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited: Aug 22, 2017
  6. Offline

    timtower Administrator Administrator Moderator

    @ThePandaPlayer rank is null.
    Declare in the class, initialize in the onEnable.
     
  7. Offline

    ThePandaPlayer

    Okay, so I have the actual Scoreboard object declared in the class. If I initialize the teams in the onEnable, it gives me the scope error I had before. (I don't want to sound annoying, I'm just genuinely confused)
     
  8. Offline

    timtower Administrator Administrator Moderator

    @ThePandaPlayer Initializing is without the type in front of it.
    So value = something
    Not Scoreboard value = something
     
  9. Offline

    ThePandaPlayer

    I see now. Thank you.

    UPDATE:
    I just compiled and got ANOTHER simiar error:
    Code:
    java.lang.NullPointerException: null
        at com.mcduels.prefix.Main.onEnable(Main.java:47) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:402) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:374) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:323) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:421) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:382) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:337) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:272) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:544) [spigot-1.12.jar:git-Spigot-596221b-9a1fc1e]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_141]
    [09:37:21]
    Here is the code after revisions:

    Code:
    package com.mcduels.prefix;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.permissions.Permission;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.Team;
    
    public class Main extends JavaPlugin implements Listener {
       
       
        public Permission owner = new Permission("mcduels.prefix.owner");
        public Permission backadmin = new Permission("mcduels.prefix.platformadmin");
        public Permission admin = new Permission("mcduels.perefix.admin");
        public Permission dev = new Permission("mcduels.prefix.dev");
        public Permission srmod = new Permission("mcduels.prefix.srmod");
        public Permission mod = new Permission("mcduels.prefix.mod");
        public Permission yt = new Permission("mcduels.prefix.yt");
        public Permission premium = new Permission("mcduels.prefix.premium");
        public Permission deluxe = new Permission("mcduels.prefix.deluxe");
       
        private Scoreboard rank;
        private Team ownerrank;
        private Team platformadmin;
        private Team premiumrank;
        private Team adminrank;
        private Team devrank;
        private Team srmodrank;
        private Team modrank;
        private Team deluxerank;
        private Team op;
        private Team ytrank;
       
       
       
       
       
        @Override
        public void onEnable() {
           
            getLogger().info("Registering Ranks...");
            ownerrank = rank.registerNewTeam("owner");
            platformadmin = rank.registerNewTeam("platformadmin");
            premiumrank = rank.registerNewTeam("premium");
            adminrank = rank.registerNewTeam("admin");
            devrank = rank.registerNewTeam("dev");
            srmodrank = rank.registerNewTeam("srmod");
            modrank = rank.registerNewTeam("mod");
            deluxerank = rank.registerNewTeam("deluxe");
            op = rank.registerNewTeam("op");
            ytrank = rank.registerNewTeam("yt");
           
           
            getLogger().info("Registering events...");
            this.getServer().getPluginManager().registerEvents(this,this);
           
            getLogger().info("Setting Prefixes...");
           
            ownerrank.setPrefix(ChatColor.RED+"Owner"+ChatColor.WHITE);
           
            op.setPrefix(ChatColor.DARK_RED+"Op"+ChatColor.WHITE);
           
            platformadmin.setPrefix(ChatColor.RED+"Platform Admin"+ChatColor.WHITE);
           
            adminrank.setPrefix(ChatColor.RED+"Admin"+ChatColor.WHITE);
           
            devrank.setPrefix(ChatColor.YELLOW+"Dev");
           
            srmodrank.setPrefix(ChatColor.DARK_PURPLE+"Sr.Mod"+ChatColor.WHITE);
           
            modrank.setPrefix(ChatColor.DARK_PURPLE+"Mod"+ChatColor.WHITE);
           
            deluxerank.setPrefix(ChatColor.GOLD+"✪"+ChatColor.YELLOW);
           
            ytrank.setPrefix(ChatColor.RED+"You"+ChatColor.DARK_RED+"Tube");
           
            premiumrank.setPrefix(ChatColor.BLUE+"✯"+ChatColor.DARK_AQUA);
           
            getLogger().info("Successful initalization!");
           
           
           
           
           
           
        }
       
       
        @SuppressWarnings("deprecation")
        public void updateRanks() {
            for(Player p : Bukkit.getOnlinePlayers()) {
                if(p.isOp()) {
                    op.addPlayer(p);
                    return;
                }
               
                else if(p.hasPermission(owner)) {
                   
                   
                    ownerrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(admin)) {
                    adminrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(dev)) {
                    devrank.addPlayer(p);
                }
                else if(p.hasPermission(srmod)) {
                    srmodrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(mod)) {
                    modrank.addPlayer(p);
                    return;
                }
               
                else if(p.hasPermission(backadmin)) {
                    platformadmin.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(yt)) {
                    ytrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(premium)) {
                    premiumrank.addPlayer(p);
                    return;
                }
                else if(p.hasPermission(deluxe)) {
                    deluxerank.addPlayer(p);
                    return;
                }
                else {
                    return;
                   
                   
                }
               
               
            }
           
        }
       
       
    
       
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent e)  {
           
            Main rankReloader = new Main();
            rankReloader.updateRanks();
           
        }
       
       
    
    }
    The error is pointing to line 47 which is: ownerrank = rank.registerNewTeam("owner");
    I am trying to make the 'rank' object something, but Eclipse tells me "cannot instantiate Scoreboard" because it's just an interface.
     
    Last edited: Aug 22, 2017
Thread Status:
Not open for further replies.

Share This Page