public void paint(Graphics g2)
  {
    if (this.applet != null) {
      return;
    }

    int w = getWidth() / 2;
    int h = getHeight() / 2;
    if ((this.img == null) || (this.img.getWidth() != w) || (this.img.getHeight() != h)) {
      this.img = createVolatileImage(w, h);
    }

    Graphics g = this.img.getGraphics();
    for (int x = 0; x <= w / 32; x++) {
      for (int y = 0; y <= h / 32; y++) {
        g.drawImage(this.bgImage, x * 32, y * 32, null);
      }
    }
    g.setColor(Color.LIGHT_GRAY);

    String msg = "Updating Minecraft";
    if (this.gameUpdater.fatalError) {
      msg = "Failed to launch";
    }

    g.setFont(new Font(null, 1, 20));
    FontMetrics fm = g.getFontMetrics();
    g.drawString(msg, w / 2 - fm.stringWidth(msg) / 2, h / 2 - fm.getHeight() * 2);

    g.setFont(new Font(null, 0, 12));
    fm = g.getFontMetrics();
    msg = this.gameUpdater.getDescriptionForState();
    if (this.gameUpdater.fatalError) {
      msg = this.gameUpdater.fatalErrorDescription;
    }

    g.drawString(msg, w / 2 - fm.stringWidth(msg) / 2, h / 2 + fm.getHeight() * 1);
    msg = this.gameUpdater.subtaskMessage;
    g.drawString(msg, w / 2 - fm.stringWidth(msg) / 2, h / 2 + fm.getHeight() * 2);

    if (!this.gameUpdater.fatalError) {
      g.setColor(Color.black);
      g.fillRect(64, h - 64, w - 128 + 1, 5);
      g.setColor(new Color(32768));
      g.fillRect(64, h - 64, this.gameUpdater.percentage * (w - 128) / 100, 4);
      g.setColor(new Color(2138144));
      g.fillRect(65, h - 64 + 1, this.gameUpdater.percentage * (w - 128) / 100 - 2, 1);
    }

    g.dispose();

    g2.drawImage(this.img, 0, 0, w * 2, h * 2, null);
  }