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