Solved Plugin Error

Discussion in 'Plugin Development' started by mehboss, Jan 23, 2017.

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

    mehboss

    Just having a tiny null error with my bukkit runnable. So basically, I want the runnable to cancel the tpa request after 2 minutes, I do, infact, have it set for only 10 seconds so I could test if it working.

    It is running the runnable but it is giving me a null error.
    Error:
    Code:
    [23:30:20 WARN]: [SimpleTpa] Task #9 for SimpleTpa v1.0 generated an exception
    java.lang.NullPointerException
            at me.mehboss.simpletpa.Tpa$1.run(Tpa.java:52) ~[?:?]
            at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [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]
    Code:
    Code:
    package me.mehboss.simpletpa;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class Tpa implements CommandExecutor {
    
        private TpaPlugin plugin;
    
        public Tpa(TpaPlugin plugin) {
            this.plugin = plugin;
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            Player requester = (Player) sender;
    
            String TpRequest = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("TPA-Request.Tpa"));
            String Usage = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("Other-Messages.Usage"));
            String Prefix = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("Prefix"));
            String noPerm = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("Other-Messages.noPerm"));
    
            if (cmd.getName().equalsIgnoreCase("tpa")) {
                if (sender instanceof Player) {
                    if (!sender.hasPermission("simpletpa.tpa")) {
                        sender.sendMessage(noPerm);
                        return false;
                    }
                    if (args.length == 0) {
                        requester.sendMessage(Usage);
                        return false;
                    } else if (args.length == 1) {
                        Player target = Bukkit.getPlayer(args[0]);
                        if (target != null) {
                            plugin.tpa.put(target, requester);
                            requester.sendMessage(ChatColor.translateAlternateColorCodes('&',
                                    Prefix + TpRequest.replaceAll("%PLAYER%", target.getName().toString())));
    
                            new BukkitRunnable() {
                                @Override
                                public void run() {
                                    if (requester != null) {
                                        requester.sendMessage("It took too late for" + plugin.tpa.get(requester).getName()
                                                + "to respond!");
                                        plugin.tpa.get(requester).sendMessage("Your request has expired");
                                        plugin.tpa.put(requester, null);
                                    }
                                }
                            }.runTaskLater(this.plugin, 200);
                           
                            for (String tpamessage : Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig()
                                    .getStringList("TP-Message")) {
                                tpamessage.replaceAll("%PLAYER%", requester.getName().toString());
                                target.sendMessage(tpamessage.replaceAll("(&([a-fk-o0-9]))", "\u00A7$2"));
                            }
                        }
    
                    }
                }
            }
            return false;
        }
    }
    
     
  2. Offline

    Zombie_Striker

    What is this line?
     
  3. Offline

    mehboss

    @Zombie_Striker
    [​IMG]
    Line numbers are on the left side bar..
     
  4. Offline

    Zombie_Striker

    @mehboss
    1. Is prefix null?
    2. Is TPRequest null?
     
  5. Offline

    mehboss

    @Zombie_Striker
    No they both sent the message back with tp request message and the prefix string, which means they are working. The Bukkit runnable is my problem.
     
  6. Offline

    JanTuck

    This:
    Code:java
    1.  
    2. requester.sendMessage("It took too long for "+ plugin.tpa.get(requester) + " to respond!");
    3. plugin.tpa.get(requester).sendMessage("Your request has expired");
    4. plugin.tpa.put(requester,null);
    5.  


    Can be done like this

    Code:java
    1.  
    2. Player target = plugin.tpa.remove(requester);
    3. requester.sendMessage("It took too long for "+ target.getName() + " to respond!");
    4. target.sendMessage("Your request has expired");
    5.  
     
    xTrollxDudex likes this.
  7. Offline

    mehboss

    @JanTuck
    Is this what's creating the error? I need help with error not message formats..


    Sent from my iPhone using Tapatalk
     
  8. Offline

    Tecno_Wizard

    @mehboss I think "target" at line 52 of your screenshot is null. It's really difficult to read the rest without line numbers. That's definitely an odd one. Have you used a remote debug? You can attach the JVM debugger to the server process and inspect these variable values at the moment it is running.
     
  9. Offline

    mehboss

    @Tecno_Wizard
    It can't be because it's sending the message still. The bukkitrunnable isn't working..



    Sent from my iPhone using Tapatalk
     
  10. Offline

    Tecno_Wizard

  11. Offline

    mehboss

    @Techno_Wizard @Zombie_Striker
    I use multi craft server for testing. Idk how I would set the script either.

    Edit: If this helps out, it gives the error right when it hits the 10 second (execution) of the Bukkit runnable. It is something in the Bukkit runnable causing the error..
     
    Last edited: Jan 24, 2017
  12. Offline

    Zombie_Striker

    @mehboss
    If it is the runnable that is causing the error, null check these variables.
    1. plugin
    2. plugin.tpa
    3. plugin.tpa.get(requester) (the requester may not be in the map)
     
    mehboss likes this.
  13. Offline

    mehboss

    Thanks problem is fixed now. :)




    Sent from my iPhone using Tapatalk
     
  14. Offline

    Zombie_Striker

    @mehboss
    If your problem has been solved, mark this thread as solved.
     
Thread Status:
Not open for further replies.

Share This Page