Example usage for org.lwjgl.opengl GL11 glLineWidth

List of usage examples for org.lwjgl.opengl GL11 glLineWidth

Introduction

In this page you can find the example usage for org.lwjgl.opengl GL11 glLineWidth.

Prototype

public static void glLineWidth(@NativeType("GLfloat") float width) 

Source Link

Document

Sets the width of rasterized line segments.

Usage

From source file:me.lixko.lixkopack.util.RenderUtils.java

License:Open Source License

public static void emptyBlockESPBox(BlockPos blockPos) {
    double x = blockPos.getX() - Minecraft.getMinecraft().getRenderManager().renderPosX;
    double y = blockPos.getY() - Minecraft.getMinecraft().getRenderManager().renderPosY;
    double z = blockPos.getZ() - Minecraft.getMinecraft().getRenderManager().renderPosZ;
    GL11.glBlendFunc(770, 771);/*from  w  w  w  .ja  va  2  s .  co  m*/
    GL11.glEnable(GL_BLEND);
    GL11.glLineWidth(2.0F);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    GL11.glDisable(GL_DEPTH_TEST);
    GL11.glDepthMask(false);
    GL11.glColor4d(0, 0, 0, 0.5F);
    RenderGlobal.drawOutlinedBoundingBox(new AxisAlignedBB(x, y, z, x + 1.0, y + 1.0, z + 1.0), -1);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL_DEPTH_TEST);
    GL11.glDepthMask(true);
    GL11.glDisable(GL_BLEND);
}

From source file:me.lixko.lixkopack.util.RenderUtils.java

License:Open Source License

public static void entityESPBox(Entity entity, int mode) {
    GL11.glBlendFunc(770, 771);/* w  ww . j  a v  a 2  s.c om*/
    GL11.glEnable(GL_BLEND);
    GL11.glLineWidth(2.0F);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    GL11.glDisable(GL_DEPTH_TEST);
    GL11.glDepthMask(false);
    if (mode == 0)// Enemy
        GL11.glColor4d(1 - Minecraft.getMinecraft().thePlayer.getDistanceToEntity(entity) / 40,
                Minecraft.getMinecraft().thePlayer.getDistanceToEntity(entity) / 40, 0, 0.5F);
    else if (mode == 1)// Friend
        GL11.glColor4d(0, 0, 1, 0.5F);
    else if (mode == 2)// Other
        GL11.glColor4d(1, 1, 0, 0.5F);
    else if (mode == 3)// Target
        GL11.glColor4d(1, 0, 0, 0.5F);
    else if (mode == 4)// Team
        GL11.glColor4d(0, 1, 0, 0.5F);
    Minecraft.getMinecraft().getRenderManager();
    RenderGlobal.drawOutlinedBoundingBox(new AxisAlignedBB(
            entity.boundingBox.minX - 0.05 - entity.posX
                    + (entity.posX - Minecraft.getMinecraft().getRenderManager().renderPosX),
            entity.boundingBox.minY - entity.posY
                    + (entity.posY - Minecraft.getMinecraft().getRenderManager().renderPosY),
            entity.boundingBox.minZ - 0.05 - entity.posZ
                    + (entity.posZ - Minecraft.getMinecraft().getRenderManager().renderPosZ),
            entity.boundingBox.maxX + 0.05 - entity.posX
                    + (entity.posX - Minecraft.getMinecraft().getRenderManager().renderPosX),
            entity.boundingBox.maxY + 0.1 - entity.posY
                    + (entity.posY - Minecraft.getMinecraft().getRenderManager().renderPosY),
            entity.boundingBox.maxZ + 0.05 - entity.posZ
                    + (entity.posZ - Minecraft.getMinecraft().getRenderManager().renderPosZ)),
            -1);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL_DEPTH_TEST);
    GL11.glDepthMask(true);
    GL11.glDisable(GL_BLEND);
}

From source file:me.lixko.lixkopack.util.RenderUtils.java

License:Open Source License

