/msg and /r | Not Working! Help!

Discussion in 'Plugin Development' started by mrgreen33gamer, Dec 4, 2014.

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

    mrgreen33gamer

    Hello!

    I am need of some help, no matter what I try, I can never get the player from the HashMap being set whenever /msg'ed. Here is my Error code:

    Code:
    04.12 02:38:45 [Server] INFO ... 13 more
    04.12 02:38:45 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at com.mrgreen33gamer.kits.OtherCommands.onCommand(OtherCommands.java:423) ~[?:?]
    04.12 02:38:45 [Server] INFO Caused by: java.lang.NullPointerException
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:818) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at net.minecraft.server.v1_7_R4.PlayerConnection.handleCommand(PlayerConnection.java:957) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    04.12 02:38:45 [Server] INFO org.bukkit.command.CommandException: Unhandled exception executing command 'r' in plugin GFKits v4.0
    04.12 02:38:45 [Server] ERROR null
    Commands:
    Code:java
    1.  
    2. if(commandLabel.equalsIgnoreCase("r")){
    3. if(sender instanceof Player){
    4. Player player = (Player)sender;
    5. if(args.length == 0){
    6. if(!replyCommand.containsKey(player.getName())){
    7. player.sendMessage(ChatColor.GREEN + "You are currently in no conversation with anyone!");
    8. return true;
    9. }
    10. player.sendMessage(ChatColor.RED + "/r message message message");
    11. }else if(args.length >= 1){
    12. Player sendTo = Bukkit.getPlayer(replyCommand.get(player.getName()));
    13. String message = "";
    14. for (String part : args) {
    15. if (message != "") message += " ";
    16. message += part;
    17. }
    18. player.sendMessage(ChatColor.GRAY + "<Me ====> " + sendTo.getPlayer().getName() + "> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + message);
    19. sendTo.getPlayer().sendMessage(ChatColor.GRAY + "<" + player.getName() + " ====> Me> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + message);
    20. }
    21. }else{
    22. sender.sendMessage("In-Game players only!");
    23. }
    24. }
    25.  
    26. if(commandLabel.equalsIgnoreCase("msg")){
    27. if(sender instanceof Player){
    28. Player player = (Player)sender;
    29. if(args.length == 0){
    30. player.sendMessage(ChatColor.GOLD + "Msg" + ChatColor.GRAY + "> " + ChatColor.GREEN + "Like: /msg (username) (message)...");
    31. }else if(args.length == 1){
    32. Player msging = Bukkit.getServer().getPlayer(args[0]);
    33. if(msging == null){
    34. KitPref.noOnlinePlayer(player);
    35. return true;
    36. }
    37. }else if(args.length >= 2){
    38. Player msging = Bukkit.getServer().getPlayer(args[0]);
    39. if(msging == null){
    40. KitPref.noOnlinePlayer(player);
    41. return true;
    42. }
    43. String m = "";
    44. for (int i = 1; i < args.length; i++) {
    45. m = m + args[i] + (i != args.length - 1 ? " " : "");
    46. }
    47. player.sendMessage(ChatColor.GRAY + "<Me ====> " + msging.getName() + "> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + m); //Line 423
    48. msging.sendMessage(ChatColor.GRAY + "<" + player.getName() + " ====> Me> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + m);
    49. replyCommand.put(player.getUniqueId(), msging.getUniqueId());
    50. }
    51. }else if(sender instanceof ConsoleCommandSender){
    52. sender.sendMessage("In-Game players only!");
    53. }else{
    54. sender.sendMessage("In-Game players only!");
    55. }
    56. }
    57. [/i]
     
  2. mrgreen33gamer Line 423 of OtherCommands is causing you issues. Additionally:

    1. Check the command name, not the command label, as checking the name adds support for aliases.
    2. Look into StringBuilder - don't append Strings in a loop, as doing so creates a new String each time, wasting a lot of resources.
    3. Don't call getPlayer() on a Player, that's redundant.
     
  3. Offline

    mrgreen33gamer

    AdamQpzm Tried all of them Nothing....
     
  4. Offline

    user_90854156

    You are storing the UUID for the key and value, but when you try to get the value you use player.getName()
     
  5. Offline

    mrgreen33gamer

    MrTang Here is my updated code, still I get the error whenever I send the message to the player. player.sendMessage();

    Code:java
    1.  
    2. if(commandLabel.equalsIgnoreCase("r")){
    3. if(sender instanceof Player){
    4. Player player = (Player)sender;
    5. if(args.length == 0){
    6. if(!replyCommand.containsKey(player.getUniqueId())){
    7. player.sendMessage(ChatColor.GREEN + "You are currently in no conversation with anyone!");
    8. return true;
    9. }
    10. player.sendMessage(ChatColor.RED + "/r message message message");
    11. }else if(args.length >= 1){
    12. UUID getPlayer = replyCommand.get(player.getUniqueId());
    13. Player sendTo = Bukkit.getPlayer(getPlayer);
    14. StringBuilder sb = new StringBuilder("");
    15. for(int i = 1; i<args.length; i++){
    16. sb.append(args[i]).append(" ");
    17. }
    18. String message = sb.toString();
    19. player.sendMessage(ChatColor.GRAY + "<Me ====> " + sendTo.getName() + "> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + message);
    20. sendTo.sendMessage(ChatColor.GRAY + "<" + player.getName() + " ====> Me> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + message);
    21. }
    22. }else{
    23. sender.sendMessage("In-Game players only!");
    24. }
    25. }
    26.  
    27. if(commandLabel.equalsIgnoreCase("msg")){
    28. if(sender instanceof Player){
    29. Player player = (Player)sender;
    30. if(args.length == 0){
    31. player.sendMessage(ChatColor.GOLD + "Msg" + ChatColor.GRAY + "> " + ChatColor.GREEN + "Like: /msg (username) (message)...");
    32. }else if(args.length == 1){
    33. Player msging = Bukkit.getServer().getPlayer(args[0]);
    34. if(msging == null){
    35. KitPref.noOnlinePlayer(player);
    36. return true;
    37. }
    38. }else if(args.length >= 2){
    39. Player msging = Bukkit.getServer().getPlayer(args[0]);
    40. if(msging == null){
    41. KitPref.noOnlinePlayer(player);
    42. return true;
    43. }
    44. StringBuilder sb = new StringBuilder("");
    45. for(int i = 1; i<args.length; i++){
    46. sb.append(args[i]).append(" ");
    47. }
    48. String m = sb.toString();
    49. player.sendMessage(ChatColor.GRAY + "<Me ====> " + msging.getName() + "> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + m);
    50. msging.sendMessage(ChatColor.GRAY + "<" + player.getName() + " ====> Me> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + m);
    51. replyCommand.put(player.getUniqueId(), msging.getUniqueId());
    52. replyCommand.put(msging.getUniqueId(), player.getUniqueId());
    53. }
    54. }else if(sender instanceof ConsoleCommandSender){
    55. sender.sendMessage("In-Game players only!");
    56. }else{
    57. sender.sendMessage("In-Game players only!");
    58. }
    59. }
    60. [/i][/i]
     
  6. Offline

    Skionz

    mrgreen33gamer Why are you using 'toString()' on ChatColors? Show us the stack-trace.
     
  7. Offline

    mrgreen33gamer

    Skionz

    Code:java
    1.  
    2. 06.12 16:43:39 [Server] INFO ... 13 more
    3. 06.12 16:43:39 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    4. 06.12 16:43:39 [Server] INFO at com.mrgreen33gamer.kits.OtherCommands.onCommand(OtherCommands.java:448) ~[?:?]
    5. 06.12 16:43:39 [Server] INFO Caused by: java.lang.NullPointerException
    6. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    7. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    8. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    9. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    10. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    11. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    12. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    13. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    14. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    15. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:818) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    16. 06.12 16:43:39 [Server] INFO at net.minecraft.server.v1_7_R4.PlayerConnection.handleCommand(PlayerConnection.java:957) [craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    17. 06.12 16:43:39 [Server] INFO at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    18. 06.12 16:43:39 [Server] INFO at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    19. 06.12 16:43:39 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit-dev-3116.jar:git-Bukkit-1.7.9-R0.2-24-g07d4558-b3116jnks]
    20. 06.12 16:43:39 [Server] INFO org.bukkit.command.CommandException: Unhandled exception executing command 'r' in plugin GFKits v4.0
    21. 06.12 16:43:39 [Server] ERROR null
    22.  


    This is the line:
    Code:
    player.sendMessage(ChatColor.GRAY + "<Me ====> " + sendTo.getName() + "> " + ChatColor.WHITE.toString() + ChatColor.BOLD.toString() + message);
              
    I used .toString() so I can add the Color and Style together, besides using the longer method:
    Code:
    ChatColor.WHITE + "" + ChatColor.BOLD + ""
     
  8. Offline

    Skionz

  9. Offline

    mrgreen33gamer

    Skionz No duh. That is my problem. For some reason I cannot get the UUID to be casted as a player from the HashMap.
     
  10. Offline

    Skionz

  11. Offline

    mrgreen33gamer

    Skionz How would I do that? Reload the plugin? Tried that over 50 times at least. Shutting down and refreshing.
     
  12. Offline

    Skionz

  13. Offline

    jthort

    Debug the program, in other words, take the program and go step by step through each section. Print out the objects midway through to verify the aren't null. Narrow down your problem.
     
  14. Offline

    mrgreen33gamer

    jthort It turns out, its getting the player from the UUID!!!:
    Code:
    Error on line 444 of OtherCommands
    Code:
      UUID getPlayer = replyCommand.get(player.getUniqueId());
     Player sendTo = Bukkit.getPlayer(getPlayer);
     if(sendTo.isOp()){ //line 444
     Bukkit.getServer().broadcastMessage("Sender is valid! " + sendTo.getName());
     }
    
    and I AM OP. I am adding myself by messaging myself.

    SOLVED! Sadly I had to make the HashMap a static, because whenever I tried to use this.MAP, it doesn't work, but whenever I change it into the Static and do: OtherCommands.MAP, it works. I wonder if there is a way to prevent this and without memory leaks.

    Code:java
    1.  
    2. public static HashMap<String, String> PrevPlayer = new HashMap<String, String>();
    3.  
    4. if(commandLabel.equalsIgnoreCase("r")){
    5. if(sender instanceof Player){
    6. Player player = (Player) sender;
    7. if(args.length <= 0){
    8. if(OtherCommands.PrevPlayer.containsKey(player.getName())){
    9. player.sendMessage(ChatColor.GREEN + "You are currently in a conversation with " + OtherCommands.PrevPlayer.get(player.getName()));
    10. }else{
    11. player.sendMessage(ChatColor.GREEN + "You are not in a conversation with anyone.");
    12. }
    13. }else if(args.length >= 1){
    14. if(!OtherCommands.PrevPlayer.containsKey(player.getName())){
    15. player.sendMessage(ChatColor.GREEN + "Please type: /r");
    16. return true;
    17. }
    18. Player target = (Player)Bukkit.getServer().getPlayer(OtherCommands.PrevPlayer.get(player.getName()));
    19. if(target == null){
    20. KitPref.noOnlinePlayer(player);
    21. return true;
    22. }
    23. StringBuilder sb = new StringBuilder("");
    24. for(int i = 0; i<args.length; i++){
    25. sb.append(args[i]).append(" ");
    26. }
    27. String Message = sb.toString();
    28. if(Message == null){
    29. player.sendMessage(ChatColor.GREEN + "Please type in a message.");
    30. return true;
    31. }
    32. player.sendMessage(ChatColor.GRAY + "<Me =====> " + target.getName() + "> " + ChatColor.WHITE + Message);
    33. target.sendMessage(ChatColor.GRAY + "<" + player.getName() + " =====> " + "Me> " + ChatColor.WHITE + Message);
    34. }
    35. }else{
    36. sender.sendMessage("This command is for in-game players only!");
    37. }
    38. }
    39.  
    40. if(commandLabel.equalsIgnoreCase("msg")){
    41. if(sender instanceof Player){
    42. Player player = (Player)sender;
    43. if(args.length == 0){
    44. player.sendMessage(ChatColor.GREEN + "/msg (player) (Your Message)");
    45. }else if(args.length == 1){
    46. Player target = (Player)Bukkit.getServer().getPlayer(args[0]);
    47. if(target == null){
    48. KitPref.noOnlinePlayer(player);
    49. return true;
    50. }
    51. }else if(args.length >= 2){
    52. Player target = (Player)Bukkit.getServer().getPlayer(args[0]);
    53. if(target == null){
    54. KitPref.noOnlinePlayer(player);
    55. return true;
    56. }
    57. PrevPlayer.put(player.getName(), target.getName());
    58. StringBuilder sb = new StringBuilder("");
    59. for(int i = 1; i<args.length; i++){
    60. sb.append(args[i]).append(" ");
    61. }
    62. String Message = sb.toString();
    63. player.sendMessage(ChatColor.GRAY + "<Me =====> " + target.getName() + "> " + ChatColor.WHITE + Message);
    64. target.sendMessage(ChatColor.GRAY + "<" + player.getName() + " =====> " + "Me> " + ChatColor.WHITE + Message);
    65. }
    66. }else{
    67. sender.sendMessage("This command is for in-game players only!!");
    68. }
    69. }
    70. [/i][/i]


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

    drpk

    mrgreen33gamer it's because you're reating a new HashMap everytime the onCommand method is run I believe.
     
  16. Offline

    mythbusterma

    mrgreen33gamer

    It doesn't look like you're leaking memory anywhere, as far as I can tell. Also, the solution to this problem is NOT to make it static.

    I repeat NOT making it static.

    The solution to this problem is making it private, non-static, and adding accessor methods.
     
    Monkey_Swag likes this.
Thread Status:
Not open for further replies.

Share This Page