// Path: src/org/sinrel/engine/Engine.java
// public class Engine {
// 	
// 	private EngineSettings settings;
// 	
// 	private Intent intent;
// 	private Config config;
// 	
// 	private Downloader downloader;
// 	private Checker checker;
// 	private AuthBehavior auth;
// 	private MinecraftStarter starter;
// 	
// 	private boolean debug = false;
// 	
// 	public Engine( EngineSettings settings ) {
// 		try {
// 			intent = new Intent(this);
// 			setSettings(settings);
// 			config = new DefaultConfig(this);
// 			downloader = new DefaultDownloader();
// 			checker = new DefaultChecker();
// 			auth = new DefaultAuthBehavior();
// 			starter = new MinecraftAppletStarter();
// 		}catch( Exception e ) {
// 			FatalError.showErrorWindow(e);
// 		}
// 	}	
// 	
// 	public EngineSettings getSettings() {
// 		return settings;
// 	}
// 	
// 	public Downloader getDownloader() {
// 		return downloader;
// 	}
// 	
// 	public Checker getChecker() {
// 		return checker;
// 	}
// 	
// 	public AuthBehavior getAuth() {
// 		return auth;
// 	}
// 		
// 	public Intent getIntent(){
// 		return intent;
// 	}
// 	
// 	public Config getConfig() {
// 		return config;
// 	}
// 	
// 	public MinecraftStarter getStarter(){
// 		return starter;
// 	}
// 	
// 	public void setSettings(EngineSettings settings){
// 		if( settings == null ) throw new NullPointerException();
// 		this.settings = settings;
// 	}
// 	
// 	public void setDownloader(Downloader downloader) {
// 		if( downloader == null ) throw new NullPointerException();
// 		this.downloader = downloader;
// 	}
// 	
// 	public void setChecker( Checker checker ) {
// 		if( checker == null ) throw new NullPointerException();
// 		this.checker = checker;
// 	}
// 	
// 	public void setAuth(AuthBehavior auth) {
// 		if( auth == null ) throw new NullPointerException();
// 		this.auth = auth;
// 	}
// 			
// 	public void setConfig( Config config ) {
// 		if( config == null ) throw new NullPointerException();
// 		this.config = config;
// 	}
// 	
// 	public void setMinecraftStarter( MinecraftStarter starter ){
// 		if( starter == null ) throw new NullPointerException();
// 		this.starter = starter;
// 	}
// 	
// 	public void useDebug( boolean debug ) {
// 		this.debug = debug;
// 	}
// 	
// 	public boolean isDebug(){
// 		return debug;
// 	}
// 	
// }
// 
// Path: src/org/sinrel/engine/listeners/DownloadListener.java
// public interface DownloadListener {
// 	
// 	/**
// 	 * При старте загрузки
// 	 */
// 	public void onStartDownload( DownloadEvent e );
// 	
// 	/**
// 	 * Вызывается при смене загружаемого файла
// 	 * @param e - {@link DownloadEvent}
// 	 */
// 	public void onFileChange( DownloadEvent e );
// 	
// 	/**
// 	 * При подсчёте загруженного
// 	 */
// 	public void onPercentChange( DownloadEvent e );
// 		
// }


import java.util.ArrayList;
import org.sinrel.engine.Engine;
import org.sinrel.engine.listeners.DownloadListener;
		additionalFiles.add( filename );
	}
	
	public void removeAdditionalFile( String filename ) {
		additionalFiles.remove( filename );
	}
	
	public void addAdditionalArchive( String filename ) {
		additionalArchives.add( filename );
	}
	
	public void removeAdditionalArchive( String filename ) {
		additionalArchives.remove( filename );
	}
	
	protected void onStartDownload( DownloadEvent e ){
		for( DownloadListener dl : listeners )
			dl.onStartDownload(e);
	}
	
	protected void onFileChange( DownloadEvent e ){
		for( DownloadListener dl : listeners )
			dl.onFileChange(e);
	}
	
	protected void onPercentChange( DownloadEvent e ){
		for( DownloadListener dl : listeners )
			dl.onPercentChange(e);
	}
	
