@Override
  public void mouseClick(GuiBase gui, int x, int y, int button) {
    if (!isActive()) {
      return;
    }

    for (int i = 0; i < list.size(); i++) {
      if (list.get(i) != null) {
        int[] rect = getItemButtonRect(i);

        if ((rect[3] > 0) && (inRect(gui, x, y, rect))) {
          if (selectedIndex == i) {
            selectedIndex = -1;
          } else {
            selectedIndex = i;
          }
          onClick(i);
          break;
        }
      }
    }
    int[] pos = {getScrollBar()[0], getScrollBar()[1], getScrollBar()[2], getScrollBar()[3]};
    if ((list.size() >= maxItemDisplayed) && (inRect(gui, x, y, pos))) {
      y -= gui.getTop();
      doScroll(y);
      isScrolling = true;
    }
  }
  @Override
  public void mouseMoveClick(GuiBase gui, int x, int y, int button, long timeSinceClicked) {
    if (!isActive()) {
      return;
    }
    y -= gui.getTop();

    if (isScrolling) {
      if (button == -1) {
        this.isScrolling = false;
      } else {
        doScroll(y);
      }
    }
  }
  @Override
  public void drawForeground(GuiBase gui, int x, int y) {
    if (!isActive()) {
      return;
    }

    for (int i = 0; i < list.size(); i++) {
      int[] rect = getItemButtonRect(i);

      int x1 = rect[0] + 3;
      int textY = (int) Math.ceil(itemHeight / 2F - 4F);
      int y1 = rect[1] + (textY < 0 ? 0 : textY);
      if (rect[4] < 0) {
        y1 += rect[4];
      }

      int maxScroll = getScrollBar()[3] - (int) getScrollBarSize().y;
      if ((rect[4] >= -textY) && (rect[4] <= maxScroll)) {
        gui.getFontRenderer()
            .drawString(list.get(i) == null ? "" : list.get(i), x1, y1, textColor.toRGB());
      }
    }
  }