private boolean read() {
		try {
			final URLConnection conn = this.url.openConnection();
			conn.setConnectTimeout(5000);

			if (this.apiKey != null) {
				conn.addRequestProperty("X-API-Key", this.apiKey);
			}
			conn.addRequestProperty("User-Agent", Updater.USER_AGENT);

			conn.setDoOutput(true);

			final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			final String response = reader.readLine();

			final JSONArray array = (JSONArray) JSONValue.parse(response);

			if (array.size() == 0) {
				this.plugin.getLogger().warning("The updater could not find any files for the project id " + this.id);
				this.result = UpdateResult.FAIL_BADID;
				return false;
			}

			this.versionName = (String) ((JSONObject) array.get(array.size() - 1)).get(Updater.TITLE_VALUE);
			this.versionLink = (String) ((JSONObject) array.get(array.size() - 1)).get(Updater.LINK_VALUE);
			this.versionType = (String) ((JSONObject) array.get(array.size() - 1)).get(Updater.TYPE_VALUE);
			this.versionGameVersion = (String) ((JSONObject) array.get(array.size() - 1)).get(Updater.VERSION_VALUE);

			return true;
		} catch (final IOException e) {
			if (e.getMessage().contains("HTTP response code: 403")) {
				this.plugin.getLogger().severe(
						"dev.bukkit.org rejected the API key provided in plugins/Updater/config.yml");
				this.plugin.getLogger().severe("Please double-check your configuration to ensure it is correct.");
				this.result = UpdateResult.FAIL_APIKEY;
			} else {
				this.plugin.getLogger().severe("The updater could not contact dev.bukkit.org for updating.");
				this.plugin
						.getLogger()
						.severe("If you have not recently modified your configuration and this is the first time you are seeing this message, the site may be experiencing temporary downtime.");
				this.result = UpdateResult.FAIL_DBO;
			}
			this.plugin.getLogger().log(Level.SEVERE, null, e);
			return false;
		}
	}