{"action":"created","comment":{"url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments/25478261","id":25478261,"diff_hunk":"@@ -25,83 +25,73 @@\n \n package org.spongepowered.api.service.command;\n \n-import com.google.common.base.Function;\n-import com.google.common.base.Optional;\n import org.spongepowered.api.plugin.PluginContainer;\n import org.spongepowered.api.util.command.CommandCallable;\n import org.spongepowered.api.util.command.CommandMapping;\n import org.spongepowered.api.util.command.dispatcher.Dispatcher;\n \n+import com.google.common.base.Function;\n+import com.google.common.base.Optional;\n+\n import java.util.List;\n import java.util.Set;\n \n /**\n- * A command dispatcher watches for commands (such as those said in chat)\n- * and dispatches them to the correct command handler.\n+ * A command dispatcher watches for commands (such as those said in chat) and\n+ * dispatches them to the correct command handler.\n  */\n public interface CommandService extends Dispatcher {\n \n     /**\n-     * Register a given command using the given list of aliases.\n-     *\n-     * <p>If there is a conflict with one of the aliases (i.e. that alias\n-     * is already assigned to another command), then the alias will be skipped.\n-     * It is possible for there to be no alias to be available out of\n-     * the provided list of aliases, which would mean that the command would not\n-     * be assigned to any aliases.</p>\n-     *\n-     * <p>The first non-conflicted alias becomes the \"primary alias.\"</p>\n-     *\n-     * @param plugin A plugin instance\n-     * @param callable The command\n-     * @param alias An array of aliases\n-     * @return The registered command mapping, unless no aliases could be registered\n-     * @throws IllegalArgumentException Thrown if {@code plugin} is not a plugin instance\n-     */\n-    Optional<CommandMapping> register(Object plugin, CommandCallable callable, String... alias);\n-\n-    /**\n-     * Register a given command using the given list of aliases.\n-     *\n-     * <p>If there is a conflict with one of the aliases (i.e. that alias","path":"src/main/java/org/spongepowered/api/service/command/CommandService.java","position":28,"original_position":47,"commit_id":"dd390af31eb52b33ad8a17b4a101caa43c1b6aaf","original_commit_id":"1d2765c57ebbd7d2bf668175d4a16dcda4a12039","user":{"login":"kenzierocks","id":2093023,"avatar_url":"https://avatars.githubusercontent.com/u/2093023?v=3","gravatar_id":"","url":"https://api.github.com/users/kenzierocks","html_url":"https://github.com/kenzierocks","followers_url":"https://api.github.com/users/kenzierocks/followers","following_url":"https://api.github.com/users/kenzierocks/following{/other_user}","gists_url":"https://api.github.com/users/kenzierocks/gists{/gist_id}","starred_url":"https://api.github.com/users/kenzierocks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kenzierocks/subscriptions","organizations_url":"https://api.github.com/users/kenzierocks/orgs","repos_url":"https://api.github.com/users/kenzierocks/repos","events_url":"https://api.github.com/users/kenzierocks/events{/privacy}","received_events_url":"https://api.github.com/users/kenzierocks/received_events","type":"User","site_admin":false},"body":"Because the whole command is?","created_at":"2015-02-27T00:02:18Z","updated_at":"2015-02-27T00:02:18Z","html_url":"https://github.com/SpongePowered/SpongeAPI/pull/409#discussion_r25478261","pull_request_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409","_links":{"self":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments/25478261"},"html":{"href":"https://github.com/SpongePowered/SpongeAPI/pull/409#discussion_r25478261"},"pull_request":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409"}}},"pull_request":{"url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409","id":27959975,"html_url":"https://github.com/SpongePowered/SpongeAPI/pull/409","diff_url":"https://github.com/SpongePowered/SpongeAPI/pull/409.diff","patch_url":"https://github.com/SpongePowered/SpongeAPI/pull/409.patch","issue_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/409","number":409,"state":"open","locked":false,"title":"[WIP] Dynamic Commands (New PR for my old commands PR.)","user":{"login":"AlphaModder","id":2100733,"avatar_url":"https://avatars.githubusercontent.com/u/2100733?v=3","gravatar_id":"","url":"https://api.github.com/users/AlphaModder","html_url":"https://github.com/AlphaModder","followers_url":"https://api.github.com/users/AlphaModder/followers","following_url":"https://api.github.com/users/AlphaModder/following{/other_user}","gists_url":"https://api.github.com/users/AlphaModder/gists{/gist_id}","starred_url":"https://api.github.com/users/AlphaModder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlphaModder/subscriptions","organizations_url":"https://api.github.com/users/AlphaModder/orgs","repos_url":"https://api.github.com/users/AlphaModder/repos","events_url":"https://api.github.com/users/AlphaModder/events{/privacy}","received_events_url":"https://api.github.com/users/AlphaModder/received_events","type":"User","site_admin":false},"body":"Apparently github does not allow you to change the head fork after creating a PR, so i closed it and remade this one.\r\n\r\nThis slightly modifies the command interfaces to allow for more variety in command systems, and adds a more featured default command system The features it will introduce to it are:\r\n\r\n* Allows use of /plugin:command in a less hacky way.\r\n* Allows plugins to register conflicting commands, and resolves those conflicts when the command is sent.\r\n* Removes the callback feature from command registration as it is no longer neccessary due to the above change.\r\n* Allows use of /mc or /minecraft:command to run vanilla commands [NYI]\r\n* Creates an API that may be used to set certain aliases to point to certain plugins in the command system.\r\n\r\nIt is based on EvilSeph's old blog post [here](http://evilseph.com/post/75608917830/bukkit-supporting-minecraft-commands).\r\n\r\nDue to configuration files not yet having a standard format yet, I will only create an API that allows the command configuration described in the blog post to be implemented, but this PR does not include the actual implementation of the configuration file. \r\n\r\nI still need help with: a good way to wrap vanilla/sponge commands into the existing system. maybe some kind of VanillaPluginContainer/SpongePluginContainer as wrappers so the command system can use them? ","created_at":"2015-01-23T22:14:45Z","updated_at":"2015-02-27T00:02:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f979f20f3767b7ae818594f1ea418a24795bec67","assignee":{"login":"sk89q","id":38949,"avatar_url":"https://avatars.githubusercontent.com/u/38949?v=3","gravatar_id":"","url":"https://api.github.com/users/sk89q","html_url":"https://github.com/sk89q","followers_url":"https://api.github.com/users/sk89q/followers","following_url":"https://api.github.com/users/sk89q/following{/other_user}","gists_url":"https://api.github.com/users/sk89q/gists{/gist_id}","starred_url":"https://api.github.com/users/sk89q/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sk89q/subscriptions","organizations_url":"https://api.github.com/users/sk89q/orgs","repos_url":"https://api.github.com/users/sk89q/repos","events_url":"https://api.github.com/users/sk89q/events{/privacy}","received_events_url":"https://api.github.com/users/sk89q/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/SpongePowered/SpongeAPI/milestones/2","html_url":"https://github.com/SpongePowered/SpongeAPI/milestones/1.1-Release","labels_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/milestones/2/labels","id":882230,"number":2,"title":"1.1-Release","description":"This is the second stable release for the Sponge API, version 1.1.","creator":{"login":"gratimax","id":1261779,"avatar_url":"https://avatars.githubusercontent.com/u/1261779?v=3","gravatar_id":"","url":"https://api.github.com/users/gratimax","html_url":"https://github.com/gratimax","followers_url":"https://api.github.com/users/gratimax/followers","following_url":"https://api.github.com/users/gratimax/following{/other_user}","gists_url":"https://api.github.com/users/gratimax/gists{/gist_id}","starred_url":"https://api.github.com/users/gratimax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gratimax/subscriptions","organizations_url":"https://api.github.com/users/gratimax/orgs","repos_url":"https://api.github.com/users/gratimax/repos","events_url":"https://api.github.com/users/gratimax/events{/privacy}","received_events_url":"https://api.github.com/users/gratimax/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":21,"state":"open","created_at":"2014-11-27T05:08:55Z","updated_at":"2015-02-26T08:38:15Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409/commits","review_comments_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409/comments","review_comment_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/409/comments","statuses_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/statuses/dd390af31eb52b33ad8a17b4a101caa43c1b6aaf","head":{"label":"AlphaModder:feature/dynamic-commands","ref":"feature/dynamic-commands","sha":"dd390af31eb52b33ad8a17b4a101caa43c1b6aaf","user":{"login":"AlphaModder","id":2100733,"avatar_url":"https://avatars.githubusercontent.com/u/2100733?v=3","gravatar_id":"","url":"https://api.github.com/users/AlphaModder","html_url":"https://github.com/AlphaModder","followers_url":"https://api.github.com/users/AlphaModder/followers","following_url":"https://api.github.com/users/AlphaModder/following{/other_user}","gists_url":"https://api.github.com/users/AlphaModder/gists{/gist_id}","starred_url":"https://api.github.com/users/AlphaModder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlphaModder/subscriptions","organizations_url":"https://api.github.com/users/AlphaModder/orgs","repos_url":"https://api.github.com/users/AlphaModder/repos","events_url":"https://api.github.com/users/AlphaModder/events{/privacy}","received_events_url":"https://api.github.com/users/AlphaModder/received_events","type":"User","site_admin":false},"repo":{"id":29218531,"name":"SpongeAPI","full_name":"AlphaModder/SpongeAPI","owner":{"login":"AlphaModder","id":2100733,"avatar_url":"https://avatars.githubusercontent.com/u/2100733?v=3","gravatar_id":"","url":"https://api.github.com/users/AlphaModder","html_url":"https://github.com/AlphaModder","followers_url":"https://api.github.com/users/AlphaModder/followers","following_url":"https://api.github.com/users/AlphaModder/following{/other_user}","gists_url":"https://api.github.com/users/AlphaModder/gists{/gist_id}","starred_url":"https://api.github.com/users/AlphaModder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlphaModder/subscriptions","organizations_url":"https://api.github.com/users/AlphaModder/orgs","repos_url":"https://api.github.com/users/AlphaModder/repos","events_url":"https://api.github.com/users/AlphaModder/events{/privacy}","received_events_url":"https://api.github.com/users/AlphaModder/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AlphaModder/SpongeAPI","description":"A Minecraft plugin API","fork":true,"url":"https://api.github.com/repos/AlphaModder/SpongeAPI","forks_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/forks","keys_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/teams","hooks_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/hooks","issue_events_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/issues/events{/number}","events_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/events","assignees_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/assignees{/user}","branches_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/branches{/branch}","tags_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/tags","blobs_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/git/refs{/sha}","trees_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/statuses/{sha}","languages_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/languages","stargazers_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/stargazers","contributors_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/contributors","subscribers_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/subscribers","subscription_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/subscription","commits_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/commits{/sha}","git_commits_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/git/commits{/sha}","comments_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/comments{/number}","issue_comment_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/issues/comments{/number}","contents_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/contents/{+path}","compare_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/merges","archive_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/downloads","issues_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/issues{/number}","pulls_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/pulls{/number}","milestones_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/milestones{/number}","notifications_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/labels{/name}","releases_url":"https://api.github.com/repos/AlphaModder/SpongeAPI/releases{/id}","created_at":"2015-01-14T00:11:45Z","updated_at":"2015-02-25T20:31:06Z","pushed_at":"2015-02-26T15:57:15Z","git_url":"git://github.com/AlphaModder/SpongeAPI.git","ssh_url":"git@github.com:AlphaModder/SpongeAPI.git","clone_url":"https://github.com/AlphaModder/SpongeAPI.git","svn_url":"https://github.com/AlphaModder/SpongeAPI","homepage":"http://www.spongepowered.org/","size":2979,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SpongePowered:master","ref":"master","sha":"a5c11a51d28eba667032226946bdc30a708e5b8e","user":{"login":"SpongePowered","id":8683473,"avatar_url":"https://avatars.githubusercontent.com/u/8683473?v=3","gravatar_id":"","url":"https://api.github.com/users/SpongePowered","html_url":"https://github.com/SpongePowered","followers_url":"https://api.github.com/users/SpongePowered/followers","following_url":"https://api.github.com/users/SpongePowered/following{/other_user}","gists_url":"https://api.github.com/users/SpongePowered/gists{/gist_id}","starred_url":"https://api.github.com/users/SpongePowered/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpongePowered/subscriptions","organizations_url":"https://api.github.com/users/SpongePowered/orgs","repos_url":"https://api.github.com/users/SpongePowered/repos","events_url":"https://api.github.com/users/SpongePowered/events{/privacy}","received_events_url":"https://api.github.com/users/SpongePowered/received_events","type":"Organization","site_admin":false},"repo":{"id":23770421,"name":"SpongeAPI","full_name":"SpongePowered/SpongeAPI","owner":{"login":"SpongePowered","id":8683473,"avatar_url":"https://avatars.githubusercontent.com/u/8683473?v=3","gravatar_id":"","url":"https://api.github.com/users/SpongePowered","html_url":"https://github.com/SpongePowered","followers_url":"https://api.github.com/users/SpongePowered/followers","following_url":"https://api.github.com/users/SpongePowered/following{/other_user}","gists_url":"https://api.github.com/users/SpongePowered/gists{/gist_id}","starred_url":"https://api.github.com/users/SpongePowered/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpongePowered/subscriptions","organizations_url":"https://api.github.com/users/SpongePowered/orgs","repos_url":"https://api.github.com/users/SpongePowered/repos","events_url":"https://api.github.com/users/SpongePowered/events{/privacy}","received_events_url":"https://api.github.com/users/SpongePowered/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SpongePowered/SpongeAPI","description":"A Minecraft plugin API","fork":false,"url":"https://api.github.com/repos/SpongePowered/SpongeAPI","forks_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/forks","keys_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/teams","hooks_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/hooks","issue_events_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/events{/number}","events_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/events","assignees_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/assignees{/user}","branches_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/branches{/branch}","tags_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/tags","blobs_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/git/refs{/sha}","trees_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/statuses/{sha}","languages_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/languages","stargazers_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/stargazers","contributors_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/contributors","subscribers_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/subscribers","subscription_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/subscription","commits_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/commits{/sha}","git_commits_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/git/commits{/sha}","comments_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/comments{/number}","issue_comment_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/comments{/number}","contents_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/contents/{+path}","compare_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/merges","archive_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/downloads","issues_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues{/number}","pulls_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls{/number}","milestones_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/milestones{/number}","notifications_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/labels{/name}","releases_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/releases{/id}","created_at":"2014-09-07T20:39:25Z","updated_at":"2015-02-26T23:44:13Z","pushed_at":"2015-02-26T21:03:02Z","git_url":"git://github.com/SpongePowered/SpongeAPI.git","ssh_url":"git@github.com:SpongePowered/SpongeAPI.git","clone_url":"https://github.com/SpongePowered/SpongeAPI.git","svn_url":"https://github.com/SpongePowered/SpongeAPI","homepage":"http://www.spongepowered.org/","size":15588,"stargazers_count":738,"watchers_count":738,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":336,"mirror_url":null,"open_issues_count":49,"forks":336,"open_issues":49,"watchers":738,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409"},"html":{"href":"https://github.com/SpongePowered/SpongeAPI/pull/409"},"issue":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/409"},"comments":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/409/comments"},"review_comments":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409/comments"},"review_comment":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/409/commits"},"statuses":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/statuses/dd390af31eb52b33ad8a17b4a101caa43c1b6aaf"}}}}