package org.bukkit.command.defaults; import com.google.common.collect.ImmutableList; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.util.StringUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class VersionCommand extends BukkitCommand { public VersionCommand(String name) { super(name); this.description = "Gets the version of this server including any plugins in use"; this.usageMessage = "/version [plugin name]"; this.setPermission("bukkit.command.version"); this.setAliases(Arrays.asList("ver", "about")); } @Override public boolean execute(CommandSender sender, String currentAlias, String[] args) { if(!testPermission(sender)) return true; if(args.length == 0) { sender.sendMessage("This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")"); } else { StringBuilder name = new StringBuilder(); for(String arg : args) { if(name.length() > 0) { name.append(' '); } name.append(arg); } String pluginName = name.toString(); Plugin exactPlugin = Bukkit.getPluginManager().getPlugin(pluginName); if(exactPlugin != null) { describeToSender(exactPlugin, sender); return true; } boolean found = false; pluginName = pluginName.toLowerCase(); for(Plugin plugin : Bukkit.getPluginManager().getPlugins()) { if(plugin.getName().toLowerCase().contains(pluginName)) { describeToSender(plugin, sender); found = true; } } if(!found) { sender.sendMessage("This server is not running any plugin by that name."); sender.sendMessage("Use /plugins to get a list of plugins."); } } return true; } private void describeToSender(Plugin plugin, CommandSender sender) { PluginDescriptionFile desc = plugin.getDescription(); sender.sendMessage(ChatColor.GREEN + desc.getName() + ChatColor.WHITE + " version " + ChatColor.GREEN + desc.getVersion()); if(desc.getDescription() != null) { sender.sendMessage(desc.getDescription()); } if(desc.getWebsite() != null) { sender.sendMessage("Website: " + ChatColor.GREEN + desc.getWebsite()); } if(!desc.getAuthors().isEmpty()) { if(desc.getAuthors().size() == 1) { sender.sendMessage("Author: " + getAuthors(desc)); } else { sender.sendMessage("Authors: " + getAuthors(desc)); } } } private String getAuthors(final PluginDescriptionFile desc) { StringBuilder result = new StringBuilder(); List<String> authors = desc.getAuthors(); for(int i = 0; i < authors.size(); i++) { if(result.length() > 0) { result.append(ChatColor.WHITE); if(i < authors.size() - 1) { result.append(", "); } else { result.append(" and "); } } result.append(ChatColor.GREEN); result.append(authors.get(i)); } return result.toString(); } @Override public List<String> tabComplete(CommandSender sender, String alias, String[] args) { Validate.notNull(sender, "Sender cannot be null"); Validate.notNull(args, "Arguments cannot be null"); Validate.notNull(alias, "Alias cannot be null"); if(args.length == 1) { List<String> completions = new ArrayList<String>(); String toComplete = args[0].toLowerCase(); for(Plugin plugin : Bukkit.getPluginManager().getPlugins()) { if(StringUtil.startsWithIgnoreCase(plugin.getName(), toComplete)) { completions.add(plugin.getName()); } } return completions; } return ImmutableList.of(); } }