Reply to Messages

Discussion in 'Plugin Development' started by Blah1, Oct 10, 2013.

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

    Blah1

    So I want to make a /reply command but I'm not really sure how. I tried doing it with hashmaps but halfway through, I didn't know how that would work. Help?

    What I have:
    Code:java
    1. package me.MirrorRealm.commands;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.command.Command;
    8. import org.bukkit.command.CommandExecutor;
    9. import org.bukkit.command.CommandSender;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.event.EventHandler;
    12. import org.bukkit.event.Listener;
    13. import org.bukkit.event.player.PlayerQuitEvent;
    14.  
    15. public class Message implements CommandExecutor, Listener{
    16. @EventHandler
    17. public void onPlayerQuit (PlayerQuitEvent event){
    18. Player player = event.getPlayer();
    19. if (message.containsKey(player)){
    20. message.remove(player);
    21. }
    22. }
    23. public final HashMap<Player, Player> message = new HashMap<Player, Player>();
    24. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
    25. Player player = (Player) sender;
    26. if (cmd.getName().equalsIgnoreCase("msg")){
    27. if (!(player.hasPermission("command.msg") || player.hasPermission("command.player"))){
    28. player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help.");
    29. return true;
    30. }
    31. if (args.length == 0){
    32. player.sendMessage(ChatColor.RED + "/msg <name> <message>");
    33. return true;
    34. }
    35. Player target = Bukkit.getServer().getPlayer(args[0]);
    36. if (target == null){
    37. player.sendMessage(ChatColor.RED + "Could not find player " + args[0]);
    38. return true;
    39. }
    40. if ((target != null) && (args.length == 1)){
    41. player.sendMessage(ChatColor.RED + "/msg <name> <message>");
    42. return true;
    43. }
    44. StringBuilder str = new StringBuilder();
    45. for (int i = 1; i < args.length; i ++){
    46. str.append(args[i] + " ");
    47. }
    48. String mes = str.toString();
    49. if (!(player.hasPermission("command.msg.colored"))){
    50. target.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + mes);
    51. player.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + mes);
    52. message.put(player, null);
    53. for (Player o : Bukkit.getServer().getOnlinePlayers()){
    54. if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){
    55. o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD
    56. + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes);
    57. }
    58. }
    59. return true;
    60. }
    61. if (player.hasPermission("command.msg.colored")){
    62. target.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes));
    63. player.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes));
    64. message.put(player, null);
    65. for (Player o : Bukkit.getServer().getOnlinePlayers()){
    66. if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){
    67. o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD
    68. + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes);
    69. }
    70. }
    71. return true;
    72. }
    73. }
    74. if (cmd.getName().equalsIgnoreCase("reply")){
    75. if (!(player.hasPermission("command.reply"))){
    76. player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help.");
    77. return true;
    78. }
    79. }
    80. return true;
    81. }
    82. }
    83. [/i]
     
  2. Use a HashMap<String, String> that stores the targets name as a key, and the senders name as a value, whenever /msg is used. It will save the latest sender, who wrote to the target. Then you can use this HashMap to get the latest sender again, when /reply is used.
     
  3. Offline

    Blah1

    hapm
    When do I remove them?
     
  4. by timer or never.
     
  5. Offline

    1Rogue

    No need to remove them, and they won't persist through a restart.
     
  6. Offline

    Blah1

    1Rogue hapm Thanks Guy!!
    I tested it with my alt and it worked fine. Hopefully it will work with more people :D
    Code:java
    1. package me.MirrorRealm.commands;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.command.Command;
    8. import org.bukkit.command.CommandExecutor;
    9. import org.bukkit.command.CommandSender;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.event.EventHandler;
    12. import org.bukkit.event.Listener;
    13. import org.bukkit.event.player.PlayerQuitEvent;
    14.  
    15. public class Message implements CommandExecutor, Listener{
    16. @EventHandler
    17. public void onPlayerQuit (PlayerQuitEvent event){
    18. Player player = event.getPlayer();
    19. if (message.containsKey(player)){
    20. message.remove(player);
    21. }
    22. }
    23. public final HashMap<Player, Player> message = new HashMap<Player, Player>();
    24. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
    25. Player player = (Player) sender;
    26. if (cmd.getName().equalsIgnoreCase("msg")){
    27. if (!(player.hasPermission("command.msg") || player.hasPermission("command.player"))){
    28. player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help.");
    29. return true;
    30. }
    31. if (args.length == 0){
    32. player.sendMessage(ChatColor.RED + "/msg <name> <message>");
    33. return true;
    34. }
    35. Player target = Bukkit.getServer().getPlayer(args[0]);
    36. if (target == null){
    37. player.sendMessage(ChatColor.RED + "Could not find player " + args[0]);
    38. return true;
    39. }
    40. if ((target != null) && (args.length == 1)){
    41. player.sendMessage(ChatColor.RED + "/msg <name> <message>");
    42. return true;
    43. }
    44. StringBuilder str = new StringBuilder();
    45. for (int i = 1; i < args.length; i ++){
    46. str.append(args[i] + " ");
    47. }
    48. String mes = str.toString();
    49. if (!(player.hasPermission("command.msg.colored"))){
    50. target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes);
    51. player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes);
    52. message.put(target, player);
    53. for (Player o : Bukkit.getServer().getOnlinePlayers()){
    54. if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){
    55. o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD
    56. + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes);
    57. }
    58. }
    59. return true;
    60. }
    61. if (player.hasPermission("command.msg.colored")){
    62. target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes));
    63. player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes));
    64. message.put(target, player);
    65. message.put(player, target);
    66. for (Player o : Bukkit.getServer().getOnlinePlayers()){
    67. if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){
    68. o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD
    69. + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes);
    70. }
    71. }
    72. return true;
    73. }
    74. }
    75. if (cmd.getName().equalsIgnoreCase("reply")){
    76. if (!(player.hasPermission("command.reply"))){
    77. player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help.");
    78. return true;
    79. }
    80. if (args.length == 0){
    81. player.sendMessage(ChatColor.RED + "/r <message>");
    82. return true;
    83. }
    84. StringBuilder str = new StringBuilder();
    85. for (int i = 0; i < args.length; i ++){
    86. str.append(args[i] + " ");
    87. }
    88. String mes2 = str.toString();
    89. Player target = message.get(player);
    90. if (target == null){
    91. player.sendMessage(ChatColor.RED + "You have no one to reply to.");
    92. return true;
    93. }
    94. if (!(player.hasPermission("command.msg.colored"))){
    95. target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes2);
    96. player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes2);
    97. message.put(target, player);
    98. for (Player o : Bukkit.getServer().getOnlinePlayers()){
    99. if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){
    100. o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD
    101. + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes2);
    102. }
    103. }
    104. return true;
    105. }
    106. if (player.hasPermission("command.msg.colored")){
    107. target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes2));
    108. player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes2));
    109. message.put(target, player);
    110. for (Player o : Bukkit.getServer().getOnlinePlayers()){
    111. if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){
    112. o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD
    113. + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes2);
    114. }
    115. }
    116. }
    117. }
    118. return true;
    119. }
    120. }
    121. [/i][/i]
     
Thread Status:
Not open for further replies.

Share This Page