{"action":"created","comment":{"url":"https://api.github.com/repos/runelite/runelite/pulls/comments/193026572","pull_request_review_id":125911085,"id":193026572,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MzAyNjU3Mg==","diff_hunk":"@@ -0,0 +1,394 @@\n+/*\n+ * Copyright (c) 2018, Jasper Ketelaar <Jasper0781@gmail.com>\n+ * All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice, this\n+ *    list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\n+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+package net.runelite.client.plugins.mta;\n+\n+import java.awt.Color;\n+import java.awt.Graphics2D;\n+import java.awt.image.BufferedImage;\n+import java.util.ArrayList;\n+import java.util.Arrays;\n+import java.util.HashMap;\n+import java.util.List;\n+import javax.inject.Inject;\n+import com.google.common.eventbus.Subscribe;\n+import net.runelite.api.ChatMessageType;\n+import net.runelite.api.Client;\n+import net.runelite.api.GameObject;\n+import net.runelite.api.ItemComposition;\n+import net.runelite.api.ObjectID;\n+import net.runelite.api.Perspective;\n+import net.runelite.api.Point;\n+import net.runelite.api.coords.WorldPoint;\n+import net.runelite.api.events.ChatMessage;\n+import net.runelite.api.events.GameObjectDespawned;\n+import net.runelite.api.events.GameObjectSpawned;\n+import net.runelite.api.events.GameTick;\n+import net.runelite.api.widgets.Widget;\n+import net.runelite.api.widgets.WidgetID;\n+import net.runelite.api.widgets.WidgetInfo;\n+import net.runelite.api.widgets.WidgetItem;\n+import net.runelite.client.game.ItemManager;\n+import net.runelite.client.ui.overlay.infobox.InfoBoxManager;\n+\n+public class AlchemyRoom extends MTARoom\n+{\n+\n+\tprivate static final int TEXT_Z_OFFSET = 180;\n+\tprivate static final int IMAGE_Z_OFFSET = 150;\n+\tprivate static final int CAPACITY = 8;\n+\tprivate static final int INFO_START = 5;\n+\tprivate static final int BEST_POINTS = 30;\n+\n+\tprivate static final List<Integer> CUPBOARDS = Arrays.asList(ObjectID.CUPBOARD_23678, ObjectID.CUPBOARD_23680,\n+\t\t\tObjectID.CUPBOARD_23682, ObjectID.CUPBOARD_23684, ObjectID.CUPBOARD_23686, ObjectID.CUPBOARD_23688,\n+\t\t\tObjectID.CUPBOARD_23690, ObjectID.CUPBOARD_23692);\n+\tprivate static final String YOU_FOUND = \"You found:\";\n+\tprivate static final String EMPTY = \"The cupboard is empty.\";\n+\n+\tprivate final HashMap<AlchemyItem, BufferedImage> IMAGE_MAP = new HashMap<>();\n+\tprivate final AlchemyItem[] locations = new AlchemyItem[CAPACITY];\n+\tprivate final List<GameObject> cupboards = new ArrayList<>(CAPACITY);\n+\tprivate final MTAPlugin plugin;\n+\t@Inject\n+\tprivate ItemManager itemManager;\n+\t@Inject\n+\tprivate InfoBoxManager infoBoxManager;\n+\tprivate Client client;\n+\tprivate String best;\n+\tprivate int suggest = -1;\n+\n+\t@Inject\n+\tpublic AlchemyRoom(Client client, MTAConfig config, MTAPlugin plugin)\n+\t{\n+\t\tsuper(config);\n+\t\tthis.client = client;\n+\t\tthis.plugin = plugin;\n+\t}\n+\n+\n+\t@Subscribe\n+\tpublic void onGameTick(GameTick event)\n+\t{\n+\t\tif (!inside() || !getConfig().alchemy())\n+\t\t{\n+\t\t\treset();\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (IMAGE_MAP.size() < AlchemyItem.values().length - 1)\n+\t\t{\n+\t\t\tfor (AlchemyItem item : AlchemyItem.values())\n+\t\t\t{\n+\t\t\t\tif (item != AlchemyItem.EMPTY && !IMAGE_MAP.containsKey(item))\n+\t\t\t\t{\n+\t\t\t\t\tIMAGE_MAP.put(item, itemManager.getImage(item.getId()));\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif (best == null || !best.equals(getBest()))\n+\t\t{\n+\t\t\tif (best != null)\n+\t\t\t{\n+\t\t\t\tinfoBoxManager.removeIf(e -> e instanceof AlchemyRoomTimer);\n+\t\t\t\tinfoBoxManager.addInfoBox(new AlchemyRoomTimer(plugin));\n+\t\t\t}\n+\t\t\tbest = getBest();\n+\t\t\treset();\n+\t\t}\n+\n+\t\tif (getConfig().mtaHintArrows())\n+\t\t{\n+\t\t\tfor (int i = 0; i < locations.length; i++)\n+\t\t\t{\n+\t\t\t\tAlchemyItem item = locations[i];\n+\t\t\t\tif (item != null && item.toString().equals(best))\n+\t\t\t\t{\n+\t\t\t\t\tGameObject cupboard = cupboards.get(i);\n+\t\t\t\t\tif (cupboard != null)\n+\t\t\t\t\t{\n+\t\t\t\t\t\tclient.setHintArrow(cupboard.getWorldLocation());\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\n+\t@Subscribe\n+\tpublic void onGameObjectSpawned(GameObjectSpawned event)\n+\t{\n+\t\tif (!inside())\n+\t\t\treturn;\n+\n+\t\tGameObject spawn = event.getGameObject();\n+\t\tfor (int i = 0; i < CUPBOARDS.size(); i++)\n+\t\t{\n+\t\t\tint id = CUPBOARDS.get(i);\n+\t\t\tif (spawn.getId() == id || spawn.getId() - 1 == id)\n+\t\t\t{\n+\t\t\t\tcupboards.add(i, spawn);\n+\t\t\t}\n+\t\t}\n+\n+\t}\n+\n+\t@Subscribe\n+\tpublic void onGameObjectDespawned(GameObjectDespawned event)\n+\t{\n+\t\tif (!inside())\n+\t\t\treturn;\n+\n+\t\tGameObject spawn = event.getGameObject();\n+\t\tfor (int i = 0; i < CUPBOARDS.size(); i++)\n+\t\t{\n+\t\t\tint id = CUPBOARDS.get(i);\n+\t\t\tif (spawn.getId() == id || spawn.getId() - 1 == id)\n+\t\t\t{\n+\t\t\t\tcupboards.remove(i);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t@Subscribe\n+\tpublic void onChatMessage(ChatMessage wrapper)\n+\t{\n+\t\tif (!inside() || !getConfig().alchemy())\n+\t\t\treturn;\n+\n+\t\tString message = wrapper.getMessage();\n+\t\tif (wrapper.getType() == ChatMessageType.SERVER)\n+\t\t{\n+\t\t\tif (message.contains(YOU_FOUND))\n+\t\t\t{\n+\t\t\t\tString item = message.replace(YOU_FOUND, \"\").trim();\n+\t\t\t\tfill(getClicked(), item);\n+\t\t\t}\n+\t\t\telse if (message.equals(EMPTY))\n+\t\t\t{\n+\t\t\t\tlocations[getClicked()] = AlchemyItem.EMPTY;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tprivate void reset()\n+\t{\n+\t\treset(false);\n+\t}\n+\n+\tprivate void reset(boolean logout)\n+\t{\n+\t\tfor (int i = 0; i < locations.length; i++)\n+\t\t{\n+\t\t\tlocations[i] = AlchemyItem.UNKNOWN;\n+\t\t}\n+\n+\t\tif (logout)\n+\t\t{\n+\t\t\tfor (int i = 0; i < cupboards.size(); i++)\n+\t\t\t{\n+\t\t\t\tcupboards.set(i, null);\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t@Override\n+\tpublic boolean inside()\n+\t{\n+\t\treturn client.getWidget(WidgetID.MTA_ALCHEMY_GROUP_ID, 0) != null;\n+\t}\n+\n+\tpublic String getBest()\n+\t{\n+\t\tfor (int i = 0; i < INFO_START; i++)\n+\t\t{\n+\t\t\tint index = i + INFO_START;\n+\n+\t\t\tWidget textWidget = client.getWidget(WidgetID.MTA_ALCHEMY_GROUP_ID, index);\n+\t\t\tif (textWidget == null)\n+\t\t\t{\n+\t\t\t\treset();\n+\t\t\t\treturn \"\";\n+\t\t\t}\n+\n+\t\t\tString item = textWidget.getText().replace(\":\", \"\");\n+\n+\t\t\tWidget pointsWidget = client.getWidget(WidgetID.MTA_ALCHEMY_GROUP_ID, index + INFO_START);\n+\t\t\tint points = Integer.parseInt(pointsWidget.getText());\n+\t\t\tif (points == BEST_POINTS)\n+\t\t\t{\n+\t\t\t\treturn item;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn \"\";\n+\t}\n+\n+\tprivate int getClicked()\n+\t{\n+\t\tGameObject nearest = null;\n+\t\tdouble distance = Double.MAX_VALUE;\n+\n+\t\tfor (GameObject object : cupboards)\n+\t\t{\n+\t\t\tif (object == null)\n+\t\t\t{\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tWorldPoint mine = client.getLocalPlayer().getWorldLocation();\n+\t\t\tdouble objectDistance = object.getWorldLocation().distanceTo(mine);\n+\t\t\tif (nearest == null || distance > objectDistance)\n+\t\t\t{\n+\t\t\t\tnearest = object;\n+\t\t\t\tdistance = objectDistance;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn cupboards.indexOf(nearest);\n+\t}\n+\n+\tprivate void fill(int index, String item)\n+\t{\n+\t\tint start = AlchemyItem.indexOf(item);\n+\t\tint distance = 8 - index;\n+\t\tstart = (start + distance) % 8;\n+\t\tfor (int i = 0; i < CAPACITY; i++)\n+\t\t{\n+\t\t\tint itemIndex = (start + i) % 8;\n+\t\t\tlocations[i] = itemIndex > 4 ? AlchemyItem.EMPTY : AlchemyItem.values()[itemIndex];\n+\t\t}\n+\t}\n+\n+\t@Override\n+\tpublic void under(Graphics2D graphics)\n+\t{\n+\t\tif (!getConfig().alchemy() || best == null || !inside())\n+\t\t{\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tfor (int i = 0; i < cupboards.size(); i++)\n+\t\t{\n+\t\t\tGameObject cupboard = cupboards.get(i);\n+\t\t\tif (cupboard == null || i >= CAPACITY)\n+\t\t\t{\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tAlchemyItem location = locations[i];\n+\t\t\tif (location == AlchemyItem.EMPTY)\n+\t\t\t\tcontinue;\n+\n+\t\t\tString text = location.toString();\n+\t\t\tif (text.equals(best))","path":"runelite-client/src/main/java/net/runelite/client/plugins/mta/AlchemyRoom.java","position":307,"original_position":307,"commit_id":"e4f16e305948f89c288c0d75c58e39438e947a94","original_commit_id":"e4f16e305948f89c288c0d75c58e39438e947a94","user":{"login":"psikoi","id":3278148,"node_id":"MDQ6VXNlcjMyNzgxNDg=","avatar_url":"https://avatars0.githubusercontent.com/u/3278148?v=4","gravatar_id":"","url":"https://api.github.com/users/psikoi","html_url":"https://github.com/psikoi","followers_url":"https://api.github.com/users/psikoi/followers","following_url":"https://api.github.com/users/psikoi/following{/other_user}","gists_url":"https://api.github.com/users/psikoi/gists{/gist_id}","starred_url":"https://api.github.com/users/psikoi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psikoi/subscriptions","organizations_url":"https://api.github.com/users/psikoi/orgs","repos_url":"https://api.github.com/users/psikoi/repos","events_url":"https://api.github.com/users/psikoi/events{/privacy}","received_events_url":"https://api.github.com/users/psikoi/received_events","type":"User","site_admin":false},"body":"Add line between variable and if statement","created_at":"2018-06-05T10:43:39Z","updated_at":"2018-06-05T10:51:11Z","html_url":"https://github.com/runelite/runelite/pull/3596#discussion_r193026572","pull_request_url":"https://api.github.com/repos/runelite/runelite/pulls/3596","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/runelite/runelite/pulls/comments/193026572"},"html":{"href":"https://github.com/runelite/runelite/pull/3596#discussion_r193026572"},"pull_request":{"href":"https://api.github.com/repos/runelite/runelite/pulls/3596"}}},"pull_request":{"url":"https://api.github.com/repos/runelite/runelite/pulls/3596","id":192245698,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkyMjQ1Njk4","html_url":"https://github.com/runelite/runelite/pull/3596","diff_url":"https://github.com/runelite/runelite/pull/3596.diff","patch_url":"https://github.com/runelite/runelite/pull/3596.patch","issue_url":"https://api.github.com/repos/runelite/runelite/issues/3596","number":3596,"state":"open","locked":false,"title":"Add MTA Plugin","user":{"login":"Jasper-ketelaar","id":13006588,"node_id":"MDQ6VXNlcjEzMDA2NTg4","avatar_url":"https://avatars2.githubusercontent.com/u/13006588?v=4","gravatar_id":"","url":"https://api.github.com/users/Jasper-ketelaar","html_url":"https://github.com/Jasper-ketelaar","followers_url":"https://api.github.com/users/Jasper-ketelaar/followers","following_url":"https://api.github.com/users/Jasper-ketelaar/following{/other_user}","gists_url":"https://api.github.com/users/Jasper-ketelaar/gists{/gist_id}","starred_url":"https://api.github.com/users/Jasper-ketelaar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jasper-ketelaar/subscriptions","organizations_url":"https://api.github.com/users/Jasper-ketelaar/orgs","repos_url":"https://api.github.com/users/Jasper-ketelaar/repos","events_url":"https://api.github.com/users/Jasper-ketelaar/events{/privacy}","received_events_url":"https://api.github.com/users/Jasper-ketelaar/received_events","type":"User","site_admin":false},"body":"# Description\r\nThis plugin adds overlays to three of the four rooms in Mage Training Arena. It supports Telekinetic Theatre, Alchemists' Playground and Creature Graveyard. The plugin has hint arrows for three of the four rooms to indicate where things are clearly and make it easier to see. These can be turned off for the whole plugin in the configuration.\r\n\r\n## Telekinetic Theatre\r\nThe Telekinetic room overlay shows you on which side of the maze to stand and it shows you when you are able to cast the telekinetic grab spell correctly. The colours of the tiles that it indicates for you to stand on turn green when you are able to cast the spell.\r\n\r\n![telekinetic3](https://user-images.githubusercontent.com/13006588/40925027-f945d7ce-6818-11e8-9a23-3d726ccec89e.gif)\r\n\r\nThe plugin also offers the ability to instead of one tile draw the line of tiles on which you are able to stand to correctly cast the spell.\r\n\r\n![teliklines](https://i.imgur.com/gu04mrg.png)\r\n\r\n## Alchemists' Playground\r\nThe Alchemy room overlay shows you in what cupboard what item is based on the items you have previously gotten. This room operates on rotations and the order of the items in the cupboard is always the same. This allows you to devise an item's location based on other items you have found. The overlay will also highlight items in your inventory that give the most points\r\n\r\n![alchemy3](https://user-images.githubusercontent.com/13006588/40924677-302b7f60-6818-11e8-90bc-35d04438ba54.gif)\r\n\r\nThe plugin also allows you to change from icons to text\r\n\r\n![alchtext](https://i.imgur.com/vGbKL90.png)\r\n\r\n## Creature Graveyard\r\nThe Graveyard room is a lot less complex than the other two. This overlay will add a counter infobox displaying how many fruit your bones will get you and the colour changes depending on whether this is enough for a point. The games bones widget is hidden as it is rendered usesless by this plugin and may interfere with the counter boxes.\r\n\r\n![graveyardcounter](https://i.imgur.com/fTH2Obb.png)\r\n\r\nThis room also has an overlay for your inventory that turns green when the points of the bones in your inventory are enough to get a graveyard point. This overlay is off by default and can be turned on from the config.\r\n\r\n![graveyard2](https://user-images.githubusercontent.com/13006588/40925312-be22db78-6819-11e8-9a15-8d052a89ccb8.gif)\r\n\r\n## Enchanting Chamber\r\n\r\nHas a simple counter for the enchantment room showing how many dragonstones have spawned. This plugin will also hide the widgets of the room since they are not used by anyone who does this room. The room also uses hint arrows to indicate where the dragonstones are.\r\n\r\n![enchantment](https://user-images.githubusercontent.com/13006588/40925466-1240cf6c-681a-11e8-9839-2d679d329db4.gif)\r\n\r\n\r\n## Settings\r\nThe settings allow you to turn off each supported room individually and they allow you to turn off the filling of clickboxes for items in the Graveyard and Alchemy room or turn off the hint arrows for all of the rooms:\r\n\r\n![settings](https://i.imgur.com/Tr6YcuC.png) ![fillon](https://i.imgur.com/1weoybA.png) ![filloff](https://i.imgur.com/1vBCtxS.png)","created_at":"2018-06-03T12:43:42Z","updated_at":"2018-06-05T10:51:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"77ea59912f36632211ba49f822beee3252ea315f","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":771846940,"node_id":"MDU6TGFiZWw3NzE4NDY5NDA=","url":"https://api.github.com/repos/runelite/runelite/labels/feature-request","name":"feature-request","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/runelite/runelite/pulls/3596/commits","review_comments_url":"https://api.github.com/repos/runelite/runelite/pulls/3596/comments","review_comment_url":"https://api.github.com/repos/runelite/runelite/pulls/comments{/number}","comments_url":"https://api.github.com/repos/runelite/runelite/issues/3596/comments","statuses_url":"https://api.github.com/repos/runelite/runelite/statuses/e4f16e305948f89c288c0d75c58e39438e947a94","head":{"label":"Jasper-ketelaar:mta-plugin","ref":"mta-plugin","sha":"e4f16e305948f89c288c0d75c58e39438e947a94","user":{"login":"Jasper-ketelaar","id":13006588,"node_id":"MDQ6VXNlcjEzMDA2NTg4","avatar_url":"https://avatars2.githubusercontent.com/u/13006588?v=4","gravatar_id":"","url":"https://api.github.com/users/Jasper-ketelaar","html_url":"https://github.com/Jasper-ketelaar","followers_url":"https://api.github.com/users/Jasper-ketelaar/followers","following_url":"https://api.github.com/users/Jasper-ketelaar/following{/other_user}","gists_url":"https://api.github.com/users/Jasper-ketelaar/gists{/gist_id}","starred_url":"https://api.github.com/users/Jasper-ketelaar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jasper-ketelaar/subscriptions","organizations_url":"https://api.github.com/users/Jasper-ketelaar/orgs","repos_url":"https://api.github.com/users/Jasper-ketelaar/repos","events_url":"https://api.github.com/users/Jasper-ketelaar/events{/privacy}","received_events_url":"https://api.github.com/users/Jasper-ketelaar/received_events","type":"User","site_admin":false},"repo":{"id":135827995,"node_id":"MDEwOlJlcG9zaXRvcnkxMzU4Mjc5OTU=","name":"runelite","full_name":"Jasper-ketelaar/runelite","owner":{"login":"Jasper-ketelaar","id":13006588,"node_id":"MDQ6VXNlcjEzMDA2NTg4","avatar_url":"https://avatars2.githubusercontent.com/u/13006588?v=4","gravatar_id":"","url":"https://api.github.com/users/Jasper-ketelaar","html_url":"https://github.com/Jasper-ketelaar","followers_url":"https://api.github.com/users/Jasper-ketelaar/followers","following_url":"https://api.github.com/users/Jasper-ketelaar/following{/other_user}","gists_url":"https://api.github.com/users/Jasper-ketelaar/gists{/gist_id}","starred_url":"https://api.github.com/users/Jasper-ketelaar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jasper-ketelaar/subscriptions","organizations_url":"https://api.github.com/users/Jasper-ketelaar/orgs","repos_url":"https://api.github.com/users/Jasper-ketelaar/repos","events_url":"https://api.github.com/users/Jasper-ketelaar/events{/privacy}","received_events_url":"https://api.github.com/users/Jasper-ketelaar/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Jasper-ketelaar/runelite","description":"Open source Old School RuneScape client","fork":true,"url":"https://api.github.com/repos/Jasper-ketelaar/runelite","forks_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/forks","keys_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/teams","hooks_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/hooks","issue_events_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/issues/events{/number}","events_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/events","assignees_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/assignees{/user}","branches_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/branches{/branch}","tags_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/tags","blobs_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/git/refs{/sha}","trees_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/statuses/{sha}","languages_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/languages","stargazers_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/stargazers","contributors_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/contributors","subscribers_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/subscribers","subscription_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/subscription","commits_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/commits{/sha}","git_commits_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/git/commits{/sha}","comments_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/comments{/number}","issue_comment_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/issues/comments{/number}","contents_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/contents/{+path}","compare_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/merges","archive_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/downloads","issues_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/issues{/number}","pulls_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/pulls{/number}","milestones_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/milestones{/number}","notifications_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/labels{/name}","releases_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/releases{/id}","deployments_url":"https://api.github.com/repos/Jasper-ketelaar/runelite/deployments","created_at":"2018-06-02T15:10:52Z","updated_at":"2018-06-02T15:10:57Z","pushed_at":"2018-06-05T02:34:37Z","git_url":"git://github.com/Jasper-ketelaar/runelite.git","ssh_url":"git@github.com:Jasper-ketelaar/runelite.git","clone_url":"https://github.com/Jasper-ketelaar/runelite.git","svn_url":"https://github.com/Jasper-ketelaar/runelite","homepage":"https://runelite.net","size":15821,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause","node_id":"MDc6TGljZW5zZTQ="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"runelite:master","ref":"master","sha":"3c82663ae9719e0814570a534cbc6469a0c1833e","user":{"login":"runelite","id":13814776,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzODE0Nzc2","avatar_url":"https://avatars1.githubusercontent.com/u/13814776?v=4","gravatar_id":"","url":"https://api.github.com/users/runelite","html_url":"https://github.com/runelite","followers_url":"https://api.github.com/users/runelite/followers","following_url":"https://api.github.com/users/runelite/following{/other_user}","gists_url":"https://api.github.com/users/runelite/gists{/gist_id}","starred_url":"https://api.github.com/users/runelite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/runelite/subscriptions","organizations_url":"https://api.github.com/users/runelite/orgs","repos_url":"https://api.github.com/users/runelite/repos","events_url":"https://api.github.com/users/runelite/events{/privacy}","received_events_url":"https://api.github.com/users/runelite/received_events","type":"Organization","site_admin":false},"repo":{"id":57461213,"node_id":"MDEwOlJlcG9zaXRvcnk1NzQ2MTIxMw==","name":"runelite","full_name":"runelite/runelite","owner":{"login":"runelite","id":13814776,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzODE0Nzc2","avatar_url":"https://avatars1.githubusercontent.com/u/13814776?v=4","gravatar_id":"","url":"https://api.github.com/users/runelite","html_url":"https://github.com/runelite","followers_url":"https://api.github.com/users/runelite/followers","following_url":"https://api.github.com/users/runelite/following{/other_user}","gists_url":"https://api.github.com/users/runelite/gists{/gist_id}","starred_url":"https://api.github.com/users/runelite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/runelite/subscriptions","organizations_url":"https://api.github.com/users/runelite/orgs","repos_url":"https://api.github.com/users/runelite/repos","events_url":"https://api.github.com/users/runelite/events{/privacy}","received_events_url":"https://api.github.com/users/runelite/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/runelite/runelite","description":"Open source Old School RuneScape client","fork":false,"url":"https://api.github.com/repos/runelite/runelite","forks_url":"https://api.github.com/repos/runelite/runelite/forks","keys_url":"https://api.github.com/repos/runelite/runelite/keys{/key_id}","collaborators_url":"https://api.github.com/repos/runelite/runelite/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/runelite/runelite/teams","hooks_url":"https://api.github.com/repos/runelite/runelite/hooks","issue_events_url":"https://api.github.com/repos/runelite/runelite/issues/events{/number}","events_url":"https://api.github.com/repos/runelite/runelite/events","assignees_url":"https://api.github.com/repos/runelite/runelite/assignees{/user}","branches_url":"https://api.github.com/repos/runelite/runelite/branches{/branch}","tags_url":"https://api.github.com/repos/runelite/runelite/tags","blobs_url":"https://api.github.com/repos/runelite/runelite/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/runelite/runelite/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/runelite/runelite/git/refs{/sha}","trees_url":"https://api.github.com/repos/runelite/runelite/git/trees{/sha}","statuses_url":"https://api.github.com/repos/runelite/runelite/statuses/{sha}","languages_url":"https://api.github.com/repos/runelite/runelite/languages","stargazers_url":"https://api.github.com/repos/runelite/runelite/stargazers","contributors_url":"https://api.github.com/repos/runelite/runelite/contributors","subscribers_url":"https://api.github.com/repos/runelite/runelite/subscribers","subscription_url":"https://api.github.com/repos/runelite/runelite/subscription","commits_url":"https://api.github.com/repos/runelite/runelite/commits{/sha}","git_commits_url":"https://api.github.com/repos/runelite/runelite/git/commits{/sha}","comments_url":"https://api.github.com/repos/runelite/runelite/comments{/number}","issue_comment_url":"https://api.github.com/repos/runelite/runelite/issues/comments{/number}","contents_url":"https://api.github.com/repos/runelite/runelite/contents/{+path}","compare_url":"https://api.github.com/repos/runelite/runelite/compare/{base}...{head}","merges_url":"https://api.github.com/repos/runelite/runelite/merges","archive_url":"https://api.github.com/repos/runelite/runelite/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/runelite/runelite/downloads","issues_url":"https://api.github.com/repos/runelite/runelite/issues{/number}","pulls_url":"https://api.github.com/repos/runelite/runelite/pulls{/number}","milestones_url":"https://api.github.com/repos/runelite/runelite/milestones{/number}","notifications_url":"https://api.github.com/repos/runelite/runelite/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/runelite/runelite/labels{/name}","releases_url":"https://api.github.com/repos/runelite/runelite/releases{/id}","deployments_url":"https://api.github.com/repos/runelite/runelite/deployments","created_at":"2016-04-30T20:48:02Z","updated_at":"2018-06-05T06:55:02Z","pushed_at":"2018-06-05T10:26:59Z","git_url":"git://github.com/runelite/runelite.git","ssh_url":"git@github.com:runelite/runelite.git","clone_url":"https://github.com/runelite/runelite.git","svn_url":"https://github.com/runelite/runelite","homepage":"https://runelite.net","size":15925,"stargazers_count":944,"watchers_count":944,"language":"Java","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1232,"mirror_url":null,"archived":false,"open_issues_count":1022,"license":{"key":"bsd-2-clause","name":"BSD 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause","node_id":"MDc6TGljZW5zZTQ="},"forks":1232,"open_issues":1022,"watchers":944,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/runelite/runelite/pulls/3596"},"html":{"href":"https://github.com/runelite/runelite/pull/3596"},"issue":{"href":"https://api.github.com/repos/runelite/runelite/issues/3596"},"comments":{"href":"https://api.github.com/repos/runelite/runelite/issues/3596/comments"},"review_comments":{"href":"https://api.github.com/repos/runelite/runelite/pulls/3596/comments"},"review_comment":{"href":"https://api.github.com/repos/runelite/runelite/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/runelite/runelite/pulls/3596/commits"},"statuses":{"href":"https://api.github.com/repos/runelite/runelite/statuses/e4f16e305948f89c288c0d75c58e39438e947a94"}},"author_association":"NONE"}}
{"actor":{"display_login":"psikoi"}}