Null error

Discussion in 'Plugin Development' started by mehboss, Feb 9, 2017.

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

    mehboss

    I have two questions:
    1. I am getting a null error at 126, I have no idea how it is null. It was working before I made the command /tab player <player> prefix <prefix> instead of /tab <player> <prefix>.. I have no idea what I broke.
    CODE:
    Code:
                        } else if (getConfig().getString("Players." + player.getName() + ".Prefix") != null) {
    
                            StringBuilder stb = new StringBuilder();
                            for (int i = 3; i < args.length; i++) {
                                stb.append(args[i]);
                                if (i < args.length) {
                                    stb.append(" ");
                                }
                            }
                        
                                getConfig().set("Players." + player.getName() + ".Prefix", stb.toString());
    
                                saveConfig();
                                reloadConfig();
                                saveConfig();
    
                                man.getMainScoreboard().getTeam(player.getName())
                                        .setPrefix(ChatColor.translateAlternateColorCodes('&', stb.toString()));
    
                                if (!(man.getMainScoreboard().getTeam(player.getName()).getPlayers()
                                        .contains(player.getName()))) {
                                    man.getMainScoreboard().getTeam(player.getName()).addPlayer(player);
                                    player.setScoreboard(sb);
    
                                        player.sendMessage("Your prefix has been set by " + sender.getName() + "!");
                                        sender.sendMessage(
                                                "You set " + player.getName() + "'s prefix to " + stb.toString());
                                }
                            }
                        }
                    }
    ERROR:
    Code:
    [21:23:01 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'tab' in plugin EZTab v1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_112]
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_112]
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]
    Caused by: java.lang.NullPointerException
            at me.mehboss.eztab.Tab.onCommand(Tab.java:126) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            ... 15 more
    LINE:
    Code:
                                man.getMainScoreboard().getTeam(player.getName())
                                        .setPrefix(ChatColor.translateAlternateColorCodes('&', stb.toString()));
    FULL CODE:
    Code:
    package me.mehboss.eztab;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    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 Tab extends JavaPlugin implements Listener {
    
        public void onEnable() {
            registerConfig();
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
        }
    
        public void onDisable() {
            getConfig();
            saveConfig();
            reloadConfig();
    
        }
    
        private void registerConfig() {
            getConfig().options().copyDefaults(true);
            saveConfig();
            getLogger();
        }
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onJoin(PlayerJoinEvent e) {
    
            Player p = e.getPlayer();
            ScoreboardManager man = Bukkit.getScoreboardManager();
            Scoreboard sb = man.getMainScoreboard();
    
            if (sb.getTeam(p.getName().toString()) != null) {
                if (!(sb.getTeam(p.getName()).getPlayers().contains(p.getName()))) {
                    sb.getTeam(p.getName()).getPlayers().add(p.getPlayer());
                    p.setScoreboard(sb);
                }
            }
        }
    
        @SuppressWarnings("deprecation")
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    
            if (cmd.getName().equalsIgnoreCase("tab")) {
    
                if (args.length == 0) {
                    sender.sendMessage("ERROR: /tab player <player> prefix <prefix>");
                }
    
                else if (args.length == 1) {
                    sender.sendMessage("ERROR: /tab player <player> prefix <prefix>");
                }
    
                else if (args.length == 2) {
                    sender.sendMessage("ERROR: /tab player <player> prefix <prefix>");
                }
    
                else if (args.length == 3 && !args[0].equalsIgnoreCase("player") && !args[2].equalsIgnoreCase("prefix")) {
                    sender.sendMessage("ERROR: /tab player <player> prefix <prefix>");
                }
    
                else if (args.length == 3 && !args[0].equalsIgnoreCase("player") && !args[2].equalsIgnoreCase("clear")) {
                    sender.sendMessage("ERROR: /tab player <player> clear");
                } else if (args.length == 3 && args[0].equalsIgnoreCase("player") && args[2].equalsIgnoreCase("clear")) {
                    ScoreboardManager man = Bukkit.getScoreboardManager();
                    Scoreboard sb = man.getMainScoreboard();
    
                    Player player = Bukkit.getPlayer(args[1]);
    
                    if (sb.getTeam(player.getName()) != null
                            && getConfig().getString("Players." + player.getName() + ".Prefix") != null) {
                        man.getMainScoreboard().getTeam(player.getName()).removePlayer(player);
                        man.getMainScoreboard().getTeam(player.getName()).unregister();
    
                        if (player != sender) {
                            player.sendMessage("Your prefix has been cleared by " + sender.getName() + "!");
                            sender.sendMessage("You cleared " + player.getName() + "'s prefix");
                        } else {
                            sender.sendMessage("Your prefix has been cleared!");
                        }
                    }
    
                } else if (args.length >= 4 && !(args[0].equalsIgnoreCase("player"))
                        && !(args[2].equalsIgnoreCase("prefix"))) {
                    sender.sendMessage("ERROR: /tab player <player> prefix <prefix>");
    
                } else if (args.length >= 4 && args[0].equalsIgnoreCase("player") && args[2].equalsIgnoreCase("prefix")) {
                    Player player = Bukkit.getPlayer(args[1]);
    
                    if (player.isOnline()) {
    
                        ScoreboardManager man = Bukkit.getScoreboardManager();
                        Scoreboard sb = man.getMainScoreboard();
    
                        if (sb.getTeam(player.getName()) == null
                                && getConfig().getString("Players." + player.getName() + ".Prefix") == null) {
    
                            StringBuilder stb = new StringBuilder();
                            for (int i = 3; i < args.length; i++) {
                                stb.append(args[i]);
                                if (i < args.length) {
                                    stb.append(" ");
                                }
                            }
                                getConfig().createSection("Players." + player.getName() + ".Prefix");
                                getConfig().set("Players." + player.getName() + ".Prefix", stb.toString());
    
                                saveConfig();
                                reloadConfig();
                                saveConfig();
    
                                Team PLAYER = sb.registerNewTeam(player.getName());
    
                                PLAYER.setPrefix(ChatColor.translateAlternateColorCodes('&', stb.toString()));
                                PLAYER.getPlayers().add(player);
                                player.setScoreboard(sb);
                               
                                    player.sendMessage("Your prefix has been set by " + sender.getName() + "!");
                                    sender.sendMessage("You set " + player.getName() + "'s prefix to " + stb.toString());
                        } else if (getConfig().getString("Players." + player.getName() + ".Prefix") != null) {
    
                            StringBuilder stb = new StringBuilder();
                            for (int i = 3; i < args.length; i++) {
                                stb.append(args[i]);
                                if (i < args.length) {
                                    stb.append(" ");
                                }
                            }
                           
                                getConfig().set("Players." + player.getName() + ".Prefix", stb.toString());
    
                                saveConfig();
                                reloadConfig();
                                saveConfig();
    
                                man.getMainScoreboard().getTeam(player.getName())
                                        .setPrefix(ChatColor.translateAlternateColorCodes('&', stb.toString()));
    
                                if (!(man.getMainScoreboard().getTeam(player.getName()).getPlayers()
                                        .contains(player.getName()))) {
                                    man.getMainScoreboard().getTeam(player.getName()).addPlayer(player);
                                    player.setScoreboard(sb);
    
                                        player.sendMessage("Your prefix has been set by " + sender.getName() + "!");
                                        sender.sendMessage(
                                                "You set " + player.getName() + "'s prefix to " + stb.toString());
                                }
                            }
                        }
                    }
        }
            return false;
    }
    }
    2. How would I cancel it if it is over 16 characters?


     
    Last edited: Feb 9, 2017
  2. Offline

    Rayzr522

    1. Debug getMainScoreboard and getTeam. You may have to check if getTeam is returning null.

    2. If stb.toString().length() > 16, fail with an error message to the player.
     
    mine-care likes this.
  3. Offline

    Tecno_Wizard

    @mehboss this is the kind of thing you use the Java debugger for. NPE within large projects are hard to figure out for anyone who doesn't know your code, and it's one of the easiest things to debug. You only have to sout all the vars at the line or simply set a breakpoint at the line and inspect the values.

    Asking other people what the issue is isn't the silver bullet I'm afraid.

    https://www.spigotmc.org/wiki/intellij-debug-your-plugin/
    https://www.spigotmc.org/wiki/eclipse-debug-your-plugin/
     
  4. Offline

    mehboss

    I just realized something and my apologies. Towards the end I check if the player is in the team before I add them to the team.


    Sent from my iPhone using Tapatalk
     
  5. Offline

    mine-care

    Rayzr522 likes this.
Thread Status:
Not open for further replies.

Share This Page