public static void nukerBox(BlockPos blockPos, float damage) {
    double x = blockPos.getX() - Minecraft.getMinecraft().getRenderManager().renderPosX;
    double y = blockPos.getY() - Minecraft.getMinecraft().getRenderManager().renderPosY;
    double z = blockPos.getZ() - Minecraft.getMinecraft().getRenderManager().renderPosZ;
    GL11.glBlendFunc(770, 771);/*from  ww  w .  j a va2s  .c o  m*/
    GL11.glEnable(GL_BLEND);
    GL11.glLineWidth(1.0F);
    GL11.glColor4d(damage, 1 - damage, 0, 0.15F);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    GL11.glDisable(GL_DEPTH_TEST);
    GL11.glDepthMask(false);
    drawColorBox(new AxisAlignedBB(x + 0.5 - damage / 2, y + 0.5 - damage / 2, z + 0.5 - damage / 2,
            x + 0.5 + damage / 2, y + 0.5 + damage / 2, z + 0.5 + damage / 2));
    GL11.glColor4d(0, 0, 0, 0.5F);
    RenderGlobal.drawOutlinedBoundingBox(new AxisAlignedBB(x + 0.5 - damage / 2, y + 0.5 - damage / 2,
            z + 0.5 - damage / 2, x + 0.5 + damage / 2, y + 0.5 + damage / 2, z + 0.5 + damage / 2), -1);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL_DEPTH_TEST);
    GL11.glDepthMask(true);
    GL11.glDisable(GL_BLEND);
}

From source file:me.lixko.lixkopack.util.RenderUtils.java

License:Open Source License

public static void searchBox(BlockPos blockPos) {
    double x = blockPos.getX() - Minecraft.getMinecraft().getRenderManager().renderPosX;
    double y = blockPos.getY() - Minecraft.getMinecraft().getRenderManager().renderPosY;
    double z = blockPos.getZ() - Minecraft.getMinecraft().getRenderManager().renderPosZ;
    GL11.glBlendFunc(770, 771);/*from w  w  w  . ja v  a2s.  c  o m*/
    GL11.glEnable(GL_BLEND);
    GL11.glLineWidth(1.0F);
    float sinus = 1F - MathHelper
            .abs(MathHelper.sin(Minecraft.getSystemTime() % 10000L / 10000.0F * (float) Math.PI * 4.0F) * 1F);
    GL11.glColor4d(1 - sinus, sinus, 0, 0.15);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    GL11.glDisable(GL_DEPTH_TEST);
    GL11.glDepthMask(false);
    drawColorBox(new AxisAlignedBB(x, y, z, x + 1.0, y + 1.0, z + 1.0));
    GL11.glColor4d(0, 0, 0, 0.5);
    RenderGlobal.drawOutlinedBoundingBox(new AxisAlignedBB(x, y, z, x + 1.0, y + 1.0, z + 1.0), -1);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL_DEPTH_TEST);
    GL11.glDepthMask(true);
    GL11.glDisable(GL_BLEND);
}

From source file:minebot.ui.AimBow.java

public static void drawArrowArc(EntityPlayer player, Arrow arrow, ReadableColor airColor,
        ReadableColor liquidColor, float partialTicks) {
    GlStateManager.enableBlend();//from   ww w  .ja  v  a  2  s. co  m
    GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
    GL11.glLineWidth(0.5F);
    GlStateManager.disableTexture2D();
    GlStateManager.depthMask(false);
    GlStateManager.color(airColor.getRed(), airColor.getGreen(), airColor.getBlue());
    double previousDist = 0;
    double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks;
    double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks;
    double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks;
    double previousX = d0 + previousDist
            - (double) (Math.cos(Helper.degreesToRadians(player.rotationYaw)) * 0.16F);
    double previousY = arrow.getVerticalPositionAtHorizontalPosition(previousDist) + d1
            + (double) player.getEyeHeight() - 0.10000000149011612D;
    ;
    double previousZ = d2 + previousDist
            - (double) (Math.sin(Helper.degreesToRadians(player.rotationYaw)) * 0.16F);
    for (double dist = Constants.BowConstants.renderTrajectoryIncrement; dist < Constants.BowConstants.renderTrajectoryCutoff; dist += Constants.BowConstants.renderTrajectoryIncrement) {
        BlockPos blockPos = new BlockPos(previousX, previousY, previousZ);
        IBlockState blockState = Minecraft.theMinecraft.theWorld.getBlockState(blockPos);
        Block block = blockState.getBlock();
        if (Constants.BlockConstants.materialsPassable.contains(block.getMaterial())) {
            if (Constants.BlockConstants.materialsLiquid.contains(block.getMaterial()) && arrow.isInAir) {
                arrow.setIsInAir(false);
                GlStateManager.color(liquidColor.getRed(), liquidColor.getGreen(), liquidColor.getBlue());
            } else if (!arrow.isInAir) {
                arrow.setIsInAir(true);
                GlStateManager.color(airColor.getRed(), airColor.getGreen(), airColor.getBlue());
            }
            double currentX = (-Math.sin(Helper.degreesToRadians(player.rotationYaw)) * dist) + d0
                    - (double) (Math.cos((float) Helper.degreesToRadians(player.rotationYaw)) * 0.16F);
            double currentY = arrow.getVerticalPositionAtHorizontalPosition(dist) + d1
                    + (double) player.getEyeHeight() - 0.10000000149011612D;
            double currentZ = (Math.cos(Helper.degreesToRadians(player.rotationYaw)) * dist) + d2
                    - (double) (Math.sin((float) Helper.degreesToRadians(player.rotationYaw)) * 0.16F);
            drawLine(player, previousX, previousY, previousZ, currentX, currentY, currentZ, partialTicks);
            previousX = currentX;
            previousY = currentY;
            previousZ = currentZ;
        } else {
            drawSelectionBox(player, blockPos, partialTicks, (arrow.isInAir ? airColor : liquidColor));
            AimBow.lastBlock = blockPos;
            break;
        }
    }
    GlStateManager.depthMask(true);
    GlStateManager.enableTexture2D();
    GlStateManager.disableBlend();
}

