From c7680888c1d276c5a19f53488a5d56d6e0428fcc Mon Sep 17 00:00:00 2001 From: Markil3 <75867393+Markil3@users.noreply.github.com> Date: Sat, 27 Feb 2021 12:23:21 -0700 Subject: [PATCH] Makes the hotbar and experience/jump bars move in and out. Its a nice effect. --- .../java/markil3/immersive_hud/EventBus.java | 29 ++++- .../markil3/immersive_hud/RenderUtils.java | 18 +-- .../markil3/immersive_hud/TimerUtils.java | 117 ++++++++++++++++-- 3 files changed, 144 insertions(+), 20 deletions(-) diff --git a/src/main/java/markil3/immersive_hud/EventBus.java b/src/main/java/markil3/immersive_hud/EventBus.java index a7fe112..5f6e07c 100644 --- a/src/main/java/markil3/immersive_hud/EventBus.java +++ b/src/main/java/markil3/immersive_hud/EventBus.java @@ -166,20 +166,21 @@ public class EventBus case HEALTH: if (event instanceof RenderGameOverlayEvent.Pre) { - if (TimerUtils.drawHealth()) + if (TimerUtils.drawHealth(event.getMatrixStack())) { event.setCanceled(true); } } else if (event instanceof RenderGameOverlayEvent.Post) { + event.getMatrixStack().pop(); resetAlpha(); } break; case FOOD: if (event instanceof RenderGameOverlayEvent.Pre) { - if (TimerUtils.drawHunger()) + if (TimerUtils.drawHunger(event.getMatrixStack())) { event.setCanceled(true); } @@ -189,13 +190,14 @@ public class EventBus */ else if (event instanceof RenderGameOverlayEvent.Post) { + event.getMatrixStack().pop(); resetAlpha(); } break; case ARMOR: if (event instanceof RenderGameOverlayEvent.Pre) { - if (TimerUtils.drawArmor()) + if (TimerUtils.drawArmor(event.getMatrixStack())) { event.setCanceled(true); } @@ -205,19 +207,38 @@ public class EventBus */ else if (event instanceof RenderGameOverlayEvent.Post) { + event.getMatrixStack().pop(); + resetAlpha(); + } + break; + case AIR: + if (event instanceof RenderGameOverlayEvent.Pre) + { + if (TimerUtils.drawAir(event.getMatrixStack())) + { + event.setCanceled(true); + } + } + /* + * Reset the transparency. + */ + else if (event instanceof RenderGameOverlayEvent.Post) + { + event.getMatrixStack().pop(); resetAlpha(); } break; case HEALTHMOUNT: if (event instanceof RenderGameOverlayEvent.Pre) { - if (TimerUtils.drawMountHealth()) + if (TimerUtils.drawMountHealth(event.getMatrixStack())) { event.setCanceled(true); } } else if (event instanceof RenderGameOverlayEvent.Post) { + event.getMatrixStack().pop(); resetAlpha(); } break; diff --git a/src/main/java/markil3/immersive_hud/RenderUtils.java b/src/main/java/markil3/immersive_hud/RenderUtils.java index 1f41ab9..d00ded2 100644 --- a/src/main/java/markil3/immersive_hud/RenderUtils.java +++ b/src/main/java/markil3/immersive_hud/RenderUtils.java @@ -189,7 +189,7 @@ public class RenderUtils float f = mc.player.getHorseJumpPower(); int i = 182; int j = (int) (f * 183.0F); - int k = scaledHeight - 32 + 3; + int k = scaledHeight - TimerUtils.getJumpTranslation(); gui.blit(matrixStack, xPosition, k, 0, 84, 182, 5); if (j > 0) { @@ -239,7 +239,7 @@ public class RenderUtils { int j = 182; int k = (int) (mc.player.experience * 183.0F); - int l = scaledHeight - 32 + 3; + int l = scaledHeight - TimerUtils.getExperienceTranslation(); gui.blit(matrixStack, x, l, 0, 64, 182, 5); if (k > 0) { @@ -256,7 +256,7 @@ public class RenderUtils String s = "" + mc.player.experienceLevel; int i1 = (scaledWidth - gui.getFontRenderer() .getStringWidth(s)) / 2; - int j1 = scaledHeight - 31 - 4; + int j1 = scaledHeight - (int) ((22F * Main.getAlpha(TimerUtils.hotbarTime) + 9F) * alpha) - (int) (4F * alpha); gui.getFontRenderer() .drawString(matrixStack, s, @@ -335,10 +335,10 @@ public class RenderUtils int k = 182; int l = 91; gui.setBlitOffset(-90); - gui.blit(matrixStack, i - 91, scaledHeight - 22, 0, 0, 182, 22); + gui.blit(matrixStack, i - 91, scaledHeight - TimerUtils.getHotbarTranslation(), 0, 0, 182, 22); gui.blit(matrixStack, i - 91 - 1 + playerentity.inventory.currentItem * 20, - scaledHeight - 22 - 1, + scaledHeight - (int) (22F * alpha) - 1, 0, 22, 24, @@ -349,7 +349,7 @@ public class RenderUtils { gui.blit(matrixStack, i - 91 - 29, - scaledHeight - 23, + scaledHeight - (int) (23F * alpha), 24, 22, 29, @@ -359,7 +359,7 @@ public class RenderUtils { gui.blit(matrixStack, i + 91, - scaledHeight - 23, + scaledHeight - (int) (23F * alpha), 53, 22, 29, @@ -375,7 +375,7 @@ public class RenderUtils for (int i1 = 0; i1 < 9; ++i1) { int j1 = i - 90 + i1 * 20 + 2; - int k1 = scaledHeight - 16 - 3; + int k1 = scaledHeight - (int) (16F * alpha) - 3; renderHotbarItem(mc, alpha, j1, k1, partialTicks, @@ -385,7 +385,7 @@ public class RenderUtils if (!itemstack.isEmpty()) { - int i2 = scaledHeight - 16 - 3; + int i2 = scaledHeight - (int) (16F * alpha) - 3; if (handside == HandSide.LEFT) { renderHotbarItem(mc, alpha, i - 91 - 26, diff --git a/src/main/java/markil3/immersive_hud/TimerUtils.java b/src/main/java/markil3/immersive_hud/TimerUtils.java index c8a59a5..6ccca21 100644 --- a/src/main/java/markil3/immersive_hud/TimerUtils.java +++ b/src/main/java/markil3/immersive_hud/TimerUtils.java @@ -178,6 +178,55 @@ public class TimerUtils setAlpha(1.0F); } + /** + * Obtains the offset from the bottom of the screen that the hotbar + * receives. + * + * @return The offset the hotbar uses. + */ + public static int getHotbarTranslation() + { + return (int) (22F * Main.getAlpha(hotbarTime)); + } + + + /** + * Obtains the offset from the bottom of the screen that the experience bar + * receives. + * + * @return The offset the experience bar uses. + */ + public static int getExperienceTranslation() + { + return (int) ((getHotbarTranslation() + 10F) * Main.getAlpha( + experienceTime)) - 3; + } + + + /** + * Obtains the offset from the bottom of the screen that the jump bar + * receives. + * + * @return The offset the jump bar uses. + */ + public static int getJumpTranslation() + { + return (int) ((getHotbarTranslation() + 10F) * Main.getAlpha(jumpTime)) - 3; + } + + + /** + * Obtains the offset that the status bars (health, hunger, etc.) gets from + * their usual position. + * + * @return The offset. + */ + public static float getHealthTranslation() + { + return 29 - Math.max(Math.max(getExperienceTranslation(), + getJumpTranslation()), getHotbarTranslation()); + } + public static void onClick(Hand hand, Item item) { crosshairTime = VISUAL_TIME; @@ -327,14 +376,19 @@ public class TimerUtils */ public static void updatePotions(ClientPlayerEntity player) { + ArrayList toRemove = new ArrayList<>(); for (Effect effect : Collections.checkedSet(effectTime.keySet(), Effect.class)) { if (!player.isPotionActive(effect)) { - effectTime.remove(effect); + toRemove.add(effect); } } + for (Effect effect : toRemove) + { + effectTime.remove(effect); + } } /** @@ -591,7 +645,7 @@ public class TimerUtils * * @since 0.2-1.16.4-forge */ - public static boolean drawHealth() + public static boolean drawHealth(MatrixStack stack) { /* * When the health percentage falls to this level or below, the @@ -631,11 +685,19 @@ public class TimerUtils { if (healthTime > 0) { + stack.push(); + stack.translate(0F, + getHealthTranslation(), + 0F); setAlpha(Main.getAlpha(healthTime)); return false; } return true; } + stack.push(); + stack.translate(0F, + getHealthTranslation(), + 0F); return false; } @@ -647,7 +709,7 @@ public class TimerUtils * * @since 0.2-1.16.4-forge */ - public static boolean drawHunger() + public static boolean drawHunger(MatrixStack stack) { /* * When hunger falls to this level or below, the hunger bar won't @@ -673,7 +735,6 @@ public class TimerUtils if (changed || hunger <= HUNGER_BOUNDARY) { hungerTime = HEALTH_TIME; - setAlpha(Main.getAlpha(hungerTime)); } else if (hungerTime > 0) { @@ -683,18 +744,32 @@ public class TimerUtils * Only fade a change if the player is satisfied. Otherwise, * the bar is shown. */ - return hungerTime == 0 && hunger > HUNGER_BOUNDARY; + if (hungerTime == 0 && hunger > HUNGER_BOUNDARY) + { + return true; + } + else + { + setAlpha(Main.getAlpha(hungerTime)); + stack.push(); + stack.translate(0F, + getHealthTranslation(), + 0F); + return false; + } } /** * Determines whether or not to draw the armor bar, adjusting the alpha as * needed. * + * @param stack + * * @return If true, then cancel drawing the armor bar. * * @since 0.2-1.16.4-forge */ - public static boolean drawArmor() + public static boolean drawArmor(MatrixStack stack) { /* * Renders armor along with health. @@ -702,20 +777,44 @@ public class TimerUtils if (healthTime > 0) { setAlpha(Main.getAlpha(healthTime)); + stack.push(); + stack.translate(0F, + getHealthTranslation(), + 0F); return false; } return true; } + /** + * Repositions the oxygen bar. + * + * @param stack + * + * @return If true, then cancel drawing the oxygen bar. + * + * @since 0.2-1.16.4-forge + */ + public static boolean drawAir(MatrixStack stack) + { + stack.push(); + stack.translate(0F, + getHealthTranslation(), + 0F); + return false; + } + /** * Determines whether or not to draw the mount's health, adjusting the alpha * as needed. * + * @param stack + * * @return If true, then cancel drawing the mount health bar. * * @since 0.2-1.16.4-forge */ - public static boolean drawMountHealth() + public static boolean drawMountHealth(MatrixStack stack) { Minecraft mc = Minecraft.getInstance(); Entity tmp = mc.player.getRidingEntity(); @@ -750,6 +849,10 @@ public class TimerUtils if (mountTime > 0) { + stack.push(); + stack.translate(0F, + getHealthTranslation(), + 0F); setAlpha(Main.getAlpha(mountTime)); return false; }