Solved Tpa Error

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

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

    mehboss

    Alright so I split the /tpa, /tpaccept, and /tpdeny commands into seperate classes. I am now getting null errors. This is probably a really easy fix.

    ERROR:
    Code:
    [20:11:02 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'tpdeny' in plugin SimpleTpa 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.simpletpa.Tpdeny.onCommand(Tpdeny.java:38) ~[?:?]
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8.8.jar:git-Spigot-21fe707-e1ebe52]
            ... 15 more
    
    I'm getting the same != null error for all three classes.
    LINE 38:
    Code:
            if (cmd.getName().equalsIgnoreCase("tpdeny")) {
               if (!sender.hasPermission("simpletpa.tpdeny")) {
                    sender.sendMessage(Prefix + noPerm);
                    return false;
                }
    Line 38: -->            if (plugin.tpa.get(requester) != null) {
                    requester.sendMessage(Prefix + PlayerRespondsRequest.replaceAll("{REQUEST}", denied.toString()));
                    plugin.tpa.get(requester).sendMessage(Prefix + PlayerRespondedRequest.replaceAll("{REQUEST}", denied.toString()));
                    plugin.tpa.put(requester, null);
                } else {
                    requester.sendMessage(Prefix + noPending);
                }
            }
            return false;
        }
    }
    
    MAIN CLASS:
    Code:
    package me.mehboss.simpletpa;
    
    import java.util.HashMap;
    
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class TpaPlugin extends JavaPlugin {
    
        HashMap<Player, Player> tpa = new HashMap<Player, Player>();
       
        public void onEnable() {
            getCommand("tpa").setExecutor(new Tpa(null));
            getCommand("tpaccept").setExecutor(new Tpaccept(null));
            getCommand("tpdeny").setExecutor(new Tpdeny(null));
            registerConfig();
        }
    
        private void registerConfig() {
            getConfig().options().copyDefaults(true);
            saveConfig();
            getLogger();
        }
    }
    
    TPA CLASS:
    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 Usage = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("Other-Messages.Usage"));
            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('&',
                                    "&6Teleport request has beeen sent to&e" + target.getName()));
                            target.sendMessage(ChatColor.translateAlternateColorCodes('&',
                                    "&6You have received a teleport request by&e" + requester.getName()));
                            target.sendMessage(ChatColor.translateAlternateColorCodes('&',
                                    "&6You have 2 minutes until the request cancels"));
    
                            new BukkitRunnable() {
                                @Override
                                public void run() {
                                    if (plugin.tpa.get(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);
                        }
    
                    }
                }
            }
            return false;
        }
    }
    
    TPACCEPT CLASS:
    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;
    
    public class Tpaccept implements CommandExecutor {
    
        private TpaPlugin plugin;
    
        public Tpaccept(TpaPlugin plugin) {
            this.plugin = plugin;
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            Player requester = (Player) sender;
            String accepted = ChatColor.translateAlternateColorCodes('&', "&aaccepted&r");
            String PlayerRespondsRequest = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("TP-Request.Player-Denies-Request"));
            String PlayerRespondedRequest = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("TP-Request.Player-Denied-Request"));
            String noPending = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("Other-Messages.noPending"));
            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("tpaccept")) {
                if (!sender.hasPermission("simpletpa.tpaccept")) {
                    sender.sendMessage(Prefix + noPerm);
                    return false;
                }
                if (plugin.tpa.get(requester) != null) {
                    requester.sendMessage(Prefix + PlayerRespondsRequest.replaceAll("{REQUEST}", accepted.toString()));
                    plugin.tpa.get(requester).sendMessage(Prefix + PlayerRespondedRequest.replaceAll("{REQUEST}", accepted.toString()));
                    plugin.tpa.get(requester).teleport(requester);
                    plugin.tpa.put(requester, null);
                } else {
                    requester.sendMessage(Prefix + noPending);
                }
            }
            return false;
        }
    }
    
    TPDENY CLASS:
    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;
    
    public class Tpdeny implements CommandExecutor {
    
        private TpaPlugin plugin;
    
        public Tpdeny(TpaPlugin plugin) {
            this.plugin = plugin;
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
            Player requester = (Player) sender;
            String denied = ChatColor.translateAlternateColorCodes('&', "&cdenied&r");
            String PlayerRespondsRequest = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("TP-Request.Player-Denies-Request"));
            String PlayerRespondedRequest = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("TP-Request.Player-Denied-Request"));
            String noPending = ChatColor.translateAlternateColorCodes('&',
                    Bukkit.getPluginManager().getPlugin("SimpleTpa").getConfig().getString("Other-Messages.noPending"));
            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("tpdeny")) {
                if (!sender.hasPermission("simpletpa.tpdeny")) {
                    sender.sendMessage(Prefix + noPerm);
                    return false;
                }
                if (plugin.tpa.get(requester) != null) {
                    requester.sendMessage(Prefix + PlayerRespondsRequest.replaceAll("{REQUEST}", denied.toString()));
                    plugin.tpa.get(requester).sendMessage(Prefix + PlayerRespondedRequest.replaceAll("{REQUEST}", denied.toString()));
                    plugin.tpa.put(requester, null);
                } else {
                    requester.sendMessage(Prefix + noPending);
                }
            }
            return false;
        }
    }
    
     
  2. Offline

    ShaneCraftDev

    Well yes, obviously you get an npe. In your onEnable you create new command executors, but the parameter for every constructor of your custom CommandExecutor is set to null.
     
  3. Offline

    Zombie_Striker

    If I counted the lines correctly (Curse, when are you going to fix the number display) this is the line that is throwing the NPE. This is because plugin is null since you are only proving null instances for the constructors. Replace "null" with "this"
     
  4. Offline

    mehboss

    @Zombie_Striker
    I'm dumb lmao I forgot to change them
     
  5. Offline

    JanTuck

    @mehboss
    Use uuids instead of player instances, also you should probably make this public.
    Code:java
    1.  
    2. HashMap<UUID, UUID> tpa = new HashMap<>();
    3.  
     
  6. Offline

    timtower Administrator Administrator Moderator

  7. Offline

    JanTuck

    Last edited by a moderator: Jan 24, 2017
Thread Status:
Not open for further replies.

Share This Page