Solved Prefixes in tab help

Discussion in 'Plugin Development' started by iLiveorLose, Oct 2, 2016.

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

    iLiveorLose

    Hello there, I am trying to create a plugin that bypasses the character count in tab and gives the player a prefix based on what permission they have. I did some research and found the best way to do this was to create teams and set the prefix for the team there, and if the player has a certain permission, add them to that team. I did that all and nothing is different about tab, my name is white and I have no prefix. The plugin loads fine, there are no errors, and it shows up in /plugins, so I have no idea what I am doing wrong. Here is my code:

    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin {
    
        @SuppressWarnings("deprecation")
        public void onJoin(PlayerJoinEvent e) {
    
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            Scoreboard board = manager.getNewScoreboard();
    
            Team owner = board.getTeam("owner");
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            Team admin = board.getTeam("admin");
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
          
            Team moderator = board.getTeam("moderator");
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            Team helper = board.getTeam("helper");
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
          
            Team builder = board.getTeam("builder");
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            Team member = board.getTeam("member");
            if (member == null) {
                member = board.registerNewTeam("member");
            }
          
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&b&lOwner&7&l]"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&4&lAdmin&7&l]"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&5&lModerator&7&l]"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&d&lHelper&7&l]"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&3&lBuilder&7&l]"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&9&lMember&7&l]"));
          
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
          
            if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
    
        }
    }
    
    Here is my plugin.yml:
    Code:
    name: MysticTab
    author: ItzLive
    main: me.ItzLive.MysticTab.MysticTab
    version: 1.0
    description: Custom Tab
    permissions:
      mystictab.owner:
        default: false
      mystictab.admin:
        default: false
      mystictab.moderator:
        default: false
      mystictab.helper:
        default: false
      mystictab.builder:
        default: false
      mystictab.member:
        default: true
    
    I put false for the permissions so that no player has it, not even ops. I already tried de-opping myself and putting myself as member then rejoining the server to trigger the event again, but my name in tab was still plain white and no prefix. Please tell me if I did something wrong, because I spent some time trying to figure this out! Thanks in advance!
     
    Last edited: Oct 3, 2016
  2. You can't trigger an event that isn't registered. Make sure to also implement listener and add the EventHandler annotation over your event.
     
  3. CodePlaysMinecraft likes this.
  4. Offline

    iLiveorLose

    @bwfcwalshy @CodePlaysMinecraft Wow I'm an idiot. Haven't been coding plugins in a while.... I derped. But it still doesn't work now... After exporting I reloaded the plugin, rejoined and nothing. I tried reloading the entire server, then rejoining and still nothing. Then, I stopped the server, turned it back on, de-opped and made myself member through console, joined back, and STILL nothing. It might be another stupid mistake, but here is my new code:

    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
       
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
    
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            Scoreboard board = manager.getNewScoreboard();
    
            Team owner = board.getTeam("owner");
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            Team admin = board.getTeam("admin");
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
           
            Team moderator = board.getTeam("moderator");
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            Team helper = board.getTeam("helper");
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
           
            Team builder = board.getTeam("builder");
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            Team member = board.getTeam("member");
            if (member == null) {
                member = board.registerNewTeam("member");
            }
           
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&b&lOwner&7&l]"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&4&lAdmin&7&l]"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&5&lModerator&7&l]"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&d&lHelper&7&l]"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&3&lBuilder&7&l]"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&7&l[&9&lMember&7&l]"));
           
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
           
            if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
    
        }
    }
    
    This is pretty frustrating. Thanks in advance.
     
  5. @iLiveorLose Do else if instead of all the ifs. Have you debugged? What fires? Where? What variables are created?
     
  6. Offline

    iLiveorLose

    @bwfcwalshy Adding the else if's still didn't work (sorry about my stupidity). The plugin loads fine, it shows up in /plugins so loading isn't the problem. Idk how to fix this, is there a better way to do what I am trying to accomplish that actually works?
     
  7. Offline

    iLiveorLose

    @bwfcwalshy I don't know how to debug, and every place/tutorial I looked didn't help at all, including the one in the resources section here on bukkit forums. What even is the dist folder..
     
  8. Offline

    Zombie_Striker

    @iLiveorLose
    This is the line that is causing your problems. Whenever a player joins, it creates a new scoreboard, meaning it does not get affected by any of the other scoreboards on the server. This is not what you want.

    Do the following:

    1. Go into the onEnable
    2. Create the scoreboard, teams, and prefixes there.
    3. When a player joins, use that scoreboard and add them to the right team.
    4. At the end,make sure the player's scoreboard is set to this scoreboard.
     
  9. Offline

    iLiveorLose

    @Zombie_Striker Ok, thank you so much. That helped A LOT! One problem though, (I'm 100% sure the plugin works because of this) when I join the server it kicks me for something like "String received is longer than maximum accepted (25 < 16)" something along those lines. I know that means that it is saying my name in tab is longer than it should be, but I thought adding them to a team and using that prefix would allow it so that it could surpass the character count (hence why I made this plugin in the FIRST place). Any help? By the way, if I didn't articulate it enough, thank you so much for that comment, it helped a ton!
     
  10. Offline

    timtower Administrator Administrator Moderator

    @iLiveorLose The team prefix thing can't be over 16 characters as well.
    Moderator goes above that according to my count.
     
  11. Offline

    iLiveorLose

    @timtower Thank you, I fixed that. Now I can join the server, but when I first start the server, MysticTab won't load because of "NullPointer Exception", but when I reload, the plugin loads with no errors and shows up in /plugins. When I join the server, Tab is unchanged, my name is still white.

    Here is my code:
    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
       
        private ScoreboardManager manager = Bukkit.getScoreboardManager();
        private Scoreboard board = manager.getNewScoreboard();
       
        /**private Team owner = board.getTeam("owner");
        private Team admin = board.getTeam("admin");
        private Team moderator = board.getTeam("moderator");
        private Team helper = board.getTeam("helper");
        private Team builder = board.getTeam("builder");
        private Team member = board.getTeam("member");**/
       
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
           
            Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");
           
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
           
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
           
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            if (member == null) {
                member = board.registerNewTeam("member");
            }
           
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
           
            Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");
               
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
           
            else if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
           
            if (!e.getPlayer().getScoreboard().equals(board)){
                e.getPlayer().setScoreboard(board);
            }
        }
    }
    
    @Zombie_Striker Do you guys know what I did wrong? How can I fix the exception?
     
  12. Offline

    iLiveorLose

  13. Offline

    Zombie_Striker

    Post the error.
    Just noticed this now. Unless you plan on letting the config dictate the Strings, there is no reason to use the TACC method for this. Simply use ChatColor to add your color codes. You don't have to change this now, but it is something you should think about in future projects.

    Try resetting the prefix when the player joins.

    BTW:
    Un comment these lines. It's better to have direct access to each team instance than to have to get the teams again whenever a player joins.
     
  14. Offline

    iLiveorLose

    Thank you very much for the tips! Here is my new and updated code:
    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
     
        private ScoreboardManager manager = Bukkit.getScoreboardManager();
        private Scoreboard board = manager.getNewScoreboard();
     
        private Team owner = board.getTeam("owner");
        private Team admin = board.getTeam("admin");
        private Team moderator = board.getTeam("moderator");
        private Team helper = board.getTeam("helper");
        private Team builder = board.getTeam("builder");
        private Team member = board.getTeam("member");
     
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
         
            /**Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");**/
         
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
         
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
         
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            if (member == null) {
                member = board.registerNewTeam("member");
            }
         
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
         
            /**Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");**/
             
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
         
            else if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
         
            if (!e.getPlayer().getScoreboard().equals(board)){
                e.getPlayer().setScoreboard(board);
            }
        }
    }
    
    
    And here is the error (Please note I am not new to java, so I know that the error is on line 16 but I do not know how to fix it.)
    Code:
    [20:12:55] [Server thread/ERROR]: Could not load 'plugins\MysticTab.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:198) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
    Caused by: java.lang.NullPointerException
        at me.ItzLive.MysticTab.MysticTab.<init>(MysticTab.java:16) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_101]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_101]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_101]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_101]
        at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_101]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        ... 6 more
    
    Once again, thanks for the tips! I will keep the TACC method as of now since I am a lazy piece of crap and don't want to change it rn. Lol.
     
  15. Offline

    Zombie_Striker

    Most likely, manager is null. Make sure you set these variables in the onEnable, that way you know the order variables are set.
     
  16. Offline

    iLiveorLose

    I might be doing something wrong, but when I move them inside onEnable, everything that says "board" and isn't in onEnable is red and underlined (obviously, because it doesn't know what "board" is if it's in onEnable). Is there an easy way to fix this? Here is my slightly changed code if needed:
    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
       
        private Team owner = board.getTeam("owner");
        private Team admin = board.getTeam("admin");
        private Team moderator = board.getTeam("moderator");
        private Team helper = board.getTeam("helper");
        private Team builder = board.getTeam("builder");
        private Team member = board.getTeam("member");
       
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
           
            /**Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");**/
               
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            Scoreboard board = manager.getNewScoreboard();
           
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
           
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
           
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            if (member == null) {
                member = board.registerNewTeam("member");
            }
           
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
           
            /**Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");**/
               
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
           
            else if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
           
            if (!e.getPlayer().getScoreboard().equals(board)){
                e.getPlayer().setScoreboard(board);
            }
        }
    }
    
    
     
  17. @iLiveorLose Make a getter? Global variable? You can always just do Scoreboard board; and in onEnable board = whatever.code();
     
  18. Offline

    iLiveorLose

    Thank you. That removed all the errors in my code, but now when I launch the server, the plugin won't load and gives me the same Null Pointer exception, but now it is on line 17 ._.
    Error:
    Code:
    [12:23:40] [Server thread/ERROR]: Could not load 'plugins\MysticTab.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:198) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
    Caused by: java.lang.NullPointerException
        at me.ItzLive.MysticTab.MysticTab.<init>(MysticTab.java:17) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_101]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_101]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_101]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_101]
        at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_101]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        ... 6 more
    
    My updated code:
    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
      
        private Scoreboard board;
      
        private Team owner = board.getTeam("owner");
        private Team admin = board.getTeam("admin");
        private Team moderator = board.getTeam("moderator");
        private Team helper = board.getTeam("helper");
        private Team builder = board.getTeam("builder");
        private Team member = board.getTeam("member");
      
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
          
            /**Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");**/
              
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            board = manager.getNewScoreboard();
          
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
          
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
          
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            if (member == null) {
                member = board.registerNewTeam("member");
            }
          
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
          
            /**Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");**/
              
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
          
            else if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
          
            if (!e.getPlayer().getScoreboard().equals(board)){
                e.getPlayer().setScoreboard(board);
            }
        }
    }
    
    
    Thanks for helping me fix the underlines though!
     
  19. @iLiveorLose When the class is initialized the variables get loaded. So, board becomes null, then owner tries to get the team "owner" from board but since board is null it will throw an NPE. Simply move all initializations into the onEnabe
     
  20. Offline

    iLiveorLose

    Ok thanks. The plugin works but the prefixes still don't show in tab, it just shows my username in white. No errors in console, always loads up, shows up in /plugins, etc. The only errors that show up when I join the server are Holographic Displays errors (those are quite annoying, but that's not the point of this). Idk what the problem is, here is my code: (also, I gave the mystictab.owner node to owner and made sure it didn't have the other nodes by negating them)
    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
       
        private Scoreboard board;
       
        /**private Team owner = board.getTeam("owner");
        private Team admin = board.getTeam("admin");
        private Team moderator = board.getTeam("moderator");
        private Team helper = board.getTeam("helper");
        private Team builder = board.getTeam("builder");
        private Team member = board.getTeam("member");**/
       
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
               
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            board = manager.getNewScoreboard();
           
            Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");
           
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
           
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
           
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            if (member == null) {
                member = board.registerNewTeam("member");
            }
           
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
           
            Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");
               
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
           
            else if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
           
            if (!e.getPlayer().getScoreboard().equals(board)){
                e.getPlayer().setScoreboard(board);
            }
        }
    }
    
    
    Thanks!
     
  21. Offline

    Zombie_Striker

    If this is a problem with something you did, you should try to fix it yourself or create a bukkit-help thread. If this is an issue with the HD plugin, then you should create a ticket on its bukkit dev page.

    Have you tried resetting the prefix when the player joins?
     
  22. Offline

    iLiveorLose

    I probably just have to update HD, no biggie. Just an error passing some packets to the player when they join or something, not my main concern.

    Still doesn't work. The plugin loads, etc., but my name is white and normal with no prefix in tab. Updated code:
    Code:
    package me.ItzLive.MysticTab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    import org.bukkit.scoreboard.Team;
    
    public class MysticTab extends JavaPlugin implements Listener {
      
        private Scoreboard board;
      
        /**private Team owner = board.getTeam("owner");
        private Team admin = board.getTeam("admin");
        private Team moderator = board.getTeam("moderator");
        private Team helper = board.getTeam("helper");
        private Team builder = board.getTeam("builder");
        private Team member = board.getTeam("member");**/
      
        public void onEnable() {
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
              
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            board = manager.getNewScoreboard();
          
            Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");
          
            if (owner == null) {
                owner = board.registerNewTeam("owner");
            }
    
            if (admin == null) {
                admin = board.registerNewTeam("admin");
            }
          
            if (moderator == null) {
                moderator = board.registerNewTeam("moderator");
            }
    
            if (helper == null) {
                helper = board.registerNewTeam("helper");
            }
          
            if (builder == null) {
                builder = board.registerNewTeam("builder");
            }
    
            if (member == null) {
                member = board.registerNewTeam("member");
            }
          
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
          
            Team owner = board.getTeam("owner");
           Team admin = board.getTeam("admin");
           Team moderator = board.getTeam("moderator");
           Team helper = board.getTeam("helper");
           Team builder = board.getTeam("builder");
            Team member = board.getTeam("member");
          
            owner.setPrefix(ChatColor.translateAlternateColorCodes('&', "&b&lOwner"));
            admin.setPrefix(ChatColor.translateAlternateColorCodes('&', "&4&lAdmin"));
            moderator.setPrefix(ChatColor.translateAlternateColorCodes('&', "&5&lModerator"));
            helper.setPrefix(ChatColor.translateAlternateColorCodes('&', "&d&lHelper"));
            builder.setPrefix(ChatColor.translateAlternateColorCodes('&', "&3&lBuilder"));
            member.setPrefix(ChatColor.translateAlternateColorCodes('&', "&9&lMember"));
              
            if (e.getPlayer().hasPermission("mystictab.owner")) {
                owner.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.admin")) {
                admin.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.moderator")) {
                moderator.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.helper")) {
                helper.addPlayer(e.getPlayer());
            }
    
            else if (e.getPlayer().hasPermission("mystictab.builder")) {
                builder.addPlayer(e.getPlayer());
            }
          
            else if (e.getPlayer().hasPermission("mystictab.member")) {
                member.addPlayer(e.getPlayer());
            }
          
            if (!e.getPlayer().getScoreboard().equals(board)){
                e.getPlayer().setScoreboard(board);
            }
        }
    }
    
    
     
    Last edited: Oct 6, 2016
  23. Offline

    iLiveorLose

    Aha! I finally fixed it! I just used "e.getPlayer().setPlayerListName(board.getTeam("owner").getPrefix() + ChatColor.RESET + " " + e.getPlayer().getName());" after checking if they had the permission! I had a mod with a moderately long name (pun intended) test it, and it worked! It was able to go up to 19 characters including the prefix without cutting off anything, proving that this method of bypassing character count works! Thanks for all the help the following people gave me:
    @Zombie_Striker @bwfcwalshy @timtower @CodePlaysMinecraft

    I'm so happy I fixed this, thank you guys!
     
    bwfcwalshy likes this.
Thread Status:
Not open for further replies.

Share This Page