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;
	        }
	    }