From source file:minebot.ui.AimBow.java

public static void drawSelectionBox(EntityPlayer player, BlockPos blockpos, float partialTicks,
        ReadableColor color) {//from  w w w  .j av a  2s  .c om
    GlStateManager.enableBlend();
    GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
    GlStateManager.color(color.getRed(), color.getGreen(), color.getBlue(), 0.4F);
    GL11.glLineWidth(5.0F);
    GlStateManager.disableTexture2D();
    GlStateManager.depthMask(false);
    float f = 0.002F;
    //BlockPos blockpos = movingObjectPositionIn.getBlockPos();
    Block block = Minecraft.theMinecraft.theWorld.getBlockState(blockpos).getBlock();
    if (block.equals(Blocks.air)) {
        block = Blocks.dirt;
    }
    block.setBlockBoundsBasedOnState(Minecraft.theMinecraft.theWorld, blockpos);
    double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks;
    double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks;
    double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks;
    AxisAlignedBB toDraw = block.getSelectedBoundingBox(Minecraft.theMinecraft.theWorld, blockpos)
            .expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D)
            .offset(-d0, -d1, -d2);
    Tessellator tessellator = Tessellator.getInstance();
    WorldRenderer worldrenderer = tessellator.getWorldRenderer();
    worldrenderer.begin(3, DefaultVertexFormats.POSITION);
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex();
    tessellator.draw();
    worldrenderer.begin(3, DefaultVertexFormats.POSITION);
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex();
    tessellator.draw();
    worldrenderer.begin(1, DefaultVertexFormats.POSITION);
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex();
    tessellator.draw();
    GlStateManager.depthMask(true);
    GlStateManager.enableTexture2D();
    GlStateManager.disableBlend();
}

From source file:minebot.ui.PathRenderer.java

public static void drawBowStuff(EntityPlayer player, float partialTicks, float strength) {
    GlStateManager.enableBlend();// w ww  .j a  v  a 2 s.c om
    GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
    FakeArrow ar1 = new FakeArrow(Minecraft.theMinecraft.theWorld, Minecraft.theMinecraft.thePlayer, strength,
            partialTicks);
    for (int i = 0; i < 200; i++) {
        ar1.onUpdate();
    }
    Color color = ar1.didIHitAnEntity ? Color.RED : Color.BLACK;
    GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1],
            color.getColorComponents(null)[2], 0.4F);
    GL11.glLineWidth(3.0F);
    GlStateManager.disableTexture2D();
    GlStateManager.depthMask(false);
    FakeArrow ar = new FakeArrow(Minecraft.theMinecraft.theWorld, Minecraft.theMinecraft.thePlayer, strength,
            partialTicks);
    double prevX = ar.posX;
    double prevY = ar.posY;
    double prevZ = ar.posZ;
    for (int i = 0; i < 200; i++) {
        ar.onUpdate();
        double currX = ar.posX;
        double currY = ar.posY;
        double currZ = ar.posZ;
        drawLine(Minecraft.theMinecraft.thePlayer, prevX - 0.5, prevY - 0.5, prevZ - 0.5, currX - 0.5,
                currY - 0.5, currZ - 0.5, partialTicks);
        prevX = currX;
        prevY = currY;
        prevZ = currZ;
    }
    GlStateManager.depthMask(true);
    GlStateManager.enableTexture2D();
    GlStateManager.disableBlend();
}

