{"action":"created","comment":{"url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments/24810171","id":24810171,"diff_hunk":"@@ -0,0 +1,515 @@\n+/*\n+ * This file is part of Sponge, licensed under the MIT License (MIT).\n+ *\n+ * Copyright (c) SpongePowered.org <http://www.spongepowered.org>\n+ * Copyright (c) contributors\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining a copy\n+ * of this software and associated documentation files (the \"Software\"), to deal\n+ * in the Software without restriction, including without limitation the rights\n+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+ * copies of the Software, and to permit persons to whom the Software is\n+ * furnished to do so, subject to the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be included in\n+ * all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n+ * THE SOFTWARE.\n+ */\n+package org.spongepowered.api.text;\n+\n+import static com.google.common.base.Preconditions.checkNotNull;\n+\n+import com.google.common.collect.ImmutableList;\n+import org.spongepowered.api.text.format.TextColor;\n+import org.spongepowered.api.text.format.TextColors;\n+import org.spongepowered.api.text.format.TextStyle;\n+import org.spongepowered.api.text.format.TextStyles;\n+import org.spongepowered.api.text.selector.Selector;\n+import org.spongepowered.api.text.translation.Translatable;\n+import org.spongepowered.api.text.translation.Translation;\n+\n+/**\n+ * Utility class to work with and create {@link Text}s.\n+ */\n+public final class Texts {\n+\n+    private static final TextFactory factory = null;\n+    static final Text.Literal EMPTY = new Text.Literal();\n+\n+    private Texts() {\n+    }\n+\n+    /**\n+     * Returns an empty, unformatted {@link Text} instance.\n+     *\n+     * @return An empty text\n+     */\n+    public static Text of() {\n+        return EMPTY;\n+    }\n+\n+    /**\n+     * Creates a {@link Text} with the specified plain text. The created message\n+     * won't have any formatting or events configured.\n+     *\n+     * @param content The content of the text\n+     * @return The created text\n+     * @see Text.Literal\n+     */\n+    public static Text.Literal of(String content) {\n+        return new Text.Literal(content);\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link Text.Translatable} with the given\n+     * {@link Translation} and arguments.\n+     *\n+     * @param translation The translation for the text\n+     * @param args The arguments for the translation\n+     * @return The created text\n+     * @see Text.Translatable\n+     */\n+    public static Text.Translatable of(Translation translation, Object... args) {\n+        return new Text.Translatable(translation, ImmutableList.copyOf(checkNotNull(args, \"args\")));\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link Text.Translatable} from the given\n+     * {@link Translatable}.\n+     *\n+     * @param translatable The translatable for the text\n+     * @return The created text\n+     * @see Text.Translatable\n+     */\n+    public static Text.Translatable of(Translatable translatable) {\n+        // TODO: Remove explicit array initializer once Statistic API is\n+        // implemented\n+        return of(checkNotNull(translatable, \"translatable\").getTranslation(), new Object[0]);\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link Text.Selector} with the given selector.\n+     *\n+     * @param selector The selector for the text\n+     * @return The created text\n+     * @see Text.Selector\n+     */\n+    public static Text.Selector of(Selector selector) {\n+        return new Text.Selector(selector);\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link Text.Score} with the given score.\n+     *\n+     * @param score The score for the text\n+     * @return The created text\n+     * @see Text.Score\n+     */\n+    // TODO: Replace with Statistic API\n+    public static Text.Score of(Object score) {\n+        return new Text.Score(score);\n+    }\n+\n+    /**\n+     * Builds a {@link Text} from a given array of objects.\n+     *\n+     * <p>For instance, you can use this like\n+     * <code>Texts.of(TextColors.DARK_AQUA, \"Hi\", TextColors.AQUA, \"Bye\")</code>\n+     * </p>\n+     *\n+     * @param objects The object array\n+     * @return The built text object\n+     * @throws IllegalArgumentException If a passed-in argument is not of type\n+     *         {@link TextColor}, {@link TextStyle}, {@link String} or\n+     *         {@link Text}\n+     */\n+    public static Text of(Object... objects) throws IllegalArgumentException {\n+        TextBuilder builder = builder();\n+        TextColor color = TextColors.NONE;\n+        TextStyle style = TextStyles.NONE;\n+        for (Object obj : objects) {\n+            if (obj instanceof TextColor) {\n+                color = (TextColor) obj;\n+            } else if (obj instanceof TextStyle) {\n+                style = obj.equals(TextStyles.RESET) ? TextStyles.NONE : style.and((TextStyle) obj);\n+            } else if (obj instanceof Text) {\n+                builder.append((Text) obj);\n+            } else if (obj instanceof String) {\n+                builder.append(builder((String) obj).color(color).style(style).build());\n+            } else {\n+                throw new IllegalArgumentException(\"Unexpected type for object \" + obj);\n+            }\n+        }\n+\n+        return builder.build();\n+    }\n+\n+    /**\n+     * Creates a {@link TextBuilder} with empty text.\n+     *\n+     * @return A new text builder with empty text\n+     */\n+    public static TextBuilder builder() {\n+        return new TextBuilder.Literal();\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link TextBuilder.Literal} with the specified\n+     * content.\n+     *\n+     * @param content The content of the text\n+     * @return The created text builder\n+     * @see Text.Literal\n+     * @see TextBuilder.Literal\n+     */\n+    public static TextBuilder.Literal builder(String content) {\n+        return new TextBuilder.Literal(content);\n+    }\n+\n+    /**\n+     * Creates a new {@link TextBuilder.Literal} with the formatting and actions\n+     * of the specified {@link Text} and the given content.\n+     *\n+     * @param text The text to apply the properties from\n+     * @param content The content for the text builder\n+     * @return The created text builder\n+     * @see Text.Literal\n+     * @see TextBuilder.Literal\n+     */\n+    public static TextBuilder.Literal builder(Text text, String content) {\n+        return new TextBuilder.Literal(text, content);\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link TextBuilder.Translatable} with the given\n+     * {@link Translation} and arguments.\n+     *\n+     * @param translation The translation for the builder\n+     * @param args The arguments for the translation\n+     * @return The created text builder\n+     * @see Text.Translatable\n+     * @see TextBuilder.Translatable\n+     */\n+    public static TextBuilder.Translatable builder(Translation translation, Object... args) {\n+        return new TextBuilder.Translatable(translation, args);\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link TextBuilder.Translatable} from the given\n+     * {@link Translatable}.\n+     *\n+     * @param translatable The translatable for the builder\n+     * @return The created text builder\n+     * @see Text.Translatable\n+     * @see TextBuilder.Translatable\n+     */\n+    public static TextBuilder.Translatable builder(Translatable translatable) {\n+        return new TextBuilder.Translatable(translatable);\n+    }\n+\n+    /**\n+     * Creates a new {@link TextBuilder.Translatable} with the formatting and\n+     * actions of the specified {@link Text} and the given {@link Translation}\n+     * and arguments.\n+     *\n+     * @param text The text to apply the properties from\n+     * @param translation The translation for the builder\n+     * @param args The arguments for the translation\n+     * @return The created text builder\n+     * @see Text.Translatable\n+     * @see TextBuilder.Translatable\n+     */\n+    public static TextBuilder.Translatable builder(Text text, Translation translation, Object... args) {\n+        return new TextBuilder.Translatable(text, translation, args);\n+    }\n+\n+    /**\n+     * Creates a new {@link TextBuilder.Translatable} with the formatting and\n+     * actions of the specified {@link Text} and the given {@link Translatable}.\n+     *\n+     * @param text The text to apply the properties from\n+     * @param translatable The translatable for the builder\n+     * @return The created text builder\n+     * @see Text.Translatable\n+     * @see TextBuilder.Translatable\n+     */\n+    public static TextBuilder.Translatable builder(Text text, Translatable translatable) {\n+        return new TextBuilder.Translatable(text, translatable);\n+    }\n+\n+    /**\n+     * Creates a new unformatted {@link TextBuilder.Selector} with the given\n+     * selector.\n+     *\n+     * @param selector The selector for the builder\n+     * @return The created text builder\n+     * @see Text.Selector\n+     * @see TextBuilder.Selector\n+     */\n+    public static TextBuilder.Selector builder(Selector selector) {\n+        return new TextBuilder.Selector(selector);\n+    }\n+\n+    /**\n+     * Creates a new {@link TextBuilder.Selector} with the formatting and\n+     * actions of the specified {@link Text} and the given selector.\n+     *\n+     * @param text The text to apply the properties from\n+     * @param selector The selector for the builder\n+     * @return The created text builder\n+     * @see Text.Selector\n+     * @see TextBuilder.Selector\n+     */\n+    public static TextBuilder.Selector builder(Text text, Selector selector) {\n+        return new TextBuilder.Selector(text, selector);\n+    }\n+\n+    // TODO: Replace with Statistic API\n+\n+    /**\n+     * Creates a new unformatted {@link TextBuilder.Score} with the given score.\n+     *\n+     * @param score The score for the text builder\n+     * @return The created text builder\n+     * @see Text.Score\n+     * @see TextBuilder.Score\n+     */\n+    public static TextBuilder.Score builder(Object score) {\n+        return new TextBuilder.Score(score);\n+    }\n+\n+    /**\n+     * Creates a new {@link TextBuilder.Score} with the formatting and actions\n+     * of the specified {@link Text} and the given score.\n+     *\n+     * @param text The text to apply the properties from\n+     * @param score The score for the text builder\n+     * @return The created text builder\n+     * @see Text.Score\n+     * @see TextBuilder.Score\n+     */\n+    public static TextBuilder.Score builder(Text text, Object score) {\n+        return new TextBuilder.Score(text, score);\n+    }\n+\n+    /**\n+     * Joins a sequence of text objects together.\n+     *\n+     * @param texts The texts to join\n+     * @return A text object that joins the given text objects\n+     */\n+    public static Text join(Text... texts) {\n+        return builder().append(texts).build();\n+    }\n+\n+    /**\n+     * Joins a sequence of text objects together.\n+     *\n+     * @param texts The texts to join\n+     * @return A text object that joins the given text objects\n+     */\n+    public static Text join(Iterable<? extends Text> texts) {\n+        return builder().append(texts).build();\n+    }\n+\n+    /**\n+     * Joins a sequence of text objects together along with a separator.\n+     *\n+     * @param separator The separator\n+     * @param texts The text to join\n+     * @return A text object that joins the given text objects\n+     */\n+    public static Text join(Text separator, Text... texts) {\n+        switch (texts.length) {\n+            case 0:\n+                return of();\n+            case 1:\n+                return texts[0];\n+            default:\n+                TextBuilder builder = builder();\n+                boolean first = true;\n+                for (Text text : texts) {\n+                    if (!first) {\n+                        builder.append(separator);\n+                    } else {\n+                        first = false;\n+                    }\n+\n+                    builder.append(text);\n+                }\n+\n+                return builder.build();\n+        }\n+    }\n+\n+    /**\n+     * Parses the specified JSON text and returns the parsed result.\n+     *\n+     * @param json The valid JSON text\n+     * @return The parsed text\n+     * @throws IllegalArgumentException If the JSON is invalid\n+     */\n+    public static Text parse(String json) throws IllegalArgumentException {\n+        return factory.parseJson(json);\n+    }\n+\n+    /**\n+     * Parses the specified JSON text and returns the parsed result.\n+     *\n+     * <p>Unlike {@link #parse(String)} this will ignore some formatting errors\n+     * and parse the JSON data more leniently.</p>\n+     *\n+     * @param json The JSON text\n+     * @return The parsed text\n+     * @throws IllegalArgumentException If the JSON couldn't be parsed\n+     */\n+    public static Text parseLenient(String json) throws IllegalArgumentException {\n+        return factory.parseLenientJson(json);\n+    }\n+\n+    /**\n+     * Returns a plain text representation of the {@link Text} without any\n+     * formattings.","path":"src/main/java/org/spongepowered/api/text/Texts.java","position":379,"original_position":379,"commit_id":"16cdfdaaaf5744266c547ab2948183ef7afb9b1f","original_commit_id":"16cdfdaaaf5744266c547ab2948183ef7afb9b1f","user":{"login":"Minecrell","id":3035868,"avatar_url":"https://avatars.githubusercontent.com/u/3035868?v=3","gravatar_id":"","url":"https://api.github.com/users/Minecrell","html_url":"https://github.com/Minecrell","followers_url":"https://api.github.com/users/Minecrell/followers","following_url":"https://api.github.com/users/Minecrell/following{/other_user}","gists_url":"https://api.github.com/users/Minecrell/gists{/gist_id}","starred_url":"https://api.github.com/users/Minecrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minecrell/subscriptions","organizations_url":"https://api.github.com/users/Minecrell/orgs","repos_url":"https://api.github.com/users/Minecrell/repos","events_url":"https://api.github.com/users/Minecrell/events{/privacy}","received_events_url":"https://api.github.com/users/Minecrell/received_events","type":"User","site_admin":false},"body":"Eh, English","created_at":"2015-02-17T11:29:47Z","updated_at":"2015-02-17T11:29:47Z","html_url":"https://github.com/SpongePowered/SpongeAPI/pull/425#discussion_r24810171","pull_request_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425","_links":{"self":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments/24810171"},"html":{"href":"https://github.com/SpongePowered/SpongeAPI/pull/425#discussion_r24810171"},"pull_request":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425"}}},"pull_request":{"url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425","id":28388126,"html_url":"https://github.com/SpongePowered/SpongeAPI/pull/425","diff_url":"https://github.com/SpongePowered/SpongeAPI/pull/425.diff","patch_url":"https://github.com/SpongePowered/SpongeAPI/pull/425.patch","issue_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/425","number":425,"state":"open","locked":false,"title":"[WIP] Text API 2","user":{"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},"body":"Big thanks to @Minecrell for his work here. I just wanted to get a PR to resolve this ASAP and get it merged.\r\n\r\nSome new features:\r\n\r\n- Name of Message/Text has finally been decided on. It will be Text, with Message.Text being Text.Literal\r\n- The generic getContent method has been removed\r\n- A lot of the factory methods have been moved to GameRegistry\r\n- Some more Translatable interfaces\r\n- Javadocs\r\n\r\nThis fixes #287, #263 and #435.","created_at":"2015-01-30T19:51:59Z","updated_at":"2015-02-17T11:29:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6763054a1fe65bb51f1fb3e7a8190ea1e6e57911","assignee":{"login":"Minecrell","id":3035868,"avatar_url":"https://avatars.githubusercontent.com/u/3035868?v=3","gravatar_id":"","url":"https://api.github.com/users/Minecrell","html_url":"https://github.com/Minecrell","followers_url":"https://api.github.com/users/Minecrell/followers","following_url":"https://api.github.com/users/Minecrell/following{/other_user}","gists_url":"https://api.github.com/users/Minecrell/gists{/gist_id}","starred_url":"https://api.github.com/users/Minecrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Minecrell/subscriptions","organizations_url":"https://api.github.com/users/Minecrell/orgs","repos_url":"https://api.github.com/users/Minecrell/repos","events_url":"https://api.github.com/users/Minecrell/events{/privacy}","received_events_url":"https://api.github.com/users/Minecrell/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/SpongePowered/SpongeAPI/milestones/2","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":6,"closed_issues":19,"state":"open","created_at":"2014-11-27T05:08:55Z","updated_at":"2015-02-17T03:02:37Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425/commits","review_comments_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425/comments","review_comment_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments/{number}","comments_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/425/comments","statuses_url":"https://api.github.com/repos/SpongePowered/SpongeAPI/statuses/16cdfdaaaf5744266c547ab2948183ef7afb9b1f","head":{"label":"SpongePowered:feature/text","ref":"feature/text","sha":"16cdfdaaaf5744266c547ab2948183ef7afb9b1f","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-17T03:02:36Z","pushed_at":"2015-02-17T03:02:35Z","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":14816,"stargazers_count":728,"watchers_count":728,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":336,"mirror_url":null,"open_issues_count":47,"forks":336,"open_issues":47,"watchers":728,"default_branch":"master"}},"base":{"label":"SpongePowered:master","ref":"master","sha":"dc07fa0ccb13e516708f14e384bdd7d0171c511e","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-17T03:02:36Z","pushed_at":"2015-02-17T03:02:35Z","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":14816,"stargazers_count":728,"watchers_count":728,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":336,"mirror_url":null,"open_issues_count":47,"forks":336,"open_issues":47,"watchers":728,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425"},"html":{"href":"https://github.com/SpongePowered/SpongeAPI/pull/425"},"issue":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/425"},"comments":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/issues/425/comments"},"review_comments":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425/comments"},"review_comment":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/pulls/425/commits"},"statuses":{"href":"https://api.github.com/repos/SpongePowered/SpongeAPI/statuses/16cdfdaaaf5744266c547ab2948183ef7afb9b1f"}}}}