Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.12 KB | None | 0 0
  1. package org.bukkit.command;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.HashMap;
  6. import java.util.HashSet;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10.  
  11. import org.bukkit.ChatColor;
  12. import org.bukkit.Server;
  13.  
  14. import org.bukkit.plugin.Plugin;
  15. import org.bukkit.plugin.PluginDescriptionFile;
  16. import static org.bukkit.util.Java15Compat.Arrays_copyOfRange;
  17.  
  18. public final class SimpleCommandMap implements CommandMap {
  19.     private final Map<String, Command> knownCommands = new HashMap<String, Command>();
  20.     private final Set<String> aliases = new HashSet<String>();
  21.     private final Server server;
  22.  
  23.     public SimpleCommandMap(final Server server) {
  24.         this.server = server;
  25.         setDefaultCommands(server);
  26.     }
  27.  
  28.     private void setDefaultCommands(final Server server) {
  29.         register("bukkit", new VersionCommand("version", server));
  30.         register("bukkit", new ReloadCommand("reload", server));
  31.         register("bukkit", new PluginsCommand("plugins", server));
  32.     }
  33.  
  34.     /**
  35.      * Registers multiple commands. Returns name of first command for which fallback had to be used if any.
  36.      * @param plugin
  37.      * @return
  38.      */
  39.     public void registerAll(String fallbackPrefix, List<Command> commands) {
  40.         if (commands != null) {
  41.             for (Command c : commands) {
  42.                 register(fallbackPrefix, c);
  43.             }
  44.         }
  45.     }
  46.  
  47.     private void register(String fallbackPrefix, Command command) {
  48.         register(command.getName(), fallbackPrefix, command);
  49.     }
  50.  
  51.     /**
  52.      * {@inheritDoc}
  53.      */
  54.     public boolean register(String name, String fallbackPrefix, Command command) {
  55.         boolean registerdPassedName = register(name, fallbackPrefix, command, false);
  56.  
  57.         for (String alias : command.getAliases()) {
  58.             register(alias, fallbackPrefix, command, true);
  59.         }
  60.  
  61.         return registerdPassedName;
  62.     }
  63.  
  64.     private boolean register(String name, String fallbackPrefix, Command command, boolean isAlias) {
  65.         String lowerName = name.toLowerCase();
  66.         boolean registerdPassedName = true;
  67.  
  68.         // If the command exists but is an alias we overwrite it, otherwise we rename it based on the fallbackPrefix
  69.         while (knownCommands.containsKey(lowerName) && !aliases.contains(lowerName)) {
  70.             lowerName = fallbackPrefix + ":" + lowerName;
  71.             registerdPassedName = false;
  72.         }
  73.  
  74.         knownCommands.put(lowerName, command);
  75.         if (isAlias) {
  76.             aliases.add(lowerName);
  77.         } else {
  78.             // Ensure this isn't listed as a alias anymore
  79.             aliases.remove(lowerName);
  80.         }
  81.         return registerdPassedName;
  82.     }
  83.  
  84.     /**
  85.      * {@inheritDoc}
  86.      */
  87.     public boolean dispatch(CommandSender sender, String commandLine) {
  88.         String[] args = commandLine.split(" ");
  89.  
  90.         if (args.length == 0) {
  91.             return false;
  92.         }
  93.  
  94.         String sentCommandLabel = args[0].toLowerCase();
  95.  
  96.         args = Arrays_copyOfRange(args, 1, args.length);
  97.  
  98.         Command target = getCommand(sentCommandLabel);
  99.         boolean isRegisteredCommand = (target != null);
  100.  
  101.         if (isRegisteredCommand) {
  102.             try {
  103.                 target.execute(sender, sentCommandLabel, args);
  104.             } catch (CommandException ex) {
  105.                 throw ex;
  106.             } catch (Throwable ex) {
  107.                 throw new CommandException("Unhandled exception executing '" + commandLine + "' in " + target, ex);
  108.             }
  109.         }
  110.         return isRegisteredCommand;
  111.     }
  112.  
  113.     public void clearCommands() {
  114.         synchronized (this) {
  115.             knownCommands.clear();
  116.             aliases.clear();
  117.             setDefaultCommands(server);
  118.         }
  119.     }
  120.  
  121.     public Command getCommand(String name) {
  122.         return knownCommands.get(name.toLowerCase());
  123.     }
  124.  
  125.     private static class VersionCommand extends Command {
  126.         private final Server server;
  127.  
  128.         public VersionCommand(String name, Server server) {
  129.             super(name);
  130.             this.server = server;
  131.             this.description = "Gets the version of this server including any plugins in use";
  132.             this.usageMessage = "/version [plugin name]";
  133.             this.setAliases(Arrays.asList("ver", "about"));
  134.         }
  135.  
  136.         @Override
  137.         public boolean execute(CommandSender sender, String currentAlias, String[] args) {
  138.             if (args.length == 0) {
  139.                 sender.sendMessage("This server is running " + ChatColor.GREEN + server.getName() + ChatColor.WHITE + " version " + ChatColor.GREEN + server.getVersion());
  140.                 sender.sendMessage("This server is also sporting some funky dev build of Bukkit!");
  141.             } else {
  142.                 StringBuilder name = new StringBuilder();
  143.  
  144.                 for (String arg : args) {
  145.                     if (name.length() > 0) {
  146.                         name.append(' ');
  147.                     }
  148.                     name.append(arg);
  149.                 }
  150.  
  151.                 Plugin plugin = server.getPluginManager().getPlugin(name.toString());
  152.  
  153.                 if (plugin != null) {
  154.                     PluginDescriptionFile desc = plugin.getDescription();
  155.  
  156.                     sender.sendMessage(ChatColor.GREEN + desc.getName() + ChatColor.WHITE + " version " + ChatColor.GREEN + desc.getVersion());
  157.  
  158.                     if (desc.getDescription() != null) {
  159.                         sender.sendMessage(desc.getDescription());
  160.                     }
  161.  
  162.                     if (desc.getWebsite() != null) {
  163.                         sender.sendMessage("Website: " + ChatColor.GREEN + desc.getWebsite());
  164.                     }
  165.  
  166.                     if (!desc.getAuthors().isEmpty()) {
  167.                         if (desc.getAuthors().size() == 1) {
  168.                             sender.sendMessage("Author: " + getAuthors(desc));
  169.                         } else {
  170.                             sender.sendMessage("Authors: " + getAuthors(desc));
  171.                         }
  172.                     }
  173.                 } else {
  174.                     sender.sendMessage("This server is not running any plugin by that name.");
  175.                     sender.sendMessage("Use /plugins to get a list of plugins.");
  176.                 }
  177.             }
  178.  
  179.             return true;
  180.         }
  181.  
  182.         private String getAuthors(final PluginDescriptionFile desc) {
  183.             StringBuilder result = new StringBuilder();
  184.             ArrayList<String> authors = desc.getAuthors();
  185.  
  186.             for (int i = 0; i < authors.size(); i++) {
  187.                 if (result.length() > 0) {
  188.                     result.append(ChatColor.WHITE);
  189.  
  190.                     if (i < authors.size() - 1) {
  191.                         result.append(", ");
  192.                     } else {
  193.                         result.append(" and ");
  194.                     }
  195.                 }
  196.  
  197.                 result.append(ChatColor.GREEN);
  198.                 result.append(authors.get(i));
  199.             }
  200.  
  201.             return result.toString();
  202.         }
  203.     }
  204.  
  205.     private static class ReloadCommand extends Command {
  206.  
  207.         private final Server server;
  208.  
  209.         public ReloadCommand(String name, Server server) {
  210.             super(name);
  211.             this.server = server;
  212.             this.description = "Reloads the server configuration and plugins";
  213.             this.usageMessage = "/reload";
  214.             this.setAliases(Arrays.asList("rl"));
  215.         }
  216.  
  217.         @Override
  218.         public boolean execute(CommandSender sender, String currentAlias, String[] args) {
  219.             if (sender.isOp()) {
  220.                 server.reload();
  221.                 sender.sendMessage(ChatColor.GREEN + "Reload complete.");
  222.             } else {
  223.                 sender.sendMessage(ChatColor.RED + "You do not have sufficient access to reload this server.");
  224.             }
  225.             return true;
  226.         }
  227.     }
  228.  
  229.     private static class PluginsCommand extends Command {
  230.  
  231.         private final Server server;
  232.  
  233.         public PluginsCommand(String name, Server server) {
  234.             super(name);
  235.             this.server = server;
  236.             this.description = "Gets a list of plugins running on the server";
  237.             this.usageMessage = "/plugins";
  238.             this.setAliases(Arrays.asList("pl"));
  239.         }
  240.  
  241.         @Override
  242.         public boolean execute(CommandSender sender, String currentAlias, String[] args) {
  243.             sender.sendMessage("Plugins: " + getPluginList());
  244.             return true;
  245.         }
  246.  
  247.         private String getPluginList() {
  248.             StringBuilder pluginList = new StringBuilder();
  249.             Plugin[] plugins = server.getPluginManager().getPlugins();
  250.  
  251.             for (Plugin plugin : plugins) {
  252.                 if (pluginList.length() > 0) {
  253.                     pluginList.append(ChatColor.WHITE);
  254.                     pluginList.append(", ");
  255.                 }
  256.  
  257.                 pluginList.append(plugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED);
  258.                 pluginList.append(plugin.getDescription().getName());
  259.             }
  260.  
  261.             return pluginList.toString();
  262.         }
  263.     }
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement