Solved Reply command

Discussion in 'Plugin Development' started by TheFl4me, Feb 28, 2015.

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

    TheFl4me

    Im having problems with my /r command whenever i do it it keeps saying the "you have nobody to reply to" msg

    Please help me out here :/

    Code:
    package ChatManager;
    
    import java.util.HashMap;
    
    import KitPvP.AFK;
    import Main.Main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    public class Msg implements CommandExecutor {
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
           
            HashMap<Player, Player> lastSentMessages = new HashMap<Player, Player>();
           
            String message = "";
            String usage = "§cUsage: /msg <player> <message>";
           
            if(!(sender instanceof Player)){
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                    if(args.length <= 1) {
                        p.sendMessage(usage);
                    }
                    if(args.length >= 2){
                        try{
                            Player z = p.getServer().getPlayerExact(args[0]);
                            for(int i = 1; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(z)) {
                                p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                            }
                            z.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                            p.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                            message = "";
                            }catch(NullPointerException e){
                                p.sendMessage(Main.notarget);
                            }
                    }
                    return true;
                }   
                return true;
            }
            Player p = (Player) sender;
            if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                if(args.length <= 1) {
                    p.sendMessage(usage);
                }
                if(args.length >= 2) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(z != null) {
                        for(int i = 1; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(z)) {
                            p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                        }
                        z.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                        p.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                        lastSentMessages.put(z, p);
                        message = "";
                    }
                    else {
                        p.sendMessage(Main.notarget);
                    }
                }
                return true;
            }
            if((cmd.getName().equalsIgnoreCase("r")) || (cmd.getName().equalsIgnoreCase("reply"))) {
                if(args.length == 0) {
                    p.sendMessage("§cUsage: /r <message>");
                }
                if(args.length >= 1) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(lastSentMessages.containsKey(z)) {
                        for(int i = 0; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(lastSentMessages.get(z.getName()))) {
                            p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                        }
                        Bukkit.broadcastMessage("§atest");
                        p.sendMessage("§7<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                        lastSentMessages.get(p).sendMessage("§7<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                        lastSentMessages.put(p, z);
                        message = "";
                    }
                    else {
                        p.sendMessage("§cYou have nobody to reply to");
                    }
                }
                return true;
            }
            return true;
        }
    }
     
  2. Offline

    bazsi700

    At sending message you put into the map, the player, who has received the message.
    When someone using /r you tried to get from map the first arg, not the sender. Look the example:

    Example: I'm bazsi700, and I send a message to you (TheFl4me) with /msg. Your plugin puts to the lastSentMessages bazsi700,TheFl4me.
    Now when you want to use /r, your plugin looks the first arguement, so for example when you write "/r Hello mate!", then your plugin looks in the map for "Hello" player.

    Solution: Replace in the 83. line "if(lastSentMessages.containsKey(z)){" to "if(lastSentMessages.containsKey((Player) sender)){"

    I hope you understood. :) If you didn't, or have any more problems just write to me.
     
  3. Offline

    TheFl4me

    Nope i did exactly as you said still did not work.

    After trying this i checked out other forums to see if other people had this problem and i now changed my code to make the hasmap with string instead of Player but still does not work. Now when i try it i get this error:

    Code:
    [19:36:22 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'r' in plugin KitPvP v2.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:701) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.handleCommand(PlayerConnection.java:956) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:817) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.IllegalArgumentException: Name cannot be null
        at org.apache.commons.lang.Validate.notNull(Validate.java:203) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.getPlayer(CraftServer.java:487) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at ChatManager.Msg.onCommand(Msg.java:84) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        ... 13 more
    [19:36:24 INFO]: TheFl4me issued server command: /r
    
    Here is a up to date version of my code:

    Code:
    package ChatManager;
    
    import java.util.HashMap;
    
    import KitPvP.AFK;
    import Main.Main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    public class Msg implements CommandExecutor {
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
         
            HashMap<String, String> lastSentMessages = new HashMap<String, String>();
         
            String message = "";
            String usage = "§cUsage: /msg <player> <message>";
         
            if(!(sender instanceof Player)){
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                    if(args.length <= 1) {
                        p.sendMessage(usage);
                    }
                    if(args.length >= 2){
                        Player z = p.getServer().getPlayerExact(args[0]);
                        if(z != null) {
                            for(int i = 1; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(z)) {
                                p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                            }
                            z.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                            p.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                            lastSentMessages.put(p.getName(), z.getName());
                            message = "";
                        }
                        else {
                            p.sendMessage(Main.notarget);
                        }
                    }
                    return true;
                } 
                return true;
            }
            Player p = (Player) sender;
            if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                if(args.length <= 1) {
                    p.sendMessage(usage);
                }
                if(args.length >= 2) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(z != null) {
                        for(int i = 1; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(z)) {
                            p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                        }
                        z.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                        p.sendMessage("§7<"+p.getName()+" -> "+z.getName()+ "> "+message);
                        lastSentMessages.put(p.getName(), z.getName());
                        message = "";
                    }
                    else {
                        p.sendMessage(Main.notarget);
                    }
                }
                return true;
            }
            if((cmd.getName().equalsIgnoreCase("r")) || (cmd.getName().equalsIgnoreCase("reply"))) {
                if(args.length == 0) {
                    p.sendMessage("§cUsage: /r <message>");
                }
                if(args.length >= 1) {
                    Player z = Bukkit.getServer().getPlayer(lastSentMessages.get(p.getName()));
                    if(lastSentMessages.containsKey(z)) {
                        for(int i = 0; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(lastSentMessages.get(z.getName()))) {
                            p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                        }
                        Bukkit.broadcastMessage("§atest");
                        p.sendMessage("§7<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                        z.sendMessage("§7<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                        lastSentMessages.put(p.getName(), z.getName());
                        message = "";
                    }
                    else {
                        p.sendMessage("§cYou have nobody to reply too");
                    }
                }
            }
            return true;
        }
    }
    I will literally hug you (no homo) if you manage to solve this, you have no idea for how long i have been having this problem
     
    Last edited: Feb 28, 2015
  4. Spoon feed over 9000 and something are really bad
    Show Spoiler

    MSG class
    Code:java
    1.  
    2. public String getMessage(String[] args) {
    3. StringBuilder sb = new StringBuilder();
    4. for(int i = 1 ; i < args.length; i++){ // change 1
    5. sb.append(args[I]).append(" ");
    6. }
    7. return sb.toString();
    8. }
    9. public void sendFullMsg(Player player, Player target, String message) {
    10. String format = plugin.messages().getMessage().getString("MsgCommand.MsgMessage");
    11. format = format.replaceAll("<player>", plugin.messages().getMessage().getString("MsgCommand.Me"));
    12. format = format.replaceAll("<target>", target.getDisplayName());
    13. format = format.replaceAll("<message>", message);
    14. plugin.sendMsg(player, format);
    15. }
    16. public void receiveFullMsg(Player player, Player target, String message) {
    17. String format = plugin.messages().getMessage().getString("MsgCommand.MsgMessage");
    18. format = format.replaceAll("<player>", player.getDisplayName());
    19. format = format.replaceAll("<target>", plugin.messages().getMessage().getString("MsgCommand.Me"));
    20. format = format.replaceAll("<message>", message);
    21. plugin.sendMsg(target, format);
    22. }
    23. public Player getTarget(String string) {
    24. Player found = null;
    25. String lowerName = string.toLowerCase();
    26. int delta = Integer.MAX_VALUE;
    27. for (Player player : Bukkit.getOnlinePlayers()) {
    28. if (player.getName().toLowerCase().startsWith(lowerName)) {
    29. int curDelta = player.getName().length() - lowerName.length();
    30. if (curDelta < delta) {
    31. found = player;
    32. delta = curDelta;
    33. }
    34. if (curDelta == 0) break;
    35. }
    36. }
    37. return found;
    38. }
    39. @Override
    40. public boolean onCommand(CommandSender sender, Command cmds, String cmd, String[] args) {
    41. if(!(sender instanceof Player)) { sender.sendMessage("Only runnable from in-game"); return true; }
    42. Player player = (Player) sender;
    43. if(!player.hasPermission("ultimatespy.msg")) { plugin.sendMsg(player, plugin.messages().getMessage().getString("Messages.NoPermissions")); return true; }
    44. if(args.length == 0) { plugin.sendMsg(player, plugin.messages().getMessage().getString("MsgCommand.HelpCommand").replaceAll("<command>", cmd)); return true; }
    45. if(args.length == 1) { plugin.sendMsg(player, plugin.messages().getMessage().getString("MsgCommand.HelpCommand").replaceAll("<command>", cmd)); return true; }
    46. if(args.length >= 2) {
    47. Player target = getTarget(args[0]);
    48. if(target == null) { plugin.sendMsg(player, plugin.messages().getMessage().getString("MsgCommand.PlayerNotFound")); return true; }
    49. sendFullMsg(player, target, getMessage(args));
    50. receiveFullMsg(player, target, getMessage(args));
    51. plugin.reply.put(player, target);
    52. plugin.reply.put(target, player);
    53. plugin.engine().onMsg(player, target, getMessage(args));
    54. }
    55.  
    56. return true;
    57. }
    58. }
    59. [/I]

    REPLY class
    Code:java
    1.  
    2. public String getMessage(String[] args) {
    3. StringBuilder sb = new StringBuilder();
    4. for(int i = 0; i < args.length; i++){ // change 1
    5. sb.append(args[I]).append(" ");
    6. }
    7. return sb.toString();
    8. }
    9. public void sendFullMsg(Player player, Player target, String message) {
    10. String format = plugin.messages().getMessage().getString("MsgCommand.MsgMessage");
    11. format = format.replaceAll("<player>", target.getDisplayName());
    12. format = format.replaceAll("<target>", plugin.messages().getMessage().getString("MsgCommand.Me"));
    13. format = format.replaceAll("<message>", message);
    14. plugin.sendMsg(target, format);
    15. }
    16. public void receiveFullMsg(Player player, Player target, String message) {
    17. String format = plugin.messages().getMessage().getString("MsgCommand.MsgMessage");
    18. format = format.replaceAll("<player>", plugin.messages().getMessage().getString("MsgCommand.Me"));
    19. format = format.replaceAll("<target>", target.getDisplayName());
    20. format = format.replaceAll("<message>", message);
    21. plugin.sendMsg(player, format);
    22. }
    23. @Override
    24. public boolean onCommand(CommandSender sender, Command cmds, String cmd, String[] args) {
    25. if(!(sender instanceof Player)) { sender.sendMessage("Only runnable from in-game"); return true; }
    26. Player player = (Player) sender;
    27. if(!player.hasPermission("ultimatespy.reply")) { plugin.sendMsg(player, plugin.messages().getMessage().getString("Messages.NoPermissions")); return true; }
    28. if(args.length == 0) { plugin.sendMsg(player, plugin.messages().getMessage().getString("MsgCommand.HelpReply").replaceAll("<command>", cmd)); return true; }
    29. if(args.length >= 1) {
    30. if(!plugin.reply.containsKey(player)) { plugin.sendMsg(player, plugin.messages().getMessage().getString("MsgCommand.NobodyToReply")); return true; }
    31. Player target = plugin.reply.get(player);
    32. if(target == null) { plugin.sendMsg(player, plugin.messages().getMessage().getString("MsgCommand.PlayerNotFound")); return true; }
    33. sendFullMsg(player, target, getMessage(args));
    34. receiveFullMsg(player, target, getMessage(args));
    35. plugin.engine().onMsg(player, target, getMessage(args));
    36. }
    37. return true;
    38. }
    39. [/I]

     
  5. Offline

    TheFl4me

    I'm sorry but i did not understand any of that please acknowledge the fact that i am very new to coding.

    Could you please give me a more detailed explanation of your reply?

    thx
     
  6. Okay, give me 30 min .

    Code:java
    1.  
    2. //Color all messages
    3. public String color(String text) {
    4. return ChatColor.translateAlternateColorCodes('&', text);
    5. }
    6. //Okay what we gonna do with this ? With this you get a player just with a parti of his name
    7. // if we use a command like this "/msg mata what's up" the command will send me a message,
    8. //even when my name is "MaTaMoR_", if we try to do this with Bukkit.getPlayerExact("mata") it won't work
    9. //cuz it search for a player called "mata" and not player with similar name
    10. public Player getTarget(String string) {
    11. Player found = null;
    12. String lowerName = string.toLowerCase();
    13. int delta = Integer.MAX_VALUE;
    14. for (Player player : Bukkit.getOnlinePlayers()) {
    15. if (player.getName().toLowerCase().startsWith(lowerName)) {
    16. int curDelta = player.getName().length() - lowerName.length();
    17. if (curDelta < delta) {
    18. found = player;
    19. delta = curDelta;
    20. }
    21. if (curDelta == 0) break;
    22. }
    23. }
    24. return found;
    25. }
    26. //What this does ? With this we can get the message
    27. //what i mean ? get the message from the command
    28. //we not gonna set the whole command /msg <player> what's up
    29. //we only wanna send "what's up" so with this we can do it
    30.  
    31. private Map<UUID, UUID> reply = new HashMap<>();
    32.  
    33. public String getMessage(String[] args, Integer value) {
    34. StringBuilder sb = new StringBuilder();
    35. for(int i = value; i < args.length; i++){ // change 1
    36. sb.append(args).append(" ");
    37. }
    38. return sb.toString();
    39. }
    40. public String sendFormat() {
    41. //[You -> MaTaMoR_] What's up
    42. return color("&7[&eYou &7-> &e<Target>&7] &r<Message>");
    43. }
    44. public String receiveFormat() {
    45. //[MaTaMoR_ -> You] What's up
    46. return color("&7[&e<Sender> &7-> &eYou&7] &r<Message>");
    47. }
    48.  
    49. public void send(Player me, String targetname, String message) {
    50. //Now we replace <Target> for target name and <Message> for the message
    51. String msg = sendFormat();
    52. msg = msg.replace("<Target>", targetname);
    53. msg = msg.replace("<Message>", message);
    54. //And now we send the message
    55. me.sendMessage(color(msg));
    56. }
    57. public void receive(Player you, String sendername, String message) {
    58. //Now we replace <Sender> for sender name and <Message> for the message
    59. String msg = receiveFormat();
    60. msg = msg.replace("<Sender>", sendername);
    61. msg = msg.replace("<Message>", message);
    62. //And now we send the message
    63. you.sendMessage(color(msg));
    64. }
    65.  
    66. @Override //You should know how almost everything works here
    67. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    68. if(!(sender instanceof Player)) { sender.sendMessage(color("&4Only runnable from in-game")); return true; }
    69. Player player = (Player) sender;
    70. if(cmd.getName().equalsIgnoreCase("msg")) {
    71. if(args.length == 0) {
    72. player.sendMessage(color("&7/msg <player> message"));
    73. } else if(args.length == 1) {
    74. player.sendMessage(color("&7/msg <player> message"));
    75. } else {
    76. String message = getMessage(args, 1); //Now we get the message after <player>
    77. Player target = getTarget(args[0]);
    78.  
    79. if(target != null) { //If the target is online
    80.  
    81. send(player, target.getDisplayName(), message);
    82. receive(target, player.getDisplayName(), message);
    83.  
    84. reply.put(player.getUniqueId(), target.getUniqueId());
    85. reply.put(target.getUniqueId(), target.getUniqueId());
    86.  
    87. } else { //If the target is not online
    88. player.sendMessage(color("&4&l" + args[0] + " &4that player is not online"));
    89. }
    90. }
    91. return true;
    92. }
    93. if(cmd.getName().equalsIgnoreCase("reply")) {
    94. if(args.length == 0) {
    95. player.sendMessage(color("&7/reply <message>"));
    96. if(reply.containsKey(player.getUniqueId())) { //If the map contains our uuid
    97. UUID targetid = reply.get(player.getUniqueId());
    98.  
    99. //If the player to reply is online
    100. if(Bukkit.getPlayer(targetid) != null) {
    101.  
    102. Player target = Bukkit.getPlayer(targetid);
    103. String message = getMessage(args, 0); //Now we get the message after /reply
    104.  
    105. send(player, target.getDisplayName(), message);
    106. receive(target, player.getDisplayName(), message);
    107.  
    108. } else { //If the player to reply is not online
    109. reply.remove(player.getUniqueId());
    110. reply.remove(targetid);
    111. player.sendMessage(color("&4You don't have anybody to reply"));
    112. }
    113. } else { //The map don't contain our uuid, so that means we don't have nobody to reply
    114. player.sendMessage(color("&4You don't have anybody to reply"));
    115. }
    116. }
    117. }
    118. return true;
    119. }
    120.  

    Thx e.e

    PD : Code not tested

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 13, 2016
  7. Offline

    TheFl4me

    Thank you for your efforts but i think there was a misunderstanding i do not want to recode my entire msg class (if possible) i simply want to find a fix to the error i am getting.

    That being said i will definitly look into your class and see if i learn something out of it :)

    again sorry for the waste of time although i your help is/was much appreciated.

    EDIT: Ok so i took 1 or 2 things out of your code but im still geting the same error

    current code:
    Code:
    package ChatManager;
    
    import java.util.HashMap;
    
    import KitPvP.AFK;
    import Main.Main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    public class Msg implements CommandExecutor {
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
           
            HashMap<String, String> lastSentMessages = new HashMap<String, String>();
           
            String message = "";
            String usage = "§cUsage: /msg <player> <message>";
           
            if(!(sender instanceof Player)){
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                    if(args.length <= 1) {
                        p.sendMessage(usage);
                    }
                    if(args.length >= 2){
                        Player z = p.getServer().getPlayerExact(args[0]);
                        if(z != null) {
                            for(int i = 1; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(z)) {
                                p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                            }
                            z.sendMessage("§7<" + p.getName() + " -> " + z.getName() + "> "+message);
                            p.sendMessage("§7<" + p.getName() + " -> " + z.getName() + "> "+message);
                            lastSentMessages.put(p.getName(), z.getName());
                            lastSentMessages.put(z.getName(), z.getName());
                            message = "";
                        }
                        else {
                            p.sendMessage(Main.notarget);
                        }
                    }
                    return true;
                }   
                return true;
            }
            Player p = (Player) sender;
            if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                if(args.length <= 1) {
                    p.sendMessage(usage);
                }
                if(args.length >= 2) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(z != null) {
                        for(int i = 1; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(z)) {
                            p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                        }
                        z.sendMessage("§7<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        p.sendMessage("§7<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        lastSentMessages.put(p.getName(), z.getName());
                        lastSentMessages.put(z.getName(), z.getName());
                        message = "";
                    }
                    else {
                        p.sendMessage(Main.notarget);
                    }
                }
                return true;
            }
            if((cmd.getName().equalsIgnoreCase("r")) || (cmd.getName().equalsIgnoreCase("reply"))) {
                if(args.length == 0) {
                    p.sendMessage("§cWrong syntax! Usage: /r <message>");
                }
                if(args.length >= 1) {
                    Player z = Bukkit.getServer().getPlayer(lastSentMessages.get(p.getName()));
                    if(lastSentMessages.containsKey(p.getName())) {
                        if(z != null) {   
                            for(int i = 0; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(lastSentMessages.get(z.getName()))) {
                                p.sendMessage(z.getDisplayName() + " §cis currently afk and probably won't respond");
                            }
                            z.sendMessage("§7<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                            p.sendMessage("§7<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                            lastSentMessages.put(p.getName(), z.getName());
                            lastSentMessages.put(z.getName(), z.getName());
                            message = "";
                        }
                        else {
                            lastSentMessages.remove(p.getName());
                            p.sendMessage("§4Your chat partner is no longer online");
                        }
                    }
                    else {
                        p.sendMessage("§4You have nobody to reply to");
                    }
                }
            }
            return true;
        }
    }
     
    Last edited: Feb 28, 2015
  8. Offline

    jebbo

    Don't put
    HashMap<String, String> lastSentMessages =new HashMap<String, String>();
    inside the onCommand.
     
  9. Offline

    TheFl4me

    changed that. Still shows the same error :/

    Code:
    public class Msg implements CommandExecutor {
       
        HashMap<String, String> lastSentMessages = new HashMap<String, String>();
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
     
  10. Offline

    mythbusterma

    @TheFl4me

    Your issue is one of scope. The HashMap is declared in the scope of the onCommand method, and will be destroyed (effectively) upon the completion of said method. Place it in a scope that will be maintained between method calls (i.e. above the method).
     
  11. Offline

    TheFl4me

    like i already said above:

     
  12. Offline

    mythbusterma

    @TheFl4me

    Well then something else is causing that issue as well. Because that will inevitably cause that issue.
     
  13. Offline

    xTigerRebornx

    @TheFl4me The order of your code is wrong. You try to get a Player from the name in the Map before checking if there is even a name in the Map to begin with
     
  14. Offline

    TheFl4me

    Ok i fixed that, now atleast im not getting the error anymore, but now its just keeps saying "You have nobody to reply to".

    Code:
    package ChatManager;
    
    import java.util.HashMap;
    
    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.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    import KitPvP.AFK;
    import Main.Main;
    
    public class Msg implements CommandExecutor {
       
        HashMap<String, String> lastSentMessages = new HashMap<String, String>();
       
        String message = "";
        String usage = "§cUsage: /msg <player> <message>";
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
           
            if(!(sender instanceof Player)){
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                    if(args.length <= 1) {
                        p.sendMessage(usage);
                    }
                    if(args.length >= 2){
                        Player z = p.getServer().getPlayerExact(args[0]);
                        if(z != null) {
                            for(int i = 1; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(z)) {
                                p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                            }
                            z.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + z.getName() + "> " + message);
                            p.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + z.getName() + "> " + message);
                            lastSentMessages.put(p.getName(), z.getName());
                            message = "";
                        }
                        else {
                            p.sendMessage(Main.notarget);
                        }
                    }
                    return true;
                }   
                return true;
            }
            Player p = (Player) sender;
            if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                if(args.length <= 1) {
                    p.sendMessage(usage);
                }
                if(args.length >= 2) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(z != null) {
                        for(int i = 1; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(z)) {
                            p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                        }
                        z.sendMessage(ChatColor.GRAY + "<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        p.sendMessage(ChatColor.GRAY + "<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        lastSentMessages.put(p.getName(), z.getName());
                        message = "";
                    }
                    else {
                        p.sendMessage(Main.notarget);
                    }
                }
                return true;
            }
            if((cmd.getName().equalsIgnoreCase("r")) || (cmd.getName().equalsIgnoreCase("reply"))) {
                if(args.length == 0) {
                    p.sendMessage(ChatColor.RED + "Wrong syntax! Usage: /r <message>");
                }
                if(args.length >= 1) {
                    if(lastSentMessages.containsKey(p.getName())) {
                        Player z = Bukkit.getServer().getPlayer(lastSentMessages.get(p.getName()));
                        if(z != null) {   
                            for(int i = 0; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(lastSentMessages.get(z.getName()))) {
                                p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                            }
                            z.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                            p.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + lastSentMessages.get(z.getName()) + "> " + message);
                            lastSentMessages.put(p.getName(), z.getName());
                            lastSentMessages.put(z.getName(), z.getName());
                            message = "";
                        }
                        else {
                            lastSentMessages.remove(p.getName());
                            p.sendMessage(ChatColor.DARK_RED + "Your chat partner is no longer online");
                        }
                    }
                    else {
                        p.sendMessage("§4You have nobody to reply to");
                    }
                }
            }
            return true;
        }
    }
     
  15. Offline

    xTigerRebornx

    @TheFl4me Debug your code and see where it isn't properly storing the last name.
     
  16. Offline

    TheFl4me

    I have no idea how to debug like i said before i am quite new to coding
     
  17. Offline

    jebbo

    How did you end up with this code if you can't even debug?
     
  18. Offline

    TheFl4me

    I "learned" most of java by myself by simply looking at other src codes and stuff, and yes i know this is definitly not the best way to learn java but i dont have the patience nor the timeto read 3k books or videos to learn java.
     
  19. Offline

    bazsi700

    How you try to use the plugin?
    There are A and B. You are A, someone else is B. You use /msg B Hello!
    Option 1.
    B try to use /r Hello!
    Option 2.
    You try to use /r How are you?
     
  20. Offline

    TheFl4me

    I am messaging myself so both

    EDIT: i tested it with a friend of mine and neither of the options worked
     
    Last edited: Mar 1, 2015
  21. Offline

    bazsi700

    @TheFl4me I have no idea. I'm going to test the code.
     
  22. Offline

    TheFl4me

    anyone?
     
  23. Offline

    guitargun

    @TheFl4me I did a quick look.
    for me this is what seems to happen:
    1. you /msg <friend> message
    2. the map stores it as <you>,<friend>
    3. when friend uses /r the if statement checks is the friend is as key in the map. that will be false since your friend is an value in the map. fix for this is with a or in the same statement

    now for the 2 commands. I bet your main class haves 2 of the
    Code:
    new CommandExe(this),this);
    this will result that the hashmap isn't synchronized with the other CommandExe reference in the memory upon loading the plugin. fix for this will be in your main to make 1 instance of the CommandExe and use it in the both slots where now is new CommandExe(this);
    OR
    use a static. but be warned. not every use of static is approved
     
  24. Offline

    TheFl4me

    Ok i am not really understanding what you mean by "or" statement.

    but i now changed my classes a bit (inculding making a public static in the main class called "reply" instead of lastsentmessages (to make stuff easier)) but now when i try sending a msg with /msg or /tell it sends the message but also with a nullpointerexeption error. and when i do /r i only get the error nullpointerexeption.

    Main:

    Code:
    package Main;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scheduler.BukkitRunnable;
    
    import AdminMode.Admin;
    import AdminMode.Invis;
    import AdminMode.Invsee;
    import AdminMode.Silent;
    import AdminMode.Vis;
    import AdminMode.Watch;
    import BanManager.Ban;
    import BanManager.BanInfo;
    import BanManager.BanListener;
    import BanManager.Unban;
    import ChatManager.ChatClear;
    import ChatManager.ChatListener;
    import ChatManager.ChatToggler;
    import ChatManager.Msg;
    import ChatManager.Mute;
    import ChatManager.MuteListener;
    import ChatManager.Unmute;
    import KitPvP.AFK;
    import KitPvP.Clear;
    import KitPvP.Fly;
    import KitPvP.Kill;
    import KitPvP.Kits;
    import KitPvP.PvPToggle;
    import KitPvP.SetSpawn;
    import KitPvP.Spawn;
    import KitPvP.Staff;
    import KitPvP.Tag;
    import KitPvP.Warp;
    import Kits.Backup;
    import Kits.Thor;
    import Listeners.AFKListener;
    import Listeners.AdminListener;
    import Listeners.DeathMessageListener;
    import Listeners.FlyListener;
    import Listeners.HelpListener;
    import Listeners.JoinQuitListener;
    import Listeners.KitGUIEvents;
    import Listeners.KitSecondGUIEvents;
    import Listeners.PvPToggleListener;
    import Listeners.RespawnListener;
    import Listeners.SoupListener;
    import Listeners.StaffChat;
    import Listeners.TagListener;
    import Listeners.WatchListener;
    
    public class Main extends JavaPlugin implements Listener, CommandExecutor {
       
        public static String noperm = "Unknown command.";
        public static String givekit = ChatColor.GREEN + "You are now a ";
        public static String onekitperlife = ChatColor.RED + "You can only use one kit per life!";
        public static String notarget = ChatColor.DARK_RED + "Player not found";
        public static String nopermkit = ChatColor.RED + "You do not own this kit, do /kit to see your kits";
        public static String onlyplayer = ChatColor.DARK_RED + "Only players can do this";
       
        public static HashMap<Player, Integer> cooldownTime;
        public static HashMap<Player, BukkitRunnable> cooldownTask;
        public static HashMap<String, String> reply;
       
        public void onEnable() {
           
            cooldownTime = new HashMap<Player, Integer>();
            cooldownTask = new HashMap<Player, BukkitRunnable>();
           
            getCommand("admin").setExecutor(new Admin());
            getCommand("invis").setExecutor(new Invis());
            getCommand("invisible").setExecutor(new Invis());
            getCommand("vis").setExecutor(new Vis());
            getCommand("visible").setExecutor(new Vis());
            getCommand("fly").setExecutor(new Fly());
            getCommand("cc").setExecutor(new ChatClear());
            getCommand("gmute").setExecutor(new ChatToggler());
            getCommand("inv").setExecutor(new Invsee());
            getCommand("watch").setExecutor(new Watch());
            getCommand("clear").setExecutor(new Clear());
            getCommand("msg").setExecutor(new Msg());
            getCommand("tell").setExecutor(new Msg());
            getCommand("r").setExecutor(new Msg());
            getCommand("reply").setExecutor(new Msg());
            getCommand("spawn").setExecutor(new Spawn());
            getCommand("setspawn").setExecutor(new SetSpawn());
            getCommand("tag").setExecutor(new Tag());
            getCommand("nametag").setExecutor(new Tag());
            getCommand("afk").setExecutor(new AFK());
            getCommand("suicide").setExecutor(new Kill());
            getCommand("kill").setExecutor(new Kill());
            getCommand("pvp").setExecutor(new PvPToggle());
            getCommand("kit").setExecutor(new Kits());
            getCommand("mute").setExecutor(new Mute());
            getCommand("unmute").setExecutor(new Unmute());
            getCommand("ban").setExecutor(new Ban());
            getCommand("unban").setExecutor(new Unban());
            getCommand("baninfo").setExecutor(new BanInfo());
            getCommand("seen").setExecutor(new BanInfo());
            getCommand("warp").setExecutor(new Warp());
            getCommand("staff").setExecutor(new Staff());
            getCommand("silent").setExecutor(new Silent());
           
            System.out.println("-----------------------------------");
            System.out.println("|KitPvP plugin by TheFl4me ENABLED|");
            System.out.println("-----------------------------------");
           
            getServer().getPluginManager().registerEvents(new AdminListener(), this);
            getServer().getPluginManager().registerEvents(new WatchListener(), this);
            getServer().getPluginManager().registerEvents(new FlyListener(), this);
            getServer().getPluginManager().registerEvents(new ChatListener(), this);
            getServer().getPluginManager().registerEvents(new MuteListener(), this);
            getServer().getPluginManager().registerEvents(new BanListener(), this);
            getServer().getPluginManager().registerEvents(new SoupListener(), this);
            getServer().getPluginManager().registerEvents(new DeathMessageListener(), this);
            getServer().getPluginManager().registerEvents(new RespawnListener(), this);
            getServer().getPluginManager().registerEvents(new TagListener(), this);
            getServer().getPluginManager().registerEvents(new StaffChat(), this);
            getServer().getPluginManager().registerEvents(new AFKListener(), this);
            getServer().getPluginManager().registerEvents(new HelpListener(), this);
            getServer().getPluginManager().registerEvents(new PvPToggleListener(), this);
            getServer().getPluginManager().registerEvents(new JoinQuitListener(), this);
            getServer().getPluginManager().registerEvents(new KitGUIEvents(), this);
            getServer().getPluginManager().registerEvents(new KitSecondGUIEvents(), this);
            getServer().getPluginManager().registerEvents(new Backup(), this);
            getServer().getPluginManager().registerEvents(new Thor(), this);
           
            try {
                File file = new File("plugins//KitPvP//PvPStatus.yml");
                YamlConfiguration cfg = YamlConfiguration.loadConfiguration(file);
                if(!file.exists()) {
                    file.createNewFile();
                    cfg.set("pvp", "true");
                    cfg.save(file);
                }
            }
            catch (IOException e) {
                System.out.println("Directory was not found");
            }
        }
       
        public void checkUserdataOrdner() {
            File file = new File("plugins//KitPvP//userdata");
            if(!file.isDirectory()) {
                file.mkdir();
            }
        }
    }
    Msg class:

    Code:
    package ChatManager;
    
    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.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    import KitPvP.AFK;
    import Main.Main;
    
    public class Msg implements CommandExecutor {
       
        String message = "";
        String usage = ChatColor.RED + "Usage: /msg <player> <message>";
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
           
            if(!(sender instanceof Player)){
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                    if(args.length >= 2){
                        Player z = p.getServer().getPlayerExact(args[0]);
                        if(z != null) {
                            for(int i = 1; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(z)) {
                                p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                            }
                            z.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + z.getName() + "> " + message);
                            p.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + z.getName() + "> " + message);
                            Main.reply.put(p.getName(), z.getName());
                            message = "";
                        }
                        else {
                            p.sendMessage(Main.notarget);
                        }
                    }
                    else {
                        p.sendMessage(usage);
                    }
                }   
                return true;
            }
            Player p = (Player) sender;
            if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                if(args.length >= 2) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(z != null) {
                        for(int i = 1; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(z)) {
                            p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                        }
                        z.sendMessage(ChatColor.GRAY + "<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        p.sendMessage(ChatColor.GRAY + "<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        Main.reply.put(p.getName(), z.getName());
                        message = "";
                    }
                    else {
                        p.sendMessage(Main.notarget);
                    }
                }
                else {
                    p.sendMessage(usage);
                }
            }
            if((cmd.getName().equalsIgnoreCase("r")) || (cmd.getName().equalsIgnoreCase("reply"))) {
                if(args.length >= 1) {
                    if(Main.reply.containsKey(p.getName())) {
                        Player z = Bukkit.getServer().getPlayer(Main.reply.get(p.getName()));
                        if(z != null) {   
                            for(int i = 0; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(Main.reply.get(z.getName()))) {
                                p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                            }
                            z.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + Main.reply.get(z.getName()) + "> " + message);
                            p.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + Main.reply.get(z.getName()) + "> " + message);
                            Main.reply.put(p.getName(), z.getName());
                            message = "";
                        }
                        else {
                            Main.reply.remove(p.getName());
                            p.sendMessage(ChatColor.DARK_RED + "Your chat partner is no longer online");
                        }
                    }
                    else {
                        p.sendMessage(ChatColor.DARK_RED + "You have nobody to reply to");
                    }
                }
                else {
                    p.sendMessage(ChatColor.RED + "Wrong syntax! Usage: /r <message>");
                }
            }
            return true;
        }
    }
     
  25. Offline

    guitargun

    @TheFl4me
    can I see the stacktrace. that is better to debug with

    edit:
    with the "or" I mean the ||
     
    Last edited: Mar 2, 2015
  26. Offline

    TheFl4me

    Code:
    [19:14:17 INFO]: TheFl4me issued server command: /msg TheFl4me hi
    [19:14:17 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'msg' in plugin KitPvP v2.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:701) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.handleCommand(PlayerConnection.java:956) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:817) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.NullPointerException
        at ChatManager.Msg.onCommand(Msg.java:63) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        ... 13 more
    [19:14:34 INFO]: TheFl4me issued server command: /r test
    [19:14:34 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'r' in plugin KitPvP v2.0.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:701) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.handleCommand(PlayerConnection.java:956) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:817) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.NullPointerException
        at ChatManager.Msg.onCommand(Msg.java:76) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit1.7.10.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
        ... 13 more
    
     
  27. Offline

    guitargun

    @TheFl4me you never finished the part what needs to be after:
    Code:
        public static HashMap<String, String> reply;
     
  28. Offline

    TheFl4me

    Ok i did that.

    Now... it works fine (/r and /msg) when i msg myself BUT:

    When i message a friend and then I do /r (without him sending me a msg) it gives me this:

    <TheFl4me -> null> test

    when a friend sends me a msg and i do /r it does:

    <TheFl4me -> TheFl4me> test

    EDIT: NVM I MANAGED TO FIX IT FINALLY!!!

    here is the (wroking) end result

    Code:
    package ChatManager;
    
    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.command.ConsoleCommandSender;
    import org.bukkit.entity.Player;
    
    import KitPvP.AFK;
    import Main.Main;
    
    public class Msg implements CommandExecutor {
       
        String message = "";
        String usage = ChatColor.RED + "Usage: /msg <player> <message>";
    
        @SuppressWarnings("deprecation")
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
           
            if(!(sender instanceof Player)) {
                ConsoleCommandSender p = (ConsoleCommandSender) sender;
                if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                    if(args.length >= 2){
                        Player z = p.getServer().getPlayerExact(args[0]);
                        if(z != null) {
                            for(int i = 1; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(z)) {
                                p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                            }
                            z.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + z.getName() + "> " + message);
                            p.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + z.getName() + "> " + message);
                            message = "";
                        }
                        else {
                            p.sendMessage(Main.notarget);
                        }
                    }
                    else {
                        p.sendMessage(usage);
                    }
                }   
                return true;
            }
            Player p = (Player) sender;
            if((cmd.getName().equalsIgnoreCase("msg")) || (cmd.getName().equalsIgnoreCase("tell"))) {
                if(args.length >= 2) {
                    Player z = p.getServer().getPlayerExact(args[0]);
                    if(z != null) {
                        for(int i = 1; i < args.length; i++){
                            message = message + args[i] + " ";
                        }
                        if(AFK.afk.contains(z)) {
                            p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                        }
                        z.sendMessage(ChatColor.GRAY + "<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        p.sendMessage(ChatColor.GRAY + "<" + p.getName()+" -> " + z.getName()+ "> " + message);
                        Main.reply.put(p.getName(), z.getName());
                        Main.reply.put(z.getName(), p.getName());
                        message = "";
                    }
                    else {
                        p.sendMessage(Main.notarget);
                    }
                }
                else {
                    p.sendMessage(usage);
                }
            }
            if((cmd.getName().equalsIgnoreCase("r")) || (cmd.getName().equalsIgnoreCase("reply"))) {
                if(args.length >= 1) {
                    if(Main.reply.containsKey(p.getName())) {
                        Player z = Bukkit.getServer().getPlayer(Main.reply.get(p.getName()));
                        if(z != null) {   
                            for(int i = 0; i < args.length; i++){
                                message = message + args[i] + " ";
                            }
                            if(AFK.afk.contains(Main.reply.get(z.getName()))) {
                                p.sendMessage(z.getDisplayName() + ChatColor.RED + " is currently afk and probably won't respond");
                            }
                            z.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + Main.reply.get(p.getName()) + "> " + message);
                            p.sendMessage(ChatColor.GRAY + "<" + p.getName() + " -> " + Main.reply.get(p.getName()) + "> " + message);
                            Main.reply.put(p.getName(), z.getName());
                            message = "";
                        }
                        else {
                            Main.reply.remove(p.getName());
                            p.sendMessage(ChatColor.DARK_RED + "Your chat partner is no longer online");
                        }
                    }
                    else {
                        p.sendMessage(ChatColor.DARK_RED + "You have nobody to reply to");
                    }
                }
                else {
                    p.sendMessage(ChatColor.RED + "Wrong syntax! Usage: /r <message>");
                }
            }
            return true;
        }
    }
    Thanks alot to everybody who helped me with this case :)
     
    Last edited: Mar 3, 2015
Thread Status:
Not open for further replies.

Share This Page