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