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