package org.ultramine.mods.bukkit;
import net.minecraft.command.CommandHandler;
import net.minecraft.command.ICommandSender;
import net.minecraft.server.MinecraftServer;
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.ultramine.commands.IExtendedCommand;
import org.ultramine.mods.bukkit.util.BukkitUtil;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class UMCommandMap extends SimpleCommandMap
{
private final Set<Command> registeredBukkitCommands = new HashSet<Command>();
public UMCommandMap(Server server)
{
super(server);
}
@Override
public void registerAll(String fallbackPrefix, List<Command> commands)
{
if(commands != null)
{
for(Command c : commands)
{
register(fallbackPrefix, c);
}
}
}
@Override
public boolean register(String fallbackPrefix, Command command)
{
return register(command.getName(), fallbackPrefix, command);
}
@Override
public boolean register(String label, String fallbackPrefix, Command command)
{
label = label.toLowerCase().trim();
fallbackPrefix = fallbackPrefix.toLowerCase().trim();
registeredBukkitCommands.add(command);
command.getAliases().remove(label);
BukkitCommand cmd = new BukkitCommand(fallbackPrefix, label, command);
((CommandHandler) MinecraftServer.getServer().getCommandManager()).getRegistry().registerCommand(cmd);
return true;
}
@Override
public boolean dispatch(CommandSender sender, String cmdLine) throws CommandException
{
return MinecraftServer.getServer().getCommandManager().executeCommand(BukkitUtil.toVanillaCommandSender(sender), cmdLine) != 0;
}
@Override
public void clearCommands()
{
throw new UnsupportedOperationException();
}
@Override
public Command getCommand(String name)
{
IExtendedCommand cmd = ((CommandHandler) MinecraftServer.getServer().getCommandManager()).getRegistry().get(name);
return cmd == null || !(cmd instanceof BukkitCommand) ? null : ((BukkitCommand) cmd).getBukkitCommand();
}
@Override
@SuppressWarnings("unchecked")
public List<String> tabComplete(CommandSender sender, String cmdLine) throws IllegalArgumentException
{
return MinecraftServer.getServer().getPossibleCompletions(BukkitUtil.toVanillaCommandSender(sender), cmdLine);
}
@Override
public void setFallbackCommands()
{
// TODO
}
protected void setDefaultCommands()
{
// TODO
}
@Override
public Collection<Command> getCommands()
{
return registeredBukkitCommands;
}
@Override
public void registerServerAliases()
{
// TODO
}
private static class BukkitCommand implements IExtendedCommand
{
private final String group;
private final String name;
private final Command bukkitCommand;
private BukkitCommand(String group, String name, Command bukkitCommand)
{
this.group = group;
this.name = name;
this.bukkitCommand = bukkitCommand;
}
public Command getBukkitCommand()
{
return bukkitCommand;
}
@Override
public String getCommandName()
{
return name;
}
@Override
public String getCommandUsage(ICommandSender sender)
{
return bukkitCommand.getUsage() == null ? null : bukkitCommand.getUsage().replace("<command>", bukkitCommand.getLabel()).trim();
}
@Override
public List getCommandAliases()
{
return bukkitCommand.getAliases();
}
@Override
public void processCommand(ICommandSender sender, String[] args)
{
bukkitCommand.execute(BukkitUtil.toBukkitCommandSender(sender), bukkitCommand.getLabel(), args);
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender sender)
{
return bukkitCommand.testPermissionSilent(BukkitUtil.toBukkitCommandSender(sender));
}
@Override
public List addTabCompletionOptions(ICommandSender sender, String[] args)
{
return bukkitCommand.tabComplete(BukkitUtil.toBukkitCommandSender(sender), bukkitCommand.getLabel(), args);
}
@Override
public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_)
{
return false;
}
@Override
public int compareTo(Object o)
{
if (o instanceof IExtendedCommand)
{
int result = getGroup().compareTo(((IExtendedCommand) o).getGroup());
if (result == 0)
result = getCommandName().compareTo(((IExtendedCommand) o).getCommandName());
return result;
}
return -1;
}
@Override
public String getDescription()
{
return bukkitCommand.getDescription();
}
@Override
public String getGroup()
{
return group;
}
}
}