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 package me.MirrorRealm.commands; 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.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerQuitEvent; public class Message implements CommandExecutor, Listener{ @EventHandler public void onPlayerQuit (PlayerQuitEvent event){ Player player = event.getPlayer(); if (message.containsKey(player)){ message.remove(player); } } public final HashMap<Player, Player> message = new HashMap<Player, Player>(); public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ Player player = (Player) sender; if (cmd.getName().equalsIgnoreCase("msg")){ if (!(player.hasPermission("command.msg") || player.hasPermission("command.player"))){ player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help."); return true; } if (args.length == 0){ player.sendMessage(ChatColor.RED + "/msg <name> <message>"); return true; } Player target = Bukkit.getServer().getPlayer(args[0]); if (target == null){ player.sendMessage(ChatColor.RED + "Could not find player " + args[0]); return true; } if ((target != null) && (args.length == 1)){ player.sendMessage(ChatColor.RED + "/msg <name> <message>"); return true; } StringBuilder str = new StringBuilder(); for (int i = 1; i < args.length; i ++){ str.append(args[i] + " "); } String mes = str.toString(); if (!(player.hasPermission("command.msg.colored"))){ target.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + mes); player.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + mes); message.put(player, null); for (Player o : Bukkit.getServer().getOnlinePlayers()){ if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){ o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes); } } return true; } if (player.hasPermission("command.msg.colored")){ target.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes)); player.sendMessage(ChatColor.GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.GRAY + " -> " + target.getDisplayName() + ChatColor.GRAY + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes)); message.put(player, null); for (Player o : Bukkit.getServer().getOnlinePlayers()){ if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){ o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes); } } return true; } } if (cmd.getName().equalsIgnoreCase("reply")){ if (!(player.hasPermission("command.reply"))){ player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help."); return true; } } return true; }}[/i]
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.
1Rogue hapm Thanks Guy!! I tested it with my alt and it worked fine. Hopefully it will work with more people Code:java package me.MirrorRealm.commands; 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.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerQuitEvent; public class Message implements CommandExecutor, Listener{ @EventHandler public void onPlayerQuit (PlayerQuitEvent event){ Player player = event.getPlayer(); if (message.containsKey(player)){ message.remove(player); } } public final HashMap<Player, Player> message = new HashMap<Player, Player>(); public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){ Player player = (Player) sender; if (cmd.getName().equalsIgnoreCase("msg")){ if (!(player.hasPermission("command.msg") || player.hasPermission("command.player"))){ player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help."); return true; } if (args.length == 0){ player.sendMessage(ChatColor.RED + "/msg <name> <message>"); return true; } Player target = Bukkit.getServer().getPlayer(args[0]); if (target == null){ player.sendMessage(ChatColor.RED + "Could not find player " + args[0]); return true; } if ((target != null) && (args.length == 1)){ player.sendMessage(ChatColor.RED + "/msg <name> <message>"); return true; } StringBuilder str = new StringBuilder(); for (int i = 1; i < args.length; i ++){ str.append(args[i] + " "); } String mes = str.toString(); if (!(player.hasPermission("command.msg.colored"))){ target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes); player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes); message.put(target, player); for (Player o : Bukkit.getServer().getOnlinePlayers()){ if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){ o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes); } } return true; } if (player.hasPermission("command.msg.colored")){ target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes)); player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes)); message.put(target, player); message.put(player, target); for (Player o : Bukkit.getServer().getOnlinePlayers()){ if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){ o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes); } } return true; } } if (cmd.getName().equalsIgnoreCase("reply")){ if (!(player.hasPermission("command.reply"))){ player.sendMessage("Unknown command. Type " + '"' + "/help" + '"' + " for help."); return true; } if (args.length == 0){ player.sendMessage(ChatColor.RED + "/r <message>"); return true; } StringBuilder str = new StringBuilder(); for (int i = 0; i < args.length; i ++){ str.append(args[i] + " "); } String mes2 = str.toString(); Player target = message.get(player); if (target == null){ player.sendMessage(ChatColor.RED + "You have no one to reply to."); return true; } if (!(player.hasPermission("command.msg.colored"))){ target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes2); player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + mes2); message.put(target, player); for (Player o : Bukkit.getServer().getOnlinePlayers()){ if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){ o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes2); } } return true; } if (player.hasPermission("command.msg.colored")){ target.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes2)); player.sendMessage(ChatColor.AQUA + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.AQUA + " -> " + target.getDisplayName() + ChatColor.AQUA + "> " + ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', mes2)); message.put(target, player); for (Player o : Bukkit.getServer().getOnlinePlayers()){ if (o.hasPermission("command.owner") || o.hasPermission("command.admin") || o.hasPermission("command.mod")){ o.sendMessage(ChatColor.AQUA + "[" + ChatColor.GRAY + "SS" + ChatColor.AQUA + "]" + ChatColor.DARK_GRAY + "<" + player.getDisplayName() + ChatColor.BOLD + ChatColor.DARK_GRAY + " -> " + target.getDisplayName() + ChatColor.DARK_GRAY + "> " + ChatColor.GRAY + mes2); } } } } return true; }}[/i][/i]