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