@Override
	public void paint(Graphics g1) {
		Graphics2D g = (Graphics2D) g1;
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
		if (Universal.testing)
			return;
		if (data == null) {
			if (Script.holdExecution()) {
				return;
			}
			data = new SkillData();
		}
		Queue<SkillGain> order = new PriorityQueue<SkillGain>();

		for (int i : skillIds) {
			order.add(new SkillGain(i, data.experience(i)));
		}

		long time = Script.getElapsed();
		long mult = 60 * 60;
		int loc = -1;
		Point start = new Point(SPACING, SPACING);

		while (!order.isEmpty()) {
			SkillGain cur = order.poll();
			int gained = cur.getGained();
			int skill = cur.getSkill();
			if (gained == 0)
				break;
			if (++loc >= numSkills)
				break;
			int xp = Skills.getExperience(skill);
			int level = Skills.getLevelAt(xp);
			int xpnl = Skills.getExperienceRequired(level + 1);
			int xpcl = Skills.getExperienceRequired(level);
			long tleft = (xpnl - xp) * time / gained;
			
			int maxWidth = MainPaint.MAIN_WIDTH - SPACING * 2;
			int pleft = (Skills.getExperience(skill) - xpcl) * maxWidth / (xpnl - xpcl);

			g.setColor(MainPaint.BACKGROUND);
			g.fillRoundRect(start.x, start.y, maxWidth, BAR_HEIGHT, 2, 2);

			g.setColor(progressBar);
			g.fillRoundRect(start.x, start.y, pleft, BAR_HEIGHT, 2, 2);

			g.setColor(MainPaint.TEXT_COLOR);
			g.setFont(FONT);

			String str = String.format("%s %3d (+%2d): %4dK (%3dK) %s", SKILL_ABBREVS[skill], level,
					data.level(skill), gained / 1000, gained * mult / time, (tleft / mult / 1000 < 10 ? " ("
							+ Time.format(tleft) + ")" : ""));

			TextUtil.drawTextFromPoint(g, new Point(start.x + 4, start.y), str, Anchor.TOP_LEFT);

			start.y += BAR_HEIGHT + SPACING;
		}
	}