001    package net.minecraft.client.gui;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.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        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    }