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.5 (" + 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    }