{"action":"created","comment":{"url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/comments/27246901","id":27246901,"diff_hunk":"@@ -214,244 +227,53 @@ public void handle(net.md_5.bungee.protocol.packet.Team team) throws Exception\n     }\n \n     @Override\n-    public void handle(PluginMessage pluginMessage) throws Exception\n-    {\n+    public void handle(PluginMessage pluginMessage) throws Exception {\n+        if (pluginChannelHandler == null) {\n+            pluginChannelHandler = new BungeePluginChannelHandler(this);\n+        }\n         DataInput in = pluginMessage.getStream();\n-        PluginMessageEvent event = new PluginMessageEvent( con.getServer(), con, pluginMessage.getTag(), pluginMessage.getData().clone() );\n+        PluginMessageEvent event = new PluginMessageEvent(con.getServer(), con, pluginMessage.getTag(), pluginMessage.getData().clone());\n \n-        if ( bungee.getPluginManager().callEvent( event ).isCancelled() )\n-        {\n+        if (bungee.getPluginManager().callEvent(event).isCancelled()) {\n             throw CancelSendSignal.INSTANCE;\n         }\n \n-        if ( pluginMessage.getTag().equals( \"MC|Brand\" ) )\n-        {\n-            if ( con.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )\n-            {\n-                try\n-                {\n-                    ByteBuf brand = Unpooled.wrappedBuffer( pluginMessage.getData() );\n-                    String serverBrand = DefinedPacket.readString( brand );\n-                    brand.release();\n-                    brand = ByteBufAllocator.DEFAULT.heapBuffer();\n-                    DefinedPacket.writeString( bungee.getName() + \" (\" + bungee.getVersion() + \")\" + \" <- \" + serverBrand, brand );\n-                    pluginMessage.setData( brand.array().clone() );\n-                    brand.release();\n-                } catch ( Exception ignored )\n-                {\n-                    // TODO: Remove this\n-                    // Older spigot protocol builds sent the brand incorrectly\n-                    return;\n-                }\n-            } else\n-            {\n-                String serverBrand = new String( pluginMessage.getData(), \"UTF-8\" );\n-                pluginMessage.setData( ( bungee.getName() + \" (\" + bungee.getVersion() + \")\" + \" <- \" + serverBrand ).getBytes( \"UTF-8\" ) );\n-            }\n-            // changes in the packet are ignored so we need to send it manually\n-            con.unsafe().sendPacket( pluginMessage );\n-            throw CancelSendSignal.INSTANCE;\n+        switch (pluginMessage.getTag()) {\n+            case \"MC|Brand\":\n+                handleMCBrand(pluginMessage, event);\n+                break;\n+            case \"BungeeCord\":\n+                pluginChannelHandler.handle(in, event);\n+                break;\n         }\n+    }\n \n-        if ( pluginMessage.getTag().equals( \"BungeeCord\" ) )\n+    private void handleMCBrand(PluginMessage pluginMessage, PluginMessageEvent event) throws Exception {\n+        if ( con.getPendingConnection().getVersion() >= ProtocolConstants.MINECRAFT_1_8 )\n         {\n-            ByteArrayDataOutput out = ByteStreams.newDataOutput();\n-            String subChannel = in.readUTF();\n-\n-            if ( subChannel.equals( \"ForwardToPlayer\" ) )\n-            {\n-                ProxiedPlayer target = bungee.getPlayer( in.readUTF() );\n-                if ( target != null )\n-                {\n-                    // Read data from server\n-                    String channel = in.readUTF();\n-                    short len = in.readShort();\n-                    byte[] data = new byte[ len ];\n-                    in.readFully( data );\n-\n-                    // Prepare new data to send\n-                    out.writeUTF( channel );\n-                    out.writeShort( data.length );\n-                    out.write( data );\n-                    byte[] payload = out.toByteArray();\n-\n-                    target.getServer().sendData( \"BungeeCord\", payload );\n-                }\n-\n-                // Null out stream, important as we don't want to send to ourselves\n-                out = null;\n-            }\n-            if ( subChannel.equals( \"Forward\" ) )\n-            {\n-                // Read data from server\n-                String target = in.readUTF();\n-                String channel = in.readUTF();\n-                short len = in.readShort();\n-                byte[] data = new byte[ len ];\n-                in.readFully( data );\n-\n-                // Prepare new data to send\n-                out.writeUTF( channel );\n-                out.writeShort( data.length );\n-                out.write( data );\n-                byte[] payload = out.toByteArray();\n-\n-                // Null out stream, important as we don't want to send to ourselves\n-                out = null;\n-\n-                if ( target.equals( \"ALL\" ) )\n-                {\n-                    for ( ServerInfo server : bungee.getServers().values() )\n-                    {\n-                        if ( server != con.getServer().getInfo() )\n-                        {\n-                            server.sendData( \"BungeeCord\", payload );\n-                        }\n-                    }\n-                } else if ( target.equals( \"ONLINE\" ) )\n-                {\n-                    for ( ServerInfo server : bungee.getServers().values() )\n-                    {\n-                        if ( server != con.getServer().getInfo() )\n-                        {\n-                            server.sendData( \"BungeeCord\", payload, false );\n-                        }\n-                    }\n-                } else\n-                {\n-                    ServerInfo server = bungee.getServerInfo( target );\n-                    if ( server != null )\n-                    {\n-                        server.sendData( \"BungeeCord\", payload );\n-                    }\n-                }\n-            }\n-            if ( subChannel.equals( \"Connect\" ) )\n-            {\n-                ServerInfo server = bungee.getServerInfo( in.readUTF() );\n-                if ( server != null )\n-                {\n-                    con.connect( server );\n-                }\n-            }\n-            if ( subChannel.equals( \"ConnectOther\" ) )\n-            {\n-                ProxiedPlayer player = bungee.getPlayer( in.readUTF() );\n-                if ( player != null )\n-                {\n-                    ServerInfo server = bungee.getServerInfo( in.readUTF() );\n-                    if ( server != null )\n-                    {\n-                        player.connect( server );\n-                    }\n-                }\n-            }\n-            if ( subChannel.equals( \"IP\" ) )\n-            {\n-                out.writeUTF( \"IP\" );\n-                out.writeUTF( con.getAddress().getHostString() );\n-                out.writeInt( con.getAddress().getPort() );\n-            }\n-            if ( subChannel.equals( \"PlayerCount\" ) )\n-            {\n-                String target = in.readUTF();\n-                out.writeUTF( \"PlayerCount\" );\n-                if ( target.equals( \"ALL\" ) )\n-                {\n-                    out.writeUTF( \"ALL\" );\n-                    out.writeInt( bungee.getOnlineCount() );\n-                } else\n-                {\n-                    ServerInfo server = bungee.getServerInfo( target );\n-                    if ( server != null )\n-                    {\n-                        out.writeUTF( server.getName() );\n-                        out.writeInt( server.getPlayers().size() );\n-                    }\n-                }\n-            }\n-            if ( subChannel.equals( \"PlayerList\" ) )\n-            {\n-                String target = in.readUTF();\n-                out.writeUTF( \"PlayerList\" );\n-                if ( target.equals( \"ALL\" ) )\n-                {\n-                    out.writeUTF( \"ALL\" );\n-                    out.writeUTF( Util.csv( bungee.getPlayers() ) );\n-                } else\n-                {\n-                    ServerInfo server = bungee.getServerInfo( target );\n-                    if ( server != null )\n-                    {\n-                        out.writeUTF( server.getName() );\n-                        out.writeUTF( Util.csv( server.getPlayers() ) );\n-                    }\n-                }\n-            }\n-            if ( subChannel.equals( \"GetServers\" ) )\n-            {\n-                out.writeUTF( \"GetServers\" );\n-                out.writeUTF( Util.csv( bungee.getServers().keySet() ) );\n-            }\n-            if ( subChannel.equals( \"Message\" ) )\n-            {\n-                ProxiedPlayer target = bungee.getPlayer( in.readUTF() );\n-                if ( target != null )\n-                {\n-                    target.sendMessage( in.readUTF() );\n-                }\n-            }\n-            if ( subChannel.equals( \"GetServer\" ) )\n-            {\n-                out.writeUTF( \"GetServer\" );\n-                out.writeUTF( server.getInfo().getName() );\n-            }\n-            if ( subChannel.equals( \"UUID\" ) )\n-            {\n-                out.writeUTF( \"UUID\" );\n-                out.writeUTF( con.getUUID() );\n-            }\n-            if ( subChannel.equals( \"UUIDOther\" ) )\n-            {\n-                ProxiedPlayer player = bungee.getPlayer( in.readUTF() );\n-                if ( player != null )\n-                {\n-                    out.writeUTF( \"UUIDOther\" );\n-                    out.writeUTF( player.getName() );\n-                    out.writeUTF( player.getUUID() );\n-                }\n-            }\n-            if ( subChannel.equals( \"ServerIP\" ) )\n-            {\n-                ServerInfo info = bungee.getServerInfo( in.readUTF() );\n-                if ( info != null )\n-                {\n-                    out.writeUTF( \"ServerIP\" );\n-                    out.writeUTF( info.getName() );\n-                    out.writeUTF( info.getAddress().getAddress().getHostAddress() );\n-                    out.writeShort( info.getAddress().getPort() );\n-                }\n-            }\n-            if ( subChannel.equals( \"KickPlayer\" ) )\n+            try\n             {\n-                ProxiedPlayer player = bungee.getPlayer( in.readUTF() );\n-                if ( player != null )\n-                {\n-                    String kickReason = in.readUTF();\n-                    player.disconnect( new TextComponent( kickReason ) );\n-                }\n-            }\n-\n-            // Check we haven't set out to null, and we have written data, if so reply back back along the BungeeCord channel\n-            if ( out != null )\n+                ByteBuf brand = Unpooled.wrappedBuffer( pluginMessage.getData() );\n+                String serverBrand = DefinedPacket.readString( brand );\n+                brand.release();\n+                brand = ByteBufAllocator.DEFAULT.heapBuffer();","path":"proxy/src/main/java/net/md_5/bungee/connection/DownstreamBridge.java","position":308,"original_position":308,"commit_id":"d886ed7a6e549df0049d5a70778515cb7498daef","original_commit_id":"d886ed7a6e549df0049d5a70778515cb7498daef","user":{"login":"krillr","id":688699,"avatar_url":"https://avatars.githubusercontent.com/u/688699?v=3","gravatar_id":"","url":"https://api.github.com/users/krillr","html_url":"https://github.com/krillr","followers_url":"https://api.github.com/users/krillr/followers","following_url":"https://api.github.com/users/krillr/following{/other_user}","gists_url":"https://api.github.com/users/krillr/gists{/gist_id}","starred_url":"https://api.github.com/users/krillr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krillr/subscriptions","organizations_url":"https://api.github.com/users/krillr/orgs","repos_url":"https://api.github.com/users/krillr/repos","events_url":"https://api.github.com/users/krillr/events{/privacy}","received_events_url":"https://api.github.com/users/krillr/received_events","type":"User","site_admin":false},"body":"This is the same way it's handled in ServerConnector.handle(Login), so I'm a little hesitant to change it without knowing a bit more about why it's written this way in both places -- and more about doing this sort of thing in Java. I don't use Java often.","created_at":"2015-03-26T19:23:31Z","updated_at":"2015-03-26T19:23:31Z","html_url":"https://github.com/SpigotMC/BungeeCord/pull/1415#discussion_r27246901","pull_request_url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415","_links":{"self":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/comments/27246901"},"html":{"href":"https://github.com/SpigotMC/BungeeCord/pull/1415#discussion_r27246901"},"pull_request":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415"}}},"pull_request":{"url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415","id":32049166,"html_url":"https://github.com/SpigotMC/BungeeCord/pull/1415","diff_url":"https://github.com/SpigotMC/BungeeCord/pull/1415.diff","patch_url":"https://github.com/SpigotMC/BungeeCord/pull/1415.patch","issue_url":"https://api.github.com/repos/SpigotMC/BungeeCord/issues/1415","number":1415,"state":"open","locked":false,"title":"Refactor how the BungeeCord plugin channel stuff is handled to be more readable, maintainable, and extensible","user":{"login":"krillr","id":688699,"avatar_url":"https://avatars.githubusercontent.com/u/688699?v=3","gravatar_id":"","url":"https://api.github.com/users/krillr","html_url":"https://github.com/krillr","followers_url":"https://api.github.com/users/krillr/followers","following_url":"https://api.github.com/users/krillr/following{/other_user}","gists_url":"https://api.github.com/users/krillr/gists{/gist_id}","starred_url":"https://api.github.com/users/krillr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krillr/subscriptions","organizations_url":"https://api.github.com/users/krillr/orgs","repos_url":"https://api.github.com/users/krillr/repos","events_url":"https://api.github.com/users/krillr/events{/privacy}","received_events_url":"https://api.github.com/users/krillr/received_events","type":"User","site_admin":false},"body":"When writing a plugin that uses the plugin channel \"API\" I noticed the code could use some love, so I gave it all I had :)","created_at":"2015-03-26T18:56:05Z","updated_at":"2015-03-26T19:23:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cc0b6a5ecdeba968625f738c6a7156dfbf66c5e1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415/commits","review_comments_url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415/comments","review_comment_url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SpigotMC/BungeeCord/issues/1415/comments","statuses_url":"https://api.github.com/repos/SpigotMC/BungeeCord/statuses/d886ed7a6e549df0049d5a70778515cb7498daef","head":{"label":"krillr:master","ref":"master","sha":"d886ed7a6e549df0049d5a70778515cb7498daef","user":{"login":"krillr","id":688699,"avatar_url":"https://avatars.githubusercontent.com/u/688699?v=3","gravatar_id":"","url":"https://api.github.com/users/krillr","html_url":"https://github.com/krillr","followers_url":"https://api.github.com/users/krillr/followers","following_url":"https://api.github.com/users/krillr/following{/other_user}","gists_url":"https://api.github.com/users/krillr/gists{/gist_id}","starred_url":"https://api.github.com/users/krillr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krillr/subscriptions","organizations_url":"https://api.github.com/users/krillr/orgs","repos_url":"https://api.github.com/users/krillr/repos","events_url":"https://api.github.com/users/krillr/events{/privacy}","received_events_url":"https://api.github.com/users/krillr/received_events","type":"User","site_admin":false},"repo":{"id":32939324,"name":"BungeeCord","full_name":"krillr/BungeeCord","owner":{"login":"krillr","id":688699,"avatar_url":"https://avatars.githubusercontent.com/u/688699?v=3","gravatar_id":"","url":"https://api.github.com/users/krillr","html_url":"https://github.com/krillr","followers_url":"https://api.github.com/users/krillr/followers","following_url":"https://api.github.com/users/krillr/following{/other_user}","gists_url":"https://api.github.com/users/krillr/gists{/gist_id}","starred_url":"https://api.github.com/users/krillr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krillr/subscriptions","organizations_url":"https://api.github.com/users/krillr/orgs","repos_url":"https://api.github.com/users/krillr/repos","events_url":"https://api.github.com/users/krillr/events{/privacy}","received_events_url":"https://api.github.com/users/krillr/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/krillr/BungeeCord","description":"BungeeCord, the 6th in a generation of server portal suites. Efficiently proxies and maintains connections and transport between multiple Minecraft servers.","fork":true,"url":"https://api.github.com/repos/krillr/BungeeCord","forks_url":"https://api.github.com/repos/krillr/BungeeCord/forks","keys_url":"https://api.github.com/repos/krillr/BungeeCord/keys{/key_id}","collaborators_url":"https://api.github.com/repos/krillr/BungeeCord/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/krillr/BungeeCord/teams","hooks_url":"https://api.github.com/repos/krillr/BungeeCord/hooks","issue_events_url":"https://api.github.com/repos/krillr/BungeeCord/issues/events{/number}","events_url":"https://api.github.com/repos/krillr/BungeeCord/events","assignees_url":"https://api.github.com/repos/krillr/BungeeCord/assignees{/user}","branches_url":"https://api.github.com/repos/krillr/BungeeCord/branches{/branch}","tags_url":"https://api.github.com/repos/krillr/BungeeCord/tags","blobs_url":"https://api.github.com/repos/krillr/BungeeCord/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/krillr/BungeeCord/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/krillr/BungeeCord/git/refs{/sha}","trees_url":"https://api.github.com/repos/krillr/BungeeCord/git/trees{/sha}","statuses_url":"https://api.github.com/repos/krillr/BungeeCord/statuses/{sha}","languages_url":"https://api.github.com/repos/krillr/BungeeCord/languages","stargazers_url":"https://api.github.com/repos/krillr/BungeeCord/stargazers","contributors_url":"https://api.github.com/repos/krillr/BungeeCord/contributors","subscribers_url":"https://api.github.com/repos/krillr/BungeeCord/subscribers","subscription_url":"https://api.github.com/repos/krillr/BungeeCord/subscription","commits_url":"https://api.github.com/repos/krillr/BungeeCord/commits{/sha}","git_commits_url":"https://api.github.com/repos/krillr/BungeeCord/git/commits{/sha}","comments_url":"https://api.github.com/repos/krillr/BungeeCord/comments{/number}","issue_comment_url":"https://api.github.com/repos/krillr/BungeeCord/issues/comments{/number}","contents_url":"https://api.github.com/repos/krillr/BungeeCord/contents/{+path}","compare_url":"https://api.github.com/repos/krillr/BungeeCord/compare/{base}...{head}","merges_url":"https://api.github.com/repos/krillr/BungeeCord/merges","archive_url":"https://api.github.com/repos/krillr/BungeeCord/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/krillr/BungeeCord/downloads","issues_url":"https://api.github.com/repos/krillr/BungeeCord/issues{/number}","pulls_url":"https://api.github.com/repos/krillr/BungeeCord/pulls{/number}","milestones_url":"https://api.github.com/repos/krillr/BungeeCord/milestones{/number}","notifications_url":"https://api.github.com/repos/krillr/BungeeCord/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/krillr/BungeeCord/labels{/name}","releases_url":"https://api.github.com/repos/krillr/BungeeCord/releases{/id}","created_at":"2015-03-26T16:35:36Z","updated_at":"2015-03-26T18:54:58Z","pushed_at":"2015-03-26T18:54:58Z","git_url":"git://github.com/krillr/BungeeCord.git","ssh_url":"git@github.com:krillr/BungeeCord.git","clone_url":"https://github.com/krillr/BungeeCord.git","svn_url":"https://github.com/krillr/BungeeCord","homepage":"http://www.spigotmc.org/threads/bungeecord.392/","size":9812,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"SpigotMC:master","ref":"master","sha":"3973c511f569238d2dea430ffb6cff499283338e","user":{"login":"SpigotMC","id":4350249,"avatar_url":"https://avatars.githubusercontent.com/u/4350249?v=3","gravatar_id":"","url":"https://api.github.com/users/SpigotMC","html_url":"https://github.com/SpigotMC","followers_url":"https://api.github.com/users/SpigotMC/followers","following_url":"https://api.github.com/users/SpigotMC/following{/other_user}","gists_url":"https://api.github.com/users/SpigotMC/gists{/gist_id}","starred_url":"https://api.github.com/users/SpigotMC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpigotMC/subscriptions","organizations_url":"https://api.github.com/users/SpigotMC/orgs","repos_url":"https://api.github.com/users/SpigotMC/repos","events_url":"https://api.github.com/users/SpigotMC/events{/privacy}","received_events_url":"https://api.github.com/users/SpigotMC/received_events","type":"Organization","site_admin":false},"repo":{"id":6084210,"name":"BungeeCord","full_name":"SpigotMC/BungeeCord","owner":{"login":"SpigotMC","id":4350249,"avatar_url":"https://avatars.githubusercontent.com/u/4350249?v=3","gravatar_id":"","url":"https://api.github.com/users/SpigotMC","html_url":"https://github.com/SpigotMC","followers_url":"https://api.github.com/users/SpigotMC/followers","following_url":"https://api.github.com/users/SpigotMC/following{/other_user}","gists_url":"https://api.github.com/users/SpigotMC/gists{/gist_id}","starred_url":"https://api.github.com/users/SpigotMC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpigotMC/subscriptions","organizations_url":"https://api.github.com/users/SpigotMC/orgs","repos_url":"https://api.github.com/users/SpigotMC/repos","events_url":"https://api.github.com/users/SpigotMC/events{/privacy}","received_events_url":"https://api.github.com/users/SpigotMC/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SpigotMC/BungeeCord","description":"BungeeCord, the 6th in a generation of server portal suites. Efficiently proxies and maintains connections and transport between multiple Minecraft servers.","fork":false,"url":"https://api.github.com/repos/SpigotMC/BungeeCord","forks_url":"https://api.github.com/repos/SpigotMC/BungeeCord/forks","keys_url":"https://api.github.com/repos/SpigotMC/BungeeCord/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SpigotMC/BungeeCord/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SpigotMC/BungeeCord/teams","hooks_url":"https://api.github.com/repos/SpigotMC/BungeeCord/hooks","issue_events_url":"https://api.github.com/repos/SpigotMC/BungeeCord/issues/events{/number}","events_url":"https://api.github.com/repos/SpigotMC/BungeeCord/events","assignees_url":"https://api.github.com/repos/SpigotMC/BungeeCord/assignees{/user}","branches_url":"https://api.github.com/repos/SpigotMC/BungeeCord/branches{/branch}","tags_url":"https://api.github.com/repos/SpigotMC/BungeeCord/tags","blobs_url":"https://api.github.com/repos/SpigotMC/BungeeCord/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SpigotMC/BungeeCord/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SpigotMC/BungeeCord/git/refs{/sha}","trees_url":"https://api.github.com/repos/SpigotMC/BungeeCord/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SpigotMC/BungeeCord/statuses/{sha}","languages_url":"https://api.github.com/repos/SpigotMC/BungeeCord/languages","stargazers_url":"https://api.github.com/repos/SpigotMC/BungeeCord/stargazers","contributors_url":"https://api.github.com/repos/SpigotMC/BungeeCord/contributors","subscribers_url":"https://api.github.com/repos/SpigotMC/BungeeCord/subscribers","subscription_url":"https://api.github.com/repos/SpigotMC/BungeeCord/subscription","commits_url":"https://api.github.com/repos/SpigotMC/BungeeCord/commits{/sha}","git_commits_url":"https://api.github.com/repos/SpigotMC/BungeeCord/git/commits{/sha}","comments_url":"https://api.github.com/repos/SpigotMC/BungeeCord/comments{/number}","issue_comment_url":"https://api.github.com/repos/SpigotMC/BungeeCord/issues/comments{/number}","contents_url":"https://api.github.com/repos/SpigotMC/BungeeCord/contents/{+path}","compare_url":"https://api.github.com/repos/SpigotMC/BungeeCord/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SpigotMC/BungeeCord/merges","archive_url":"https://api.github.com/repos/SpigotMC/BungeeCord/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SpigotMC/BungeeCord/downloads","issues_url":"https://api.github.com/repos/SpigotMC/BungeeCord/issues{/number}","pulls_url":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls{/number}","milestones_url":"https://api.github.com/repos/SpigotMC/BungeeCord/milestones{/number}","notifications_url":"https://api.github.com/repos/SpigotMC/BungeeCord/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SpigotMC/BungeeCord/labels{/name}","releases_url":"https://api.github.com/repos/SpigotMC/BungeeCord/releases{/id}","created_at":"2012-10-05T01:01:56Z","updated_at":"2015-03-26T13:36:04Z","pushed_at":"2015-03-26T18:56:05Z","git_url":"git://github.com/SpigotMC/BungeeCord.git","ssh_url":"git@github.com:SpigotMC/BungeeCord.git","clone_url":"https://github.com/SpigotMC/BungeeCord.git","svn_url":"https://github.com/SpigotMC/BungeeCord","homepage":"http://www.spigotmc.org/threads/bungeecord.392/","size":9812,"stargazers_count":289,"watchers_count":289,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":409,"mirror_url":null,"open_issues_count":115,"forks":409,"open_issues":115,"watchers":289,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415"},"html":{"href":"https://github.com/SpigotMC/BungeeCord/pull/1415"},"issue":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/issues/1415"},"comments":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/issues/1415/comments"},"review_comments":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415/comments"},"review_comment":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/pulls/1415/commits"},"statuses":{"href":"https://api.github.com/repos/SpigotMC/BungeeCord/statuses/d886ed7a6e549df0049d5a70778515cb7498daef"}}}}