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