public void run() {
		
		int maxTime = 60000;
		willpower = model.getStat("willpower").getValue();
		strenght = model.getStat("strenght").getValue();
		critical = model.getStat("critrate").getValue();
		alacrity = model.getStat("alacrity").getValue();
		power = model.getStat("power").getValue();
		forcepower = model.getStat("forcepower").getValue();
		surge = model.getStat("surge").getValue();
		this.accuracyRating = model.getStat("accuracy").getValue();
		List<Ability> abilityList = model.getSelectedAbilities();
		CombatLog log;

		log = CombatLog.getInstance();
		log.init();
		this.time = 0;
		this.gcd = 0;
		calculatePercent();
		this.dmgDone = 0;
		player = new Entity("Player");
		enemy = new Entity("Enemy");
		enemy.init(50000, 9000);
		player.init(0,0);
		for (Ability currentAbilty : abilityList) {
			currentAbilty.init();
		}
		while (time < maxTime) {
			if (this.gcd > 0)
				this.gcd--;
			else {
				for (Ability currentAbilty : abilityList) {
					if (currentAbilty.cast(player.getClassMechanics().getRessource(), time) == CastResult.SUCCESS) {
						player.getClassMechanics().spendRessource(currentAbilty.getCost());
						player.getClassMechanics().onAbilityUse();
						currentAbilty.doNext();
						this.setGcd(1499);
						break;
					}
				}
			}
			// Alteration management
			player.refreshAlterations(this.time);
			enemy.refreshAlterations(this.time);
			// Resource management
			player.getClassMechanics().regen();
			time++;

		}
		log.close();
		float dps = Math.round((double) this.dmgDone / ((double) maxTime / 1000.));
		System.out.println("DPS: " + dps);
	}