// Path: src/org/sinrel/engine/Engine.java
// public class Engine {
// 	
// 	private EngineSettings settings;
// 	
// 	private Intent intent;
// 	private Config config;
// 	
// 	private Downloader downloader;
// 	private Checker checker;
// 	private AuthBehavior auth;
// 	private MinecraftStarter starter;
// 	
// 	private boolean debug = false;
// 	
// 	public Engine( EngineSettings settings ) {
// 		try {
// 			intent = new Intent(this);
// 			setSettings(settings);
// 			config = new DefaultConfig(this);
// 			downloader = new DefaultDownloader();
// 			checker = new DefaultChecker();
// 			auth = new DefaultAuthBehavior();
// 			starter = new MinecraftAppletStarter();
// 		}catch( Exception e ) {
// 			FatalError.showErrorWindow(e);
// 		}
// 	}	
// 	
// 	public EngineSettings getSettings() {
// 		return settings;
// 	}
// 	
// 	public Downloader getDownloader() {
// 		return downloader;
// 	}
// 	
// 	public Checker getChecker() {
// 		return checker;
// 	}
// 	
// 	public AuthBehavior getAuth() {
// 		return auth;
// 	}
// 		
// 	public Intent getIntent(){
// 		return intent;
// 	}
// 	
// 	public Config getConfig() {
// 		return config;
// 	}
// 	
// 	public MinecraftStarter getStarter(){
// 		return starter;
// 	}
// 	
// 	public void setSettings(EngineSettings settings){
// 		if( settings == null ) throw new NullPointerException();
// 		this.settings = settings;
// 	}
// 	
// 	public void setDownloader(Downloader downloader) {
// 		if( downloader == null ) throw new NullPointerException();
// 		this.downloader = downloader;
// 	}
// 	
// 	public void setChecker( Checker checker ) {
// 		if( checker == null ) throw new NullPointerException();
// 		this.checker = checker;
// 	}
// 	
// 	public void setAuth(AuthBehavior auth) {
// 		if( auth == null ) throw new NullPointerException();
// 		this.auth = auth;
// 	}
// 			
// 	public void setConfig( Config config ) {
// 		if( config == null ) throw new NullPointerException();
// 		this.config = config;
// 	}
// 	
// 	public void setMinecraftStarter( MinecraftStarter starter ){
// 		if( starter == null ) throw new NullPointerException();
// 		this.starter = starter;
// 	}
// 	
// 	public void useDebug( boolean debug ) {
// 		this.debug = debug;
// 	}
// 	
// 	public boolean isDebug(){
// 		return debug;
// 	}
// 	
// }
// 
// Path: src/org/sinrel/engine/listeners/DownloadListener.java
// public interface DownloadListener {
// 	
// 	/**
// 	 * При старте загрузки
// 	 */
// 	public void onStartDownload( DownloadEvent e );
// 	
// 	/**
// 	 * Вызывается при смене загружаемого файла
// 	 * @param e - {@link DownloadEvent}
// 	 */
// 	public void onFileChange( DownloadEvent e );
// 	
// 	/**
// 	 * При подсчёте загруженного
// 	 */
// 	public void onPercentChange( DownloadEvent e );
// 		
// }


// Path: src/org/sinrel/engine/actions/Downloader.java
import java.util.ArrayList;
import org.sinrel.engine.Engine;
import org.sinrel.engine.listeners.DownloadListener;

		additionalFiles.add( filename );
	}
	
	public void removeAdditionalFile( String filename ) {
		additionalFiles.remove( filename );
	}
	
	public void addAdditionalArchive( String filename ) {
		additionalArchives.add( filename );
	}
	
	public void removeAdditionalArchive( String filename ) {
		additionalArchives.remove( filename );
	}
	
	protected void onStartDownload( DownloadEvent e ){
		for( DownloadListener dl : listeners )
			dl.onStartDownload(e);
	}
	
	protected void onFileChange( DownloadEvent e ){
		for( DownloadListener dl : listeners )
			dl.onFileChange(e);
	}
	
	protected void onPercentChange( DownloadEvent e ){
		for( DownloadListener dl : listeners )
			dl.onPercentChange(e);
	}
	
	public abstract DownloadResult downloadClient( Engine e , String clientName );