public Updater(Plugin plugin, int id, File file, UpdateType type, boolean announce) {
		this.plugin = plugin;
		this.type = type;
		this.announce = announce;
		this.file = file;
		this.id = id;
		this.updateFolder = plugin.getServer().getUpdateFolder();

		final File pluginFile = plugin.getDataFolder().getParentFile();
		final File updaterFile = new File(pluginFile, "Updater");
		final File updaterConfigFile = new File(updaterFile, "config.yml");

		if (!updaterFile.exists()) {
			updaterFile.mkdir();
		}
		if (!updaterConfigFile.exists()) {
			try {
				updaterConfigFile.createNewFile();
			} catch (final IOException e) {
				plugin.getLogger().severe("The updater could not create a configuration in " + updaterFile.getAbsolutePath());
				e.printStackTrace();
			}
		}
		this.config = YamlConfiguration.loadConfiguration(updaterConfigFile);

		this.config.options().header("This configuration file affects all plugins using the Updater system (version 2+ - http://forums.bukkit" +
				".org/threads/96681/ )" + '\n'
				+ "If you wish to use your API key, read http://wiki.bukkit.org/ServerMods_API and place it below." + '\n'
				+ "Some updating systems will not adhere to the disabled value, but these may be turned off in their plugin's configuration.");
		this.config.addDefault("api-key", ChatManager.channelConfig.getCurseApiKey());
		this.config.addDefault("disable", false);

		if (this.config.get("api-key", null) == null) {
			this.config.options().copyDefaults(true);
			try {
				this.config.save(updaterConfigFile);
			} catch (final IOException e) {
				plugin.getLogger().severe("The updater could not save the configuration in " + updaterFile.getAbsolutePath());
				e.printStackTrace();
			}
		}

		if (this.config.getBoolean("disable")) {
			this.result = UpdateResult.DISABLED;
			return;
		}

		String key = this.config.getString("api-key");
		if (key.equalsIgnoreCase(ChatManager.channelConfig.getCurseApiKey()) || key.equals("")) {
			key = null;
		}

		this.apiKey = key;

		try {
			this.url = new URL(Updater.HOST + Updater.QUERY + id);
		} catch (final MalformedURLException e) {
			plugin.getLogger().severe("The project ID provided for updating, " + id + " is invalid.");
			this.result = UpdateResult.FAIL_BADID;
			e.printStackTrace();
		}

		this.thread = new Thread(new UpdateRunnable());
		this.thread.start();
	}