From source file:minebot.ui.PathRenderer.java

public static void drawPath(Path path, EntityPlayer player, float partialTicks, Color color) {
    /*for (BlockPos pos : path.path) {
     drawSelectionBox(player, pos, partialTicks, color);
     }*//*from www .  j  a v a  2 s . co  m*/
    GlStateManager.enableBlend();
    GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
    GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1],
            color.getColorComponents(null)[2], 0.4F);
    GL11.glLineWidth(3.0F);
    GlStateManager.disableTexture2D();
    GlStateManager.depthMask(false);
    boolean[] cornerFirstHalf = new boolean[path.path.size()];
    boolean[] cornerSecondHalf = new boolean[path.path.size()];
    for (int i = 0; i < path.path.size() - 2; i++) {
        BlockPos a = path.path.get(i);
        BlockPos b = path.path.get(i + 1);
        BlockPos c = path.path.get(i + 2);
        if (a.getY() != b.getY() || b.getY() != c.getY()) {
            continue;
        }
        if (b.getX() - a.getX() == c.getX() - b.getX() && b.getZ() - a.getZ() == c.getZ() - b.getZ()) {
            continue;
        }
        if (a.getX() != b.getX() && a.getZ() != b.getZ()) {
            continue;
        }
        if (b.getX() != c.getX() && b.getZ() != c.getZ()) {
            continue;
        }
        BlockPos corner = new BlockPos(c.getX() - b.getX() + a.getX(), a.getY(),
                c.getZ() - b.getZ() + a.getZ());
        if (Action.avoidWalkingInto(corner) || Action.avoidWalkingInto(corner.up())) {
            continue;
        }
        cornerFirstHalf[i] = true;
        cornerSecondHalf[i + 1] = true;
        double bp1x = (a.getX() + b.getX()) * 0.5D;
        double bp1z = (a.getZ() + b.getZ()) * 0.5D;
        double bp2x = (c.getX() + b.getX()) * 0.5D;
        double bp2z = (c.getZ() + b.getZ()) * 0.5D;
        drawLine(player, bp1x, a.getY(), bp1z, bp2x, a.getY(), bp2z, partialTicks);
    }
    for (int i = 0; i < path.path.size() - 1; i++) {
        BlockPos a = path.path.get(i);
        BlockPos b = path.path.get(i + 1);
        if (cornerFirstHalf[i] && !cornerSecondHalf[i]) {
            drawLine(player, a.getX(), a.getY(), a.getZ(), (b.getX() + a.getX()) * 0.5D, b.getY(),
                    (b.getZ() + a.getZ()) * 0.5D, partialTicks);
        }
        if (cornerSecondHalf[i] && !cornerFirstHalf[i]) {
            drawLine(player, (a.getX() + b.getX()) * 0.5D, a.getY(), (a.getZ() + b.getZ()) * 0.5D, b.getX(),
                    b.getY(), b.getZ(), partialTicks);
        }
        if (!cornerFirstHalf[i] && !cornerSecondHalf[i]) {
            drawLine(player, a.getX(), a.getY(), a.getZ(), b.getX(), b.getY(), b.getZ(), partialTicks);
        } else {
            GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1],
                    color.getColorComponents(null)[2], 0.1F);
            drawLine(player, a.getX(), a.getY(), a.getZ(), b.getX(), b.getY(), b.getZ(), partialTicks);
            GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1],
                    color.getColorComponents(null)[2], 0.4F);
        }
    }
    //GlStateManager.color(0.0f, 0.0f, 0.0f, 0.4f);
    GlStateManager.depthMask(true);
    GlStateManager.enableTexture2D();
    GlStateManager.disableBlend();
}

From source file:minebot.ui.PathRenderer.java

