Solved NullPointerException

Discussion in 'Plugin Development' started by Kermit_23, Apr 26, 2017.

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

    Kermit_23

    Hello,
    When I try to add a player to the white list (after the captcha was correct), I get an NPE error. I searched for the cause of this error but I still could not find it. Please help me to solve this problem. Here is the error and below is the code that adds the player to the white list and that checks for the captcha
    Error:
    Code:
    [18:11:09] [Async Chat Thread - #5/ERROR]: Could not pass event AsyncPlayerChatEvent to AntiBot-Ultra v6.8
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnection.chat(PlayerConnection.java:1276) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1214) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_131]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.lang.NullPointerException
        at ro.aname.antibot.util.PlayerWhitelist.addToWhitelist(PlayerWhitelist.java:51) ~[?:?]
        at ro.aname.antibot.event.PlayerCaptcha.onAsyncPlayerChatEvent(PlayerCaptcha.java:52) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        ... 11 more
    
    White list code (I am aware of the static):
    Code:
        public static void addToWhitelist(Player player) {
            if (!Config.getConfig().getBoolean("Whitelist.WhitelistEnabled")) {
                return;
            }
            if (isWhitelistActive()) {
                return;
            }
            if (player == null) {
                return;
            }
            Config.getWhitelist().set("Whitelisted.player-name.", player.getName());
            Config.getWhitelist().set("Whitelisted.player-uuid.", player.getUniqueId().toString());
            Config.saveWhitelist();
            Config.reloadWhitelist();
            Bukkit.getServer().getLogger().log(Level.INFO,
                    "Added " + player.getName() + " with uuid " + player.getUniqueId().toString() + " to the whitelist");
            for (Player players : Bukkit.getOnlinePlayers()) {
                if (players.hasPermission(Config.getConfig().getString("Permissions.spy"))) {
                    players.sendMessage(ChatColor.translateAlternateColorCodes('&',
                            Config.getConfig().getString("Messages.WhitelistAdd").replace("%playername%", player.getName())
                                    .replace("%playeruuid%", player.getUniqueId().toString())));
                }
            }
            return;
        }
    Captcha code:
    Code:
        @EventHandler
        public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event) {
            /* check if player is authenticated */
            if (NewAPI.getInstance().isAuthenticated(event.getPlayer())) {
                if (AntiBotUltra.getInstance().chatMap.containsKey(event.getPlayer().getUniqueId())
                        && AntiBotUltra.getInstance().chatMap.get(event.getPlayer().getUniqueId())) {
                    return;
                }
                if (AntiBotUltra.getInstance().captchaMap.containsKey(event.getPlayer().getUniqueId())
                        && !event.getMessage().equalsIgnoreCase(
                                AntiBotUltra.getInstance().captchaMap.get(event.getPlayer().getUniqueId()))) {
                    event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&',
                            Config.getConfig().getString("Messages.Captcha")
                                    .replace("%prefix%", AntiBotUltra.getInstance().prefix).replace("%text%",
                                            AntiBotUltra.getInstance().captchaMap.get(event.getPlayer().getUniqueId()))));
                    event.setCancelled(true);
                    return;
                }
                if (AntiBotUltra.getInstance().captchaMap.containsKey(event.getPlayer().getUniqueId())) {
                    AntiBotUltra.getInstance().captchaMap.remove(event.getPlayer().getUniqueId());
                    AntiBotUltra.getInstance().chatMap.put(event.getPlayer().getUniqueId(), true);
                    event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', Config.getConfig()
                            .getString("Messages.CorrectCaptcha").replace("%prefix%", AntiBotUltra.getInstance().prefix)));
                    event.setCancelled(true);
                    PlayerWhitelist.addToWhitelist(event.getPlayer());
                    return;
                }
                AntiBotUltra.getInstance().generateCaptcha(event.getPlayer().getUniqueId());
                if (!AntiBotUltra.getInstance().captchaMap.containsKey(event.getPlayer().getUniqueId())) {
                    event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', Config.getConfig()
                            .getString("Messages.CaptchaError").replace("%prefix%", AntiBotUltra.getInstance().prefix)));
                    event.setCancelled(true);
                    return;
                }
                event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&',
                        Config.getConfig().getString("Messages.Captcha")
                                .replace("%prefix%", AntiBotUltra.getInstance().prefix).replace("%captcha%",
                                        AntiBotUltra.getInstance().captchaMap.get(event.getPlayer().getUniqueId()))));
                event.setCancelled(true);
            }
        }
    
        @EventHandler(ignoreCancelled = true)
        public void onPlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent event) {
            if (NewAPI.getInstance().isAuthenticated(event.getPlayer())) {
                if (AntiBotUltra.getInstance().chatMap.containsKey(event.getPlayer().getUniqueId())
                        && AntiBotUltra.getInstance().chatMap.get(event.getPlayer().getUniqueId())) {
                    return;
                }
                if (!AntiBotUltra.getInstance().captchaMap.containsKey(event.getPlayer().getUniqueId())) {
                    AntiBotUltra.getInstance().generateCaptcha(event.getPlayer().getUniqueId());
                }
                if (AntiBotUltra.getInstance().captchaMap.get(event.getPlayer().getUniqueId()) == null) {
                    event.setCancelled(true);
                    event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', Config.getConfig()
                            .getString("Messages.CaptchaError").replace("%prefix%", AntiBotUltra.getInstance().prefix)));
                    return;
                }
                event.getPlayer()
                        .sendMessage(ChatColor.translateAlternateColorCodes('&',
                                Config.getConfig().getString("Messages.Captcha").replace("%captcha%",
                                        AntiBotUltra.getInstance().captchaMap.get(event.getPlayer().getUniqueId())
                                                .replace("%prefix%", AntiBotUltra.getInstance().prefix))));
                event.setCancelled(true);
            }
        }
    Edit:
    Line 51 is : 'Config.getWhitelist().set("Whitelisted.player-name.", player.getName());'
    Line 52 is : 'PlayerWhitelist.addToWhitelist(event.getPlayer());'
    White list config is :
    Code:
    Whitelisted:
      player-name:
      player-uuid:
     
  2. Offline

    Zombie_Striker

    @Kermit_23
    1. Does the static access to getWhitelist return a null value?
    2. Is the player null?
    Those are the only things that I could think of. If both those things are false (they are not null), then try commenting out that line to see if that fixes the problem. If it does, then you know it has something to do with exactly that line. If not, then it may be one of the lines around it.
     
    Horsey likes this.
  3. Offline

    Horsey

    @Kermit_23
    Might want to add try/catch blocks, or if statements to make sure that the config actually contains a value :p
     
  4. Offline

    Kermit_23

    @Horsey @Zombie_Striker
    Fixed the NPE, i was calling the default config instead of the whitelist one! Now here is the new error:
    Code:
    [21:42:48] [Async Chat Thread - #0/ERROR]: Could not pass event AsyncPlayerChatEvent to AntiBot-Ultra v6.8
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnection.chat(PlayerConnection.java:1276) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1214) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_131]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.lang.IllegalArgumentException: Cannot set to an empty path
        at org.apache.commons.lang.Validate.notEmpty(Validate.java:321) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.configuration.MemorySection.set(MemorySection.java:167) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.configuration.MemorySection.set(MemorySection.java:201) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at ro.aname.antibot.util.PlayerWhitelist.addToWhitelist(PlayerWhitelist.java:52) ~[?:?]
        at ro.aname.antibot.event.PlayerCaptcha.onAsyncPlayerChatEvent(PlayerCaptcha.java:52) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_131]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        ... 11 more
     
  5. Offline

    Zombie_Striker

    @Kermit_23
    Have you added or removed any lines? The error is saying that you are setting something in the config with an empty path on line 52.
     
  6. Offline

    Kermit_23

    @Zombie_Striker
    I haven't, here is the line 52 and 53
    Code:
            Config.getWhitelist().set("Whitelisted.player-name.", player.getName());
            Config.getWhitelist().set("Whitelisted.player-uuid.", player.getUniqueId().toString());
     
  7. Offline

    Zombie_Striker

    @Kermit_23
    Remove the periods at the end of the paths.
     
    Kermit_23 likes this.
  8. Offline

    martian3333

    @Kermit_23
    This will repeatedly overwrite the same values and I would guess that you're going for a list of all whitelisted players. You're going to need to add something to your path... an autonumber, or use the UUID as part of the path, etc.

    Edit: But do remove the periods
     
    Kermit_23 likes this.
Thread Status:
Not open for further replies.

Share This Page