    001package net.minecraft.client.gui;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.awt.Color;
    006import java.util.List;
    007import java.util.Random;
    008import net.minecraft.block.Block;
    009import net.minecraft.block.material.Material;
    010import net.minecraft.client.Minecraft;
    011import net.minecraft.client.multiplayer.NetClientHandler;
    012import net.minecraft.client.renderer.RenderHelper;
    013import net.minecraft.client.renderer.Tessellator;
    014import net.minecraft.client.renderer.entity.RenderItem;
    015import net.minecraft.entity.boss.BossStatus;
    016import net.minecraft.entity.player.InventoryPlayer;
    017import net.minecraft.item.ItemStack;
    018import net.minecraft.potion.Potion;
    019import net.minecraft.util.Direction;
    020import net.minecraft.util.FoodStats;
    021import net.minecraft.util.MathHelper;
    022import net.minecraft.util.StatCollector;
    023import net.minecraft.util.StringUtils;
    024import net.minecraft.world.EnumSkyBlock;
    025import net.minecraft.world.chunk.Chunk;
    026import org.lwjgl.opengl.GL11;
    027import org.lwjgl.opengl.GL12;
    028
    029import net.minecraftforge.common.ForgeHooks;
    030
    031@SideOnly(Side.CLIENT)
    032public class GuiIngame extends Gui
    033{
    034    private static final RenderItem itemRenderer = new RenderItem();
    035    private final Random rand = new Random();
    036    private final Minecraft mc;
    037
    038    /** ChatGUI instance that retains all previous chat data */
    039    private final GuiNewChat persistantChatGUI;
    040    private int updateCounter = 0;
    041
    042    /** The string specifying which record music is playing */
    043    private String recordPlaying = "";
    044
    045    /** How many ticks the record playing message will be displayed */
    046    private int recordPlayingUpFor = 0;
    047    private boolean recordIsPlaying = false;
    048
    049    /** Previous frame vignette brightness (slowly changes by 1% each frame) */
    050    public float prevVignetteBrightness = 1.0F;
    051    private int field_92017_k;
    052    private ItemStack field_92016_l;
    053
    054    public GuiIngame(Minecraft par1Minecraft)
    055    {
    056        this.mc = par1Minecraft;
    057        this.persistantChatGUI = new GuiNewChat(par1Minecraft);
    058    }
    059
    060    /**
    061     * Render the ingame overlay with quick icon bar, ...
    062     */
    063    public void renderGameOverlay(float par1, boolean par2, int par3, int par4)
    064    {
    065        ScaledResolution var5 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight);
    066        int var6 = var5.getScaledWidth();
    067        int var7 = var5.getScaledHeight();
    068        FontRenderer var8 = this.mc.fontRenderer;
    069        this.mc.entityRenderer.setupOverlayRendering();
    070        GL11.glEnable(GL11.GL_BLEND);
    071
    072        if (Minecraft.isFancyGraphicsEnabled())
    073        {
    074            this.renderVignette(this.mc.thePlayer.getBrightness(par1), var6, var7);
    075        }
    076        else
    077        {
    078            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    079        }
    080
    081        ItemStack var9 = this.mc.thePlayer.inventory.armorItemInSlot(3);
    082
    083        if (this.mc.gameSettings.thirdPersonView == 0 && var9 != null && var9.itemID == Block.pumpkin.blockID)
    084        {
    085            this.renderPumpkinBlur(var6, var7);
    086        }
    087
    088        if (!this.mc.thePlayer.isPotionActive(Potion.confusion))
    089        {
    090            float var10 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * par1;
    091
    092            if (var10 > 0.0F)
    093            {
    094                this.renderPortalOverlay(var10, var6, var7);
    095            }
    096        }
    097
    098        boolean var11;
    099        int var12;
    100        int var13;
    101        int var17;
    102        int var16;
    103        int var19;
    104        int var20;
    105        int var23;
    106        int var22;
    107        int var24;
    108        int var47;
    109
    110        if (!this.mc.playerController.func_78747_a())
    111        {
    112            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    113            GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/gui.png"));
    114            InventoryPlayer var31 = this.mc.thePlayer.inventory;
    115            this.zLevel = -90.0F;
    116            this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22);
    117            this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);
    118            GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/icons.png"));
    119            GL11.glEnable(GL11.GL_BLEND);
    120            GL11.glBlendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR);
    121            this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16);
    122            GL11.glDisable(GL11.GL_BLEND);
    123            var11 = this.mc.thePlayer.hurtResistantTime / 3 % 2 == 1;
    124
    125            if (this.mc.thePlayer.hurtResistantTime < 10)
    126            {
    127                var11 = false;
    128            }
    129
    130            var12 = this.mc.thePlayer.getHealth();
    131            var13 = this.mc.thePlayer.prevHealth;
    132            this.rand.setSeed((long)(this.updateCounter * 312871));
    133            boolean var14 = false;
    134            FoodStats var15 = this.mc.thePlayer.getFoodStats();
    135            var16 = var15.getFoodLevel();
    136            var17 = var15.getPrevFoodLevel();
    137            this.mc.mcProfiler.startSection("bossHealth");
    138            this.renderBossHealth();
    139            this.mc.mcProfiler.endSection();
    140            int var18;
    141
    142            if (this.mc.playerController.shouldDrawHUD())
    143            {
    144                var18 = var6 / 2 - 91;
    145                var19 = var6 / 2 + 91;
    146                this.mc.mcProfiler.startSection("expBar");
    147                var20 = this.mc.thePlayer.xpBarCap();
    148
    149                if (var20 > 0)
    150                {
    151                    short var21 = 182;
    152                    var22 = (int)(this.mc.thePlayer.experience * (float)(var21 + 1));
    153                    var23 = var7 - 32 + 3;
    154                    this.drawTexturedModalRect(var18, var23, 0, 64, var21, 5);
    155
    156                    if (var22 > 0)
    157                    {
    158                        this.drawTexturedModalRect(var18, var23, 0, 69, var22, 5);
    159                    }
    160                }
    161
    162                var47 = var7 - 39;
    163                var22 = var47 - 10;
    164                var23 = ForgeHooks.getTotalArmorValue(mc.thePlayer);
    165                var24 = -1;
    166
    167                if (this.mc.thePlayer.isPotionActive(Potion.regeneration))
    168                {
    169                    var24 = this.updateCounter % 25;
    170                }
    171
    172                this.mc.mcProfiler.endStartSection("healthArmor");
    173                int var25;
    174                int var26;
    175                int var29;
    176                int var28;
    177
    178                for (var25 = 0; var25 < 10; ++var25)
    179                {
    180                    if (var23 > 0)
    181                    {
    182                        var26 = var18 + var25 * 8;
    183
    184                        if (var25 * 2 + 1 < var23)
    185                        {
    186                            this.drawTexturedModalRect(var26, var22, 34, 9, 9, 9);
    187                        }
    188
    189                        if (var25 * 2 + 1 == var23)
    190                        {
    191                            this.drawTexturedModalRect(var26, var22, 25, 9, 9, 9);
    192                        }
    193
    194                        if (var25 * 2 + 1 > var23)
    195                        {
    196                            this.drawTexturedModalRect(var26, var22, 16, 9, 9, 9);
    197                        }
    198                    }
    199
    200                    var26 = 16;
    201
    202                    if (this.mc.thePlayer.isPotionActive(Potion.poison))
    203                    {
    204                        var26 += 36;
    205                    }
    206                    else if (this.mc.thePlayer.isPotionActive(Potion.wither))
    207                    {
    208                        var26 += 72;
    209                    }
    210
    211                    byte var27 = 0;
    212
    213                    if (var11)
    214                    {
    215                        var27 = 1;
    216                    }
    217
    218                    var28 = var18 + var25 * 8;
    219                    var29 = var47;
    220
    221                    if (var12 <= 4)
    222                    {
    223                        var29 = var47 + this.rand.nextInt(2);
    224                    }
    225
    226                    if (var25 == var24)
    227                    {
    228                        var29 -= 2;
    229                    }
    230
    231                    byte var30 = 0;
    232
    233                    if (this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled())
    234                    {
    235                        var30 = 5;
    236                    }
    237
    238                    this.drawTexturedModalRect(var28, var29, 16 + var27 * 9, 9 * var30, 9, 9);
    239
    240                    if (var11)
    241                    {
    242                        if (var25 * 2 + 1 < var13)
    243                        {
    244                            this.drawTexturedModalRect(var28, var29, var26 + 54, 9 * var30, 9, 9);
    245                        }
    246
    247                        if (var25 * 2 + 1 == var13)
    248                        {
    249                            this.drawTexturedModalRect(var28, var29, var26 + 63, 9 * var30, 9, 9);
    250                        }
    251                    }
    252
    253                    if (var25 * 2 + 1 < var12)
    254                    {
    255                        this.drawTexturedModalRect(var28, var29, var26 + 36, 9 * var30, 9, 9);
    256                    }
    257
    258                    if (var25 * 2 + 1 == var12)
    259                    {
    260                        this.drawTexturedModalRect(var28, var29, var26 + 45, 9 * var30, 9, 9);
    261                    }
    262                }
    263
    264                this.mc.mcProfiler.endStartSection("food");
    265                int var51;
    266
    267                for (var25 = 0; var25 < 10; ++var25)
    268                {
    269                    var26 = var47;
    270                    var51 = 16;
    271                    byte var52 = 0;
    272
    273                    if (this.mc.thePlayer.isPotionActive(Potion.hunger))
    274                    {
    275                        var51 += 36;
    276                        var52 = 13;
    277                    }
    278
    279                    if (this.mc.thePlayer.getFoodStats().getSaturationLevel() <= 0.0F && this.updateCounter % (var16 * 3 + 1) == 0)
    280                    {
    281                        var26 = var47 + (this.rand.nextInt(3) - 1);
    282                    }
    283
    284                    if (var14)
    285                    {
    286                        var52 = 1;
    287                    }
    288
    289                    var29 = var19 - var25 * 8 - 9;
    290                    this.drawTexturedModalRect(var29, var26, 16 + var52 * 9, 27, 9, 9);
    291
    292                    if (var14)
    293                    {
    294                        if (var25 * 2 + 1 < var17)
    295                        {
    296                            this.drawTexturedModalRect(var29, var26, var51 + 54, 27, 9, 9);
    297                        }
    298
    299                        if (var25 * 2 + 1 == var17)
    300                        {
    301                            this.drawTexturedModalRect(var29, var26, var51 + 63, 27, 9, 9);
    302                        }
    303                    }
    304
    305                    if (var25 * 2 + 1 < var16)
    306                    {
    307                        this.drawTexturedModalRect(var29, var26, var51 + 36, 27, 9, 9);
    308                    }
    309
    310                    if (var25 * 2 + 1 == var16)
    311                    {
    312                        this.drawTexturedModalRect(var29, var26, var51 + 45, 27, 9, 9);
    313                    }
    314                }
    315
    316                this.mc.mcProfiler.endStartSection("air");
    317
    318                if (this.mc.thePlayer.isInsideOfMaterial(Material.water))
    319                {
    320                    var25 = this.mc.thePlayer.getAir();
    321                    var26 = MathHelper.ceiling_double_int((double)(var25 - 2) * 10.0D / 300.0D);
    322                    var51 = MathHelper.ceiling_double_int((double)var25 * 10.0D / 300.0D) - var26;
    323
    324                    for (var28 = 0; var28 < var26 + var51; ++var28)
    325                    {
    326                        if (var28 < var26)
    327                        {
    328                            this.drawTexturedModalRect(var19 - var28 * 8 - 9, var22, 16, 18, 9, 9);
    329                        }
    330                        else
    331                        {
    332                            this.drawTexturedModalRect(var19 - var28 * 8 - 9, var22, 25, 18, 9, 9);
    333                        }
    334                    }
    335                }
    336
    337                this.mc.mcProfiler.endSection();
    338            }
    339
    340            GL11.glDisable(GL11.GL_BLEND);
    341            this.mc.mcProfiler.startSection("actionBar");
    342            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    343            RenderHelper.enableGUIStandardItemLighting();
    344
    345            for (var18 = 0; var18 < 9; ++var18)
    346            {
    347                var19 = var6 / 2 - 90 + var18 * 20 + 2;
    348                var20 = var7 - 16 - 3;
    349                this.renderInventorySlot(var18, var19, var20, par1);
    350            }
    351
    352            RenderHelper.disableStandardItemLighting();
    353            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    354            this.mc.mcProfiler.endSection();
    355        }
    356
    357        float var33;
    358
    359        if (this.mc.thePlayer.getSleepTimer() > 0)
    360        {
    361            this.mc.mcProfiler.startSection("sleep");
    362            GL11.glDisable(GL11.GL_DEPTH_TEST);
    363            GL11.glDisable(GL11.GL_ALPHA_TEST);
    364            int var32 = this.mc.thePlayer.getSleepTimer();
    365            var33 = (float)var32 / 100.0F;
    366
    367            if (var33 > 1.0F)
    368            {
    369                var33 = 1.0F - (float)(var32 - 100) / 10.0F;
    370            }
    371
    372            var12 = (int)(220.0F * var33) << 24 | 1052704;
    373            drawRect(0, 0, var6, var7, var12);
    374            GL11.glEnable(GL11.GL_ALPHA_TEST);
    375            GL11.glEnable(GL11.GL_DEPTH_TEST);
    376            this.mc.mcProfiler.endSection();
    377        }
    378
    379        int var38;
    380        int var37;
    381
    382        if (this.mc.playerController.func_78763_f() && this.mc.thePlayer.experienceLevel > 0)
    383        {
    384            this.mc.mcProfiler.startSection("expLevel");
    385            var11 = false;
    386            var12 = var11 ? 16777215 : 8453920;
    387            String var34 = "" + this.mc.thePlayer.experienceLevel;
    388            var38 = (var6 - var8.getStringWidth(var34)) / 2;
    389            var37 = var7 - 31 - 4;
    390            var8.drawString(var34, var38 + 1, var37, 0);
    391            var8.drawString(var34, var38 - 1, var37, 0);
    392            var8.drawString(var34, var38, var37 + 1, 0);
    393            var8.drawString(var34, var38, var37 - 1, 0);
    394            var8.drawString(var34, var38, var37, var12);
    395            this.mc.mcProfiler.endSection();
    396        }
    397
    398        String var35;
    399
    400        if (this.mc.gameSettings.field_92117_D)
    401        {
    402            this.mc.mcProfiler.startSection("toolHighlight");
    403
    404            if (this.field_92017_k > 0 && this.field_92016_l != null)
    405            {
    406                var35 = this.field_92016_l.getDisplayName();
    407                var12 = (var6 - var8.getStringWidth(var35)) / 2;
    408                var13 = var7 - 59;
    409
    410                if (!this.mc.playerController.shouldDrawHUD())
    411                {
    412                    var13 += 14;
    413                }
    414
    415                var38 = (int)((float)this.field_92017_k * 256.0F / 10.0F);
    416
    417                if (var38 > 255)
    418                {
    419                    var38 = 255;
    420                }
    421
    422                if (var38 > 0)
    423                {
    424                    GL11.glPushMatrix();
    425                    GL11.glEnable(GL11.GL_BLEND);
    426                    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    427                    var8.drawStringWithShadow(var35, var12, var13, 16777215 + (var38 << 24));
    428                    GL11.glDisable(GL11.GL_BLEND);
    429                    GL11.glPopMatrix();
    430                }
    431            }
    432
    433            this.mc.mcProfiler.endSection();
    434        }
    435
    436        if (this.mc.isDemo())
    437        {
    438            this.mc.mcProfiler.startSection("demo");
    439            var35 = "";
    440
    441            if (this.mc.theWorld.getTotalWorldTime() >= 120500L)
    442            {
    443                var35 = StatCollector.translateToLocal("demo.demoExpired");
    444            }
    445            else
    446            {
    447                var35 = String.format(StatCollector.translateToLocal("demo.remainingTime"), new Object[] {StringUtils.ticksToElapsedTime((int)(120500L - this.mc.theWorld.getTotalWorldTime()))});
    448            }
    449
    450            var12 = var8.getStringWidth(var35);
    451            var8.drawStringWithShadow(var35, var6 - var12 - 10, 5, 16777215);
    452            this.mc.mcProfiler.endSection();
    453        }
    454
    455        if (this.mc.gameSettings.showDebugInfo)
    456        {
    457            this.mc.mcProfiler.startSection("debug");
    458            GL11.glPushMatrix();
    459            var8.drawStringWithShadow("Minecraft 1.4.7 (" + this.mc.debug + ")", 2, 2, 16777215);
    460            var8.drawStringWithShadow(this.mc.debugInfoRenders(), 2, 12, 16777215);
    461            var8.drawStringWithShadow(this.mc.getEntityDebug(), 2, 22, 16777215);
    462            var8.drawStringWithShadow(this.mc.debugInfoEntities(), 2, 32, 16777215);
    463            var8.drawStringWithShadow(this.mc.getWorldProviderName(), 2, 42, 16777215);
    464            long var36 = Runtime.getRuntime().maxMemory();
    465            long var40 = Runtime.getRuntime().totalMemory();
    466            long var42 = Runtime.getRuntime().freeMemory();
    467            long var43 = var40 - var42;
    468            String var45 = "Used memory: " + var43 * 100L / var36 + "% (" + var43 / 1024L / 1024L + "MB) of " + var36 / 1024L / 1024L + "MB";
    469            this.drawString(var8, var45, var6 - var8.getStringWidth(var45) - 2, 2, 14737632);
    470            var45 = "Allocated memory: " + var40 * 100L / var36 + "% (" + var40 / 1024L / 1024L + "MB)";
    471            this.drawString(var8, var45, var6 - var8.getStringWidth(var45) - 2, 12, 14737632);
    472            var47 = MathHelper.floor_double(this.mc.thePlayer.posX);
    473            var22 = MathHelper.floor_double(this.mc.thePlayer.posY);
    474            var23 = MathHelper.floor_double(this.mc.thePlayer.posZ);
    475            this.drawString(var8, String.format("x: %.5f (%d) // c: %d (%d)", new Object[] {Double.valueOf(this.mc.thePlayer.posX), Integer.valueOf(var47), Integer.valueOf(var47 >> 4), Integer.valueOf(var47 & 15)}), 2, 64, 14737632);
    476            this.drawString(var8, String.format("y: %.3f (feet pos, %.3f eyes pos)", new Object[] {Double.valueOf(this.mc.thePlayer.boundingBox.minY), Double.valueOf(this.mc.thePlayer.posY)}), 2, 72, 14737632);
    477            this.drawString(var8, String.format("z: %.5f (%d) // c: %d (%d)", new Object[] {Double.valueOf(this.mc.thePlayer.posZ), Integer.valueOf(var23), Integer.valueOf(var23 >> 4), Integer.valueOf(var23 & 15)}), 2, 80, 14737632);
    478            var24 = MathHelper.floor_double((double)(this.mc.thePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
    479            this.drawString(var8, "f: " + var24 + " (" + Direction.directions[var24] + ") / " + MathHelper.wrapAngleTo180_float(this.mc.thePlayer.rotationYaw), 2, 88, 14737632);
    480
    481            if (this.mc.theWorld != null && this.mc.theWorld.blockExists(var47, var22, var23))
    482            {
    483                Chunk var53 = this.mc.theWorld.getChunkFromBlockCoords(var47, var23);
    484                this.drawString(var8, "lc: " + (var53.getTopFilledSegment() + 15) + " b: " + var53.getBiomeGenForWorldCoords(var47 & 15, var23 & 15, this.mc.theWorld.getWorldChunkManager()).biomeName + " bl: " + var53.getSavedLightValue(EnumSkyBlock.Block, var47 & 15, var22, var23 & 15) + " sl: " + var53.getSavedLightValue(EnumSkyBlock.Sky, var47 & 15, var22, var23 & 15) + " rl: " + var53.getBlockLightValue(var47 & 15, var22, var23 & 15, 0), 2, 96, 14737632);
    485            }
    486
    487            this.drawString(var8, String.format("ws: %.3f, fs: %.3f, g: %b, fl: %d", new Object[] {Float.valueOf(this.mc.thePlayer.capabilities.getWalkSpeed()), Float.valueOf(this.mc.thePlayer.capabilities.getFlySpeed()), Boolean.valueOf(this.mc.thePlayer.onGround), Integer.valueOf(this.mc.theWorld.getHeightValue(var47, var23))}), 2, 104, 14737632);
    488            GL11.glPopMatrix();
    489            this.mc.mcProfiler.endSection();
    490        }
    491
    492        if (this.recordPlayingUpFor > 0)
    493        {
    494            this.mc.mcProfiler.startSection("overlayMessage");
    495            var33 = (float)this.recordPlayingUpFor - par1;
    496            var12 = (int)(var33 * 256.0F / 20.0F);
    497
    498            if (var12 > 255)
    499            {
    500                var12 = 255;
    501            }
    502
    503            if (var12 > 0)
    504            {
    505                GL11.glPushMatrix();
    506                GL11.glTranslatef((float)(var6 / 2), (float)(var7 - 48), 0.0F);
    507                GL11.glEnable(GL11.GL_BLEND);
    508                GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    509                var13 = 16777215;
    510
    511                if (this.recordIsPlaying)
    512                {
    513                    var13 = Color.HSBtoRGB(var33 / 50.0F, 0.7F, 0.6F) & 16777215;
    514                }
    515
    516                var8.drawString(this.recordPlaying, -var8.getStringWidth(this.recordPlaying) / 2, -4, var13 + (var12 << 24));
    517                GL11.glDisable(GL11.GL_BLEND);
    518                GL11.glPopMatrix();
    519            }
    520
    521            this.mc.mcProfiler.endSection();
    522        }
    523
    524        GL11.glEnable(GL11.GL_BLEND);
    525        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    526        GL11.glDisable(GL11.GL_ALPHA_TEST);
    527        GL11.glPushMatrix();
    528        GL11.glTranslatef(0.0F, (float)(var7 - 48), 0.0F);
    529        this.mc.mcProfiler.startSection("chat");
    530        this.persistantChatGUI.drawChat(this.updateCounter);
    531        this.mc.mcProfiler.endSection();
    532        GL11.glPopMatrix();
    533
    534        if (this.mc.gameSettings.keyBindPlayerList.pressed && (!this.mc.isIntegratedServerRunning() || this.mc.thePlayer.sendQueue.playerInfoList.size() > 1))
    535        {
    536            this.mc.mcProfiler.startSection("playerList");
    537            NetClientHandler var41 = this.mc.thePlayer.sendQueue;
    538            List var39 = var41.playerInfoList;
    539            var13 = var41.currentServerMaxPlayers;
    540            var38 = var13;
    541
    542            for (var37 = 1; var38 > 20; var38 = (var13 + var37 - 1) / var37)
    543            {
    544                ++var37;
    545            }
    546
    547            var16 = 300 / var37;
    548
    549            if (var16 > 150)
    550            {
    551                var16 = 150;
    552            }
    553
    554            var17 = (var6 - var37 * var16) / 2;
    555            byte var44 = 10;
    556            drawRect(var17 - 1, var44 - 1, var17 + var16 * var37, var44 + 9 * var38, Integer.MIN_VALUE);
    557
    558            for (var19 = 0; var19 < var13; ++var19)
    559            {
    560                var20 = var17 + var19 % var37 * var16;
    561                var47 = var44 + var19 / var37 * 9;
    562                drawRect(var20, var47, var20 + var16 - 1, var47 + 8, 553648127);
    563                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    564                GL11.glEnable(GL11.GL_ALPHA_TEST);
    565
    566                if (var19 < var39.size())
    567                {
    568                    GuiPlayerInfo var46 = (GuiPlayerInfo)var39.get(var19);
    569                    var8.drawStringWithShadow(var46.name, var20, var47, 16777215);
    570                    this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/gui/icons.png"));
    571                    byte var50 = 0;
    572                    boolean var48 = false;
    573                    byte var49;
    574
    575                    if (var46.responseTime < 0)
    576                    {
    577                        var49 = 5;
    578                    }
    579                    else if (var46.responseTime < 150)
    580                    {
    581                        var49 = 0;
    582                    }
    583                    else if (var46.responseTime < 300)
    584                    {
    585                        var49 = 1;
    586                    }
    587                    else if (var46.responseTime < 600)
    588                    {
    589                        var49 = 2;
    590                    }
    591                    else if (var46.responseTime < 1000)
    592                    {
    593                        var49 = 3;
    594                    }
    595                    else
    596                    {
    597                        var49 = 4;
    598                    }
    599
    600                    this.zLevel += 100.0F;
    601                    this.drawTexturedModalRect(var20 + var16 - 12, var47, 0 + var50 * 10, 176 + var49 * 8, 10, 8);
    602                    this.zLevel -= 100.0F;
    603                }
    604            }
    605        }
    606
    607        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    608        GL11.glDisable(GL11.GL_LIGHTING);
    609        GL11.glEnable(GL11.GL_ALPHA_TEST);
    610    }
    611
    612    /**
    613     * Renders dragon's (boss) health on the HUD
    614     */
    615    private void renderBossHealth()
    616    {
    617        if (BossStatus.bossName != null && BossStatus.statusBarLength > 0)
    618        {
    619            --BossStatus.statusBarLength;
    620            FontRenderer var1 = this.mc.fontRenderer;
    621            ScaledResolution var2 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight);
    622            int var3 = var2.getScaledWidth();
    623            short var4 = 182;
    624            int var5 = var3 / 2 - var4 / 2;
    625            int var6 = (int)(BossStatus.healthScale * (float)(var4 + 1));
    626            byte var7 = 12;
    627            this.drawTexturedModalRect(var5, var7, 0, 74, var4, 5);
    628            this.drawTexturedModalRect(var5, var7, 0, 74, var4, 5);
    629
    630            if (var6 > 0)
    631            {
    632                this.drawTexturedModalRect(var5, var7, 0, 79, var6, 5);
    633            }
    634
    635            String var8 = BossStatus.bossName;
    636            var1.drawStringWithShadow(var8, var3 / 2 - var1.getStringWidth(var8) / 2, var7 - 10, 16777215);
    637            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    638            GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/icons.png"));
    639        }
    640    }
    641
    642    private void renderPumpkinBlur(int par1, int par2)
    643    {
    644        GL11.glDisable(GL11.GL_DEPTH_TEST);
    645        GL11.glDepthMask(false);
    646        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    647        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    648        GL11.glDisable(GL11.GL_ALPHA_TEST);
    649        GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("%blur%/misc/pumpkinblur.png"));
    650        Tessellator var3 = Tessellator.instance;
    651        var3.startDrawingQuads();
    652        var3.addVertexWithUV(0.0D, (double)par2, -90.0D, 0.0D, 1.0D);
    653        var3.addVertexWithUV((double)par1, (double)par2, -90.0D, 1.0D, 1.0D);
    654        var3.addVertexWithUV((double)par1, 0.0D, -90.0D, 1.0D, 0.0D);
    655        var3.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D);
    656        var3.draw();
    657        GL11.glDepthMask(true);
    658        GL11.glEnable(GL11.GL_DEPTH_TEST);
    659        GL11.glEnable(GL11.GL_ALPHA_TEST);
    660        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    661    }
    662
    663    /**
    664     * Renders the vignette. Args: vignetteBrightness, width, height
    665     */
    666    private void renderVignette(float par1, int par2, int par3)
    667    {
    668        par1 = 1.0F - par1;
    669
    670        if (par1 < 0.0F)
    671        {
    672            par1 = 0.0F;
    673        }
    674
    675        if (par1 > 1.0F)
    676        {
    677            par1 = 1.0F;
    678        }
    679
    680        this.prevVignetteBrightness = (float)((double)this.prevVignetteBrightness + (double)(par1 - this.prevVignetteBrightness) * 0.01D);
    681        GL11.glDisable(GL11.GL_DEPTH_TEST);
    682        GL11.glDepthMask(false);
    683        GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE_MINUS_SRC_COLOR);
    684        GL11.glColor4f(this.prevVignetteBrightness, this.prevVignetteBrightness, this.prevVignetteBrightness, 1.0F);
    685        GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("%blur%/misc/vignette.png"));
    686        Tessellator var4 = Tessellator.instance;
    687        var4.startDrawingQuads();
    688        var4.addVertexWithUV(0.0D, (double)par3, -90.0D, 0.0D, 1.0D);
    689        var4.addVertexWithUV((double)par2, (double)par3, -90.0D, 1.0D, 1.0D);
    690        var4.addVertexWithUV((double)par2, 0.0D, -90.0D, 1.0D, 0.0D);
    691        var4.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D);
    692        var4.draw();
    693        GL11.glDepthMask(true);
    694        GL11.glEnable(GL11.GL_DEPTH_TEST);
    695        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    696        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    697    }
    698
    699    /**
    700     * Renders the portal overlay. Args: portalStrength, width, height
    701     */
    702    private void renderPortalOverlay(float par1, int par2, int par3)
    703    {
    704        if (par1 < 1.0F)
    705        {
    706            par1 *= par1;
    707            par1 *= par1;
    708            par1 = par1 * 0.8F + 0.2F;
    709        }
    710
    711        GL11.glDisable(GL11.GL_ALPHA_TEST);
    712        GL11.glDisable(GL11.GL_DEPTH_TEST);
    713        GL11.glDepthMask(false);
    714        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    715        GL11.glColor4f(1.0F, 1.0F, 1.0F, par1);
    716        GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png"));
    717        float var4 = (float)(Block.portal.blockIndexInTexture % 16) / 16.0F;
    718        float var5 = (float)(Block.portal.blockIndexInTexture / 16) / 16.0F;
    719        float var6 = (float)(Block.portal.blockIndexInTexture % 16 + 1) / 16.0F;
    720        float var7 = (float)(Block.portal.blockIndexInTexture / 16 + 1) / 16.0F;
    721        Tessellator var8 = Tessellator.instance;
    722        var8.startDrawingQuads();
    723        var8.addVertexWithUV(0.0D, (double)par3, -90.0D, (double)var4, (double)var7);
    724        var8.addVertexWithUV((double)par2, (double)par3, -90.0D, (double)var6, (double)var7);
    725        var8.addVertexWithUV((double)par2, 0.0D, -90.0D, (double)var6, (double)var5);
    726        var8.addVertexWithUV(0.0D, 0.0D, -90.0D, (double)var4, (double)var5);
    727        var8.draw();
    728        GL11.glDepthMask(true);
    729        GL11.glEnable(GL11.GL_DEPTH_TEST);
    730        GL11.glEnable(GL11.GL_ALPHA_TEST);
    731        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    732    }
    733
    734    /**
    735     * Renders the specified item of the inventory slot at the specified location. Args: slot, x, y, partialTick
    736     */
    737    private void renderInventorySlot(int par1, int par2, int par3, float par4)
    738    {
    739        ItemStack var5 = this.mc.thePlayer.inventory.mainInventory[par1];
    740
    741        if (var5 != null)
    742        {
    743            float var6 = (float)var5.animationsToGo - par4;
    744
    745            if (var6 > 0.0F)
    746            {
    747                GL11.glPushMatrix();
    748                float var7 = 1.0F + var6 / 5.0F;
    749                GL11.glTranslatef((float)(par2 + 8), (float)(par3 + 12), 0.0F);
    750                GL11.glScalef(1.0F / var7, (var7 + 1.0F) / 2.0F, 1.0F);
    751                GL11.glTranslatef((float)(-(par2 + 8)), (float)(-(par3 + 12)), 0.0F);
    752            }
    753
    754            itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.renderEngine, var5, par2, par3);
    755
    756            if (var6 > 0.0F)
    757            {
    758                GL11.glPopMatrix();
    759            }
    760
    761            itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.renderEngine, var5, par2, par3);
    762        }
    763    }
    764
    765    /**
    766     * The update tick for the ingame UI
    767     */
    768    public void updateTick()
    769    {
    770        if (this.recordPlayingUpFor > 0)
    771        {
    772            --this.recordPlayingUpFor;
    773        }
    774
    775        ++this.updateCounter;
    776
    777        if (this.mc.thePlayer != null)
    778        {
    779            ItemStack var1 = this.mc.thePlayer.inventory.getCurrentItem();
    780
    781            if (var1 == null)
    782            {
    783                this.field_92017_k = 0;
    784            }
    785            else if (this.field_92016_l != null && var1.itemID == this.field_92016_l.itemID && ItemStack.areItemStackTagsEqual(var1, this.field_92016_l) && (var1.isItemStackDamageable() || var1.getItemDamage() == this.field_92016_l.getItemDamage()))
    786            {
    787                if (this.field_92017_k > 0)
    788                {
    789                    --this.field_92017_k;
    790                }
    791            }
    792            else
    793            {
    794                this.field_92017_k = 40;
    795            }
    796
    797            this.field_92016_l = var1;
    798        }
    799    }
    800
    801    public void setRecordPlayingMessage(String par1Str)
    802    {
    803        this.recordPlaying = "Now playing: " + par1Str;
    804        this.recordPlayingUpFor = 60;
    805        this.recordIsPlaying = true;
    806    }
    807
    808    /**
    809     * returns a pointer to the persistant Chat GUI, containing all previous chat messages and such
    810     */
    811    public GuiNewChat getChatGUI()
    812    {
    813        return this.persistantChatGUI;
    814    }
    815
    816    public int getUpdateCounter()
    817    {
    818        return this.updateCounter;
    819    }
    820}