// Copyright (c) 2015, Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.command; import net.blay09.mods.eirairc.api.EiraIRCAPI; import net.blay09.mods.eirairc.api.SubCommand; import net.blay09.mods.eirairc.api.irc.IRCConnection; import net.blay09.mods.eirairc.api.irc.IRCContext; import net.blay09.mods.eirairc.config.AuthManager; import net.blay09.mods.eirairc.config.ChannelConfig; import net.blay09.mods.eirairc.config.ConfigurationHandler; import net.blay09.mods.eirairc.config.ServerConfig; import net.blay09.mods.eirairc.util.ConfigHelper; import net.blay09.mods.eirairc.util.IRCResolver; import net.blay09.mods.eirairc.util.Utils; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; import java.util.List; public class CommandJoin implements SubCommand { @Override public String getCommandName() { return "join"; } @Override public String getCommandUsage(ICommandSender sender) { return "eirairc:commands.join.usage"; } @Override public String[] getAliases() { return null; } @Override public boolean processCommand(ICommandSender sender, IRCContext context, String[] args, boolean serverSide) throws CommandException { if(args.length < 1) { throw new WrongUsageException(getCommandUsage(sender)); } IRCContext target = EiraIRCAPI.parseContext(null, args[0], IRCContext.ContextType.IRCConnection); IRCConnection connection; if(target.getContextType() == IRCContext.ContextType.Error) { if(args[0].indexOf('/') != -1) { Utils.sendLocalizedMessage(sender, target.getName(), args[0]); return true; } else { if(context == null) { Utils.sendLocalizedMessage(sender, "error.specifyServer"); return true; } target = context.getConnection(); } } connection = (IRCConnection) target; ServerConfig serverConfig = ConfigHelper.getServerConfig(connection); String channelName = IRCResolver.stripPath(args[0]); if(connection.getChannel(channelName) != null) { Utils.sendLocalizedMessage(sender, "error.alreadyJoined", channelName, connection.getHost()); return true; } ChannelConfig channelConfig = serverConfig.getOrCreateChannelConfig(channelName); if(args.length >= 2) { AuthManager.putChannelPassword(channelConfig.getIdentifier(), args[1]); } Utils.sendLocalizedMessage(sender, "commands.join", channelConfig.getName(), connection.getHost()); connection.join(channelConfig.getName(), AuthManager.getChannelPassword(channelConfig.getIdentifier())); return true; } @Override public boolean canCommandSenderUseCommand(ICommandSender sender) { return Utils.isOP(sender); } @Override public void addTabCompletionOptions(List<String> list, ICommandSender sender, String[] args) { if(args.length == 0) { for(ServerConfig serverConfig : ConfigurationHandler.getServerConfigs()) { for(ChannelConfig channelConfig : serverConfig.getChannelConfigs()) { list.add(channelConfig.getName()); } } } } @Override public boolean isUsernameIndex(String[] args, int idx) { return false; } @Override public boolean hasQuickCommand() { return true; } }