public void renderShadowedString(String text, float x, float y, float factor) {
        boolean flag = false;
        if (factor <= 0.0F) {
            flag = true;
        }
        forceUseGL = true;
        glDisable(GL_TEXTURE_2D);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glEnable(GL_TEXTURE_2D);
        glColor4f(0.0F, 0.0F, 0.0F, 0.45F);
        if (flag) {
            drawString(text, (x + 6.59F), (y + CHAR_WIDTH) + 6.59F, CHAR_WIDTH, CHAR_WIDTH, ((CHAR_WIDTH / 2) * (-1)));
        } else {
            drawString(text, (x * factor), (y + CHAR_WIDTH) * factor, CHAR_WIDTH, CHAR_WIDTH, ((CHAR_WIDTH / 2) * (-1)));
        }
        if (currentColor != null) {
            glColor4f(currentColor.getRed(), currentColor.getGreen(), currentColor.getBlue(), currentColor.getAlpha());
        }
        drawString(text, x, y + CHAR_WIDTH, CHAR_WIDTH, CHAR_WIDTH, ((CHAR_WIDTH / 2) * (-1)));
        forceUseGL = false;

        if (isSublined) {
            if (currentColor != null) {
                renderEngine.bindColor(currentColor);
            } else {
                renderEngine.bindColor(new ColorHelper(0, 0, 0, 255));
            }
            renderEngine.renderQuad(x, y + CHAR_WIDTH + 5, getStringWidth(text) + 10, 5);
            renderEngine.bindColor(new ColorHelper(0, 0, 0, 100));
            if (flag) {
                renderEngine.renderQuad(x + 6.59F, y + CHAR_WIDTH + 6.59F, getStringWidth(text) + 10, 5);
            } else {
                renderEngine.renderQuad(x * factor, (y + CHAR_WIDTH) * factor, getStringWidth(text) + 10, 5);
            }
        }
    }