Delegate tab-completion. Fixes BUKKIT-2181. Adds BUKKIT-2602

CommandMap now contains the functionality for tab completion. This
commit replaces the vanilla implementation and simply delegates it to
the Bukkit API.
This commit is contained in:
Score_Under 2012-10-09 19:44:04 +01:00 committed by Wesley Wolfe
parent 05e889f346
commit 3ce954bb86
2 changed files with 43 additions and 0 deletions

View file

@ -834,6 +834,8 @@ public abstract class MinecraftServer implements Runnable, IMojangStatistics, IC
}
public List a(ICommandListener icommandlistener, String s) {
// CraftBukkit start - Allow tab-completion of Bukkit commands
/*
ArrayList arraylist = new ArrayList();
if (s.startsWith("/")) {
@ -872,6 +874,9 @@ public abstract class MinecraftServer implements Runnable, IMojangStatistics, IC
return arraylist;
}
*/
return this.server.tabComplete(icommandlistener, s);
// CraftBukkit end
}
public static MinecraftServer getServer() {

View file

@ -58,6 +58,7 @@ import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldCreator;
import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.command.PluginCommand;
@ -1234,4 +1235,41 @@ public final class CraftServer implements Server {
public WarningState getWarningState() {
return warningState;
}
public List<String> tabComplete(net.minecraft.server.ICommandListener sender, String message) {
if (!(sender instanceof EntityPlayer)) {
return ImmutableList.of();
}
Player player = ((EntityPlayer) sender).getBukkitEntity();
if (message.startsWith("/")) {
return tabCompleteCommand(player, message);
} else {
return tabCompleteChat(player, message);
}
}
public List<String> tabCompleteCommand(Player player, String message) {
List<String> completions = null;
try {
completions = getCommandMap().tabComplete(player, message.substring(1));
} catch (CommandException ex) {
player.sendMessage(ChatColor.RED + "An internal error occurred while attempting to tab-complete this command");
getLogger().log(Level.SEVERE, "Exception when " + player.getName() + " attempted to tab complete " + message, ex);
}
return completions == null ? ImmutableList.<String>of() : completions;
}
public List<String> tabCompleteChat(Player player, String message) {
Player[] players = getOnlinePlayers();
List<String> completions = new ArrayList<String>(players.length);
for (Player p : players) {
if (player.canSee(p)) {
completions.add(p.getName());
}
}
return completions;
}
}