@SubscribeEvent public static void drawElements(RenderGameOverlayEvent.Pre event) { if (event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR) { GlStateManager.pushMatrix(); GlStateManager.bindTexture(UITextures.GUI.getGlTextureId()); for (Component component : components) component.atlasPass(0, event.getPartialTicks()); GlStateManager.enableRescaleNormal(); GlStateManager.enableAlpha(); GlStateManager.alphaFunc(516, 0.1F); GlStateManager.enableBlend(); GlStateManager.blendFunc( GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); GlStateManager.bindTexture(mc.getTextureMapBlocks().getGlTextureId()); for (Component component : components) component.itemPass(0, event.getPartialTicks()); tex.bindTexture(UITextures.RSS_GLINT); for (Component component : components) { GlStateManager.pushMatrix(); component.itemEffectPass(0, event.getPartialTicks()); GlStateManager.popMatrix(); } GlStateManager.disableAlpha(); GlStateManager.disableRescaleNormal(); GlStateManager.disableLighting(); for (Component component : components) component.textPass(0, event.getPartialTicks(), font); GlStateManager.popMatrix(); } }
/* HUD */ @SubscribeEvent public void renderHealthbar(RenderGameOverlayEvent.Pre event) { if (!Loader.isModLoaded("tukmc_Vz")) // Loader check to avoid conflicting // with a GUI mod (thanks Vazkii!) { if (event.type == ElementType.HEALTH) { updateCounter++; ScaledResolution scaledresolution = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); int scaledWidth = scaledresolution.getScaledWidth(); int scaledHeight = scaledresolution.getScaledHeight(); int xBasePos = scaledWidth / 2 - 91; int yBasePos = scaledHeight - 39; boolean highlight = mc.thePlayer.hurtResistantTime / 3 % 2 == 1; if (mc.thePlayer.hurtResistantTime < 10) { highlight = false; } IAttributeInstance attrMaxHealth = this.mc.thePlayer.getEntityAttribute(SharedMonsterAttributes.maxHealth); int health = MathHelper.ceiling_float_int(mc.thePlayer.getHealth()); int healthLast = MathHelper.ceiling_float_int(mc.thePlayer.prevHealth); float healthMax = (float) attrMaxHealth.getAttributeValue(); if (healthMax > 20) healthMax = 20; float absorb = this.mc.thePlayer.getAbsorptionAmount(); int healthRows = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F / 10.0F); int rowHeight = Math.max(10 - (healthRows - 2), 3); this.rand.setSeed((long) (updateCounter * 312871)); int left = scaledWidth / 2 - 91; int top = scaledHeight - GuiIngameForge.left_height; int regen = -1; if (mc.thePlayer.isPotionActive(Potion.regeneration)) { regen = updateCounter % 25; } final int TOP = 9 * (mc.theWorld.getWorldInfo().isHardcoreModeEnabled() ? 5 : 0); final int BACKGROUND = (highlight ? 25 : 16); int MARGIN = 16; if (mc.thePlayer.isPotionActive(Potion.poison)) MARGIN += 36; else if (mc.thePlayer.isPotionActive(Potion.wither)) MARGIN += 72; float absorbRemaining = absorb; for (int i = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F) - 1; i >= 0; --i) { int b0 = (highlight ? 1 : 0); int row = MathHelper.ceiling_float_int((float) (i + 1) / 10.0F) - 1; int x = left + i % 10 * 8; int y = top - row * rowHeight; if (health <= 4) y += rand.nextInt(2); if (i == regen) y -= 2; drawTexturedModalRect(x, y, BACKGROUND, TOP, 9, 9); if (highlight) { if (i * 2 + 1 < healthLast) drawTexturedModalRect(x, y, MARGIN + 54, TOP, 9, 9); // 6 else if (i * 2 + 1 == healthLast) drawTexturedModalRect(x, y, MARGIN + 63, TOP, 9, 9); // 7 } if (absorbRemaining > 0.0F) { if (absorbRemaining == absorb && absorb % 2.0F == 1.0F) drawTexturedModalRect(x, y, MARGIN + 153, TOP, 9, 9); // 17 else drawTexturedModalRect(x, y, MARGIN + 144, TOP, 9, 9); // 16 absorbRemaining -= 2.0F; } else { if (i * 2 + 1 < health) drawTexturedModalRect(x, y, MARGIN + 36, TOP, 9, 9); // 4 else if (i * 2 + 1 == health) drawTexturedModalRect(x, y, MARGIN + 45, TOP, 9, 9); // 5 } } PotionEffect potion = mc.thePlayer.getActivePotionEffect(Potion.wither); if (potion != null) return; potion = mc.thePlayer.getActivePotionEffect(Potion.poison); if (potion != null) return; // Extra hearts this.mc.getTextureManager().bindTexture(hearts); int hp = MathHelper.ceiling_float_int(this.mc.thePlayer.getHealth()); for (int iter = 0; iter < hp / 20; iter++) { int renderHearts = (hp - 20 * (iter + 1)) / 2; if (renderHearts > 10) renderHearts = 10; for (int i = 0; i < renderHearts; i++) { this.drawTexturedModalRect(xBasePos + 8 * i, yBasePos, 0 + 18 * iter, 0, 8, 8); } if (hp % 2 == 1 && renderHearts < 10) { this.drawTexturedModalRect( xBasePos + 8 * renderHearts, yBasePos, 9 + 18 * iter, 0, 8, 8); } } this.mc.getTextureManager().bindTexture(icons); GuiIngameForge.left_height += 10; if (absorb > 0) GuiIngameForge.left_height += 10; event.setCanceled(true); if (event.type == ElementType.CROSSHAIRS && gs.thirdPersonView != 0) { event.setCanceled(true); } } } }