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