public static void drawSelectionBox(EntityPlayer player, BlockPos blockpos, float partialTicks, Color color) {
    GlStateManager.enableBlend();/*from  w w  w.  ja  va  2s . c o  m*/
    GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
    GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1],
            color.getColorComponents(null)[2], 0.4F);
    GL11.glLineWidth(5.0F);
    GlStateManager.disableTexture2D();
    GlStateManager.depthMask(false);
    float f = 0.002F;
    //BlockPos blockpos = movingObjectPositionIn.getBlockPos();
    Block block = Minecraft.theMinecraft.theWorld.getBlockState(blockpos).getBlock();
    if (block.equals(Blocks.air)) {
        block = Blocks.dirt;
    }
    block.setBlockBoundsBasedOnState(Minecraft.theMinecraft.theWorld, blockpos);
    double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks;
    double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks;
    double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks;
    AxisAlignedBB toDraw = block.getSelectedBoundingBox(Minecraft.theMinecraft.theWorld, blockpos)
            .expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D)
            .offset(-d0, -d1, -d2);
    Tessellator tessellator = Tessellator.getInstance();
    WorldRenderer worldrenderer = tessellator.getWorldRenderer();
    worldrenderer.begin(3, DefaultVertexFormats.POSITION);
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex();
    tessellator.draw();
    worldrenderer.begin(3, DefaultVertexFormats.POSITION);
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex();
    tessellator.draw();
    worldrenderer.begin(1, DefaultVertexFormats.POSITION);
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.minZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.maxX, toDraw.maxY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.minY, toDraw.maxZ).endVertex();
    worldrenderer.pos(toDraw.minX, toDraw.maxY, toDraw.maxZ).endVertex();
    tessellator.draw();
    GlStateManager.depthMask(true);
    GlStateManager.enableTexture2D();
    GlStateManager.disableBlend();
}

From source file:minesweeperMod.client.GuiAnimatedStat.java

License:LGPL

public void render(FontRenderer fontRenderer, List<String> textList, float zLevel) {
    doneExpanding = true;/*  w  w w . j  av a  2s  .  co  m*/
    if (isClicked) {
        // calculate the width and height needed for the box to fit the
        // strings.
        int maxWidth = fontRenderer.getStringWidth(title);
        int maxHeight = 12;
        if (textList.size() > 0) {
            maxHeight += 4 + textList.size() * 10;
        }
        for (String line : textList) {
            if (fontRenderer.getStringWidth(line) > maxWidth)
                maxWidth = fontRenderer.getStringWidth(line);
        }
        maxWidth += 20;

        // expand the box

        for (int i = 0; i < ANIMATED_STAT_SPEED; i++) {
            if (width < maxWidth) {
                width++;
                doneExpanding = false;
            }
            if (height < maxHeight) {
                height++;
                doneExpanding = false;
            }
            if (width > maxWidth)
                width--;
            if (height > maxHeight)
                height--;
        }

    } else {
        for (int i = 0; i < ANIMATED_STAT_SPEED; i++) {
            if (width > minWidth)
                width--;
            if (height > minHeight)
                height--;
        }
        doneExpanding = false;
    }

    affectedY = baseY;
    if (affectingStat != null) {
        affectedY += affectingStat.affectedY + affectingStat.height;
    }
    if (leftSided)
        width *= -1;
    Gui.drawRect(baseX, affectedY, baseX + width, affectedY + height, backGroundColor);
    GL11.glDisable(GL11.GL_TEXTURE_2D);
    GL11.glLineWidth(3.0F);
    GL11.glColor4d(0, 0, 0, 1);
    Tessellator tess = Tessellator.instance;
    tess.startDrawing(GL11.GL_LINE_LOOP);
    tess.addVertex(baseX, affectedY, zLevel);
    tess.addVertex(baseX + width, affectedY, zLevel);
    tess.addVertex(baseX + width, affectedY + height, zLevel);
    tess.addVertex(baseX, affectedY + height, zLevel);
    tess.draw();
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    if (leftSided)
        width *= -1;
    // if done expanding, draw the information
    if (doneExpanding) {
        fontRenderer.drawStringWithShadow(title, baseX + (leftSided ? -width + 2 : 18), affectedY + 2,
                0xFFFF00);
        for (int i = 0; i < textList.size(); i++) {
            if (textList.get(i).contains("\u00a70")) {
                fontRenderer.drawString(textList.get(i), baseX + (leftSided ? -width + 2 : 18),
                        affectedY + i * 10 + 12, 0xFFFFFF);
            } else {
                fontRenderer.drawStringWithShadow(textList.get(i), baseX + (leftSided ? -width + 2 : 18),
                        affectedY + i * 10 + 12, 0xFFFFFF);
            }
        }

    }
}