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; } }
@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.
This: Code:java requester.sendMessage("It took too long for "+ plugin.tpa.get(requester) + " to respond!");plugin.tpa.get(requester).sendMessage("Your request has expired");plugin.tpa.put(requester,null); Can be done like this Code:java Player target = plugin.tpa.remove(requester);requester.sendMessage("It took too long for "+ target.getName() + " to respond!");target.sendMessage("Your request has expired");
@JanTuck Is this what's creating the error? I need help with error not message formats.. Sent from my iPhone using Tapatalk
@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.
@Tecno_Wizard It can't be because it's sending the message still. The bukkitrunnable isn't working.. Sent from my iPhone using Tapatalk
@mehboss give this shot. It's how I identify almost all of my NPE now. https://www.spigotmc.org/wiki/eclipse-debug-your-plugin/
@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..
@mehboss If it is the runnable that is causing the error, null check these variables. plugin plugin.tpa plugin.tpa.get(requester) (the requester may not be in the map)