diff options
author | viciscat <51047087+viciscat@users.noreply.github.com> | 2024-05-12 19:32:13 +0200 |
---|---|---|
committer | viciscat <51047087+viciscat@users.noreply.github.com> | 2024-05-12 19:32:13 +0200 |
commit | c7fb5ee7f3d8baba5e510772abf95eb2c322b688 (patch) | |
tree | b24c18d712e3ce784b9057fd022b8540e75e4514 /src/main/java/de | |
parent | 9714f93a9209b4046c8e3fe7642070cae24be669 (diff) | |
download | Skyblocker-c7fb5ee7f3d8baba5e510772abf95eb2c322b688.tar.gz Skyblocker-c7fb5ee7f3d8baba5e510772abf95eb2c322b688.tar.bz2 Skyblocker-c7fb5ee7f3d8baba5e510772abf95eb2c322b688.zip |
make health and exp show if their respective fancy variant are hidden
more mixins here and there :p
Diffstat (limited to 'src/main/java/de')
5 files changed, 62 insertions, 20 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java index b939b401..cebc59ee 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java @@ -1,6 +1,8 @@ package de.hysky.skyblocker.mixins; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.systems.RenderSystem; import de.hysky.skyblocker.SkyblockerMod; @@ -79,11 +81,11 @@ public abstract class InGameHudMixin { @Inject(method = { "renderExperienceBar", "renderExperienceLevel" }, at = @At("HEAD"), cancellable = true) private void skyblocker$renderExperienceBar(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars && !Utils.isInTheRift()) + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars && !Utils.isInTheRift() && FancyStatusBars.isExperienceFancyBarVisible()) ci.cancel(); } - @Inject(method = "renderStatusBars", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderStatusBars", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;getRiddenEntity()Lnet/minecraft/entity/LivingEntity;"), cancellable = true) private void skyblocker$renderStatusBars(DrawContext context, CallbackInfo ci) { if (!Utils.isOnSkyblock()) return; @@ -91,9 +93,27 @@ public abstract class InGameHudMixin { ci.cancel(); } + @Inject(method = "renderHealthBar", at = @At(value = "HEAD"), cancellable = true) + private void skyblocker$renderHealthBar(DrawContext context, PlayerEntity player, int x, int y, int lines, int regeneratingHeartIndex, float maxHealth, int lastHealth, int health, int absorption, boolean blinking, CallbackInfo ci) { + if (!Utils.isOnSkyblock()) return; + if (FancyStatusBars.isEnabled() && FancyStatusBars.isHealthFancyBarVisible()) ci.cancel(); + } + + @WrapOperation(method = "renderStatusBars" , at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;getScaledWindowHeight()I")) + private int skyblocker$moveHealthDown(DrawContext instance, Operation<Integer> original) { + if (Utils.isOnSkyblock() && FancyStatusBars.isEnabled() && !FancyStatusBars.isHealthFancyBarVisible() && FancyStatusBars.isExperienceFancyBarVisible()) return original.call(instance) + 6; + else return original.call(instance); + } + + @Inject(method = "renderArmor", at = @At("HEAD"), cancellable = true) + private static void skyblocker$renderStatusBars(DrawContext context, PlayerEntity player, int i, int j, int k, int x, CallbackInfo ci) { + if (!Utils.isOnSkyblock()) return; + if (FancyStatusBars.isEnabled()) ci.cancel(); + } + @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) private void skyblocker$renderMountHealth(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars && !Utils.isInTheRift()) + if (Utils.isOnSkyblock() && FancyStatusBars.isEnabled()) ci.cancel(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarPositioner.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarPositioner.java index a72b955b..00b09dcf 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarPositioner.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarPositioner.java @@ -156,7 +156,7 @@ public class BarPositioner { SizeRule.freeSize(25, 2, 6)), HOTBAR_TOP(true, true, - (scaledWidth, scaledHeight) -> new ScreenPos(scaledWidth / 2 - 91, scaledHeight - 23), + (scaledWidth, scaledHeight) -> new ScreenPos(scaledWidth / 2 - 91, scaledHeight - (FancyStatusBars.isExperienceFancyBarVisible() ? 23 : 35)), SizeRule.targetSize(12, 182, 2), anchorPosition -> new ScreenRect(anchorPosition.x(), anchorPosition.y() - 20, 182, 20)), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java index 37376e76..72c1370c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java @@ -41,6 +41,16 @@ public class FancyStatusBars { public static BarPositioner barPositioner = new BarPositioner(); public static Map<String, StatusBar> statusBars = new HashMap<>(); + public static boolean isHealthFancyBarVisible() { + StatusBar health = statusBars.get("health"); + return health.anchor != null || health.inMouse; + } + + public static boolean isExperienceFancyBarVisible() { + StatusBar experience = statusBars.get("experience"); + return experience.anchor != null || experience.inMouse; + } + public static void init() { statusBars.put("health", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "bars/icons/health"), new Color[]{new Color(255, 0, 0), new Color(255, 220, 0)}, @@ -177,6 +187,12 @@ public class FancyStatusBars { ScreenPos anchorPosition = barAnchor.getAnchorPosition(width, height); BarPositioner.SizeRule sizeRule = barAnchor.getSizeRule(); + int targetSize = sizeRule.targetSize(); + boolean visibleHealthMove = barAnchor == BarPositioner.BarAnchor.HOTBAR_TOP && !isHealthFancyBarVisible(); + if (visibleHealthMove) { + targetSize /= 2; + } + if (sizeRule.isTargetSize()) { for (int row = 0; row < barPositioner.getRowCount(barAnchor); row++) { LinkedList<StatusBar> barRow = barPositioner.getRow(barAnchor, row); @@ -188,13 +204,13 @@ public class FancyStatusBars { totalSize += (statusBar.size = Math.clamp(statusBar.size, sizeRule.minSize(), sizeRule.maxSize())); whileLoop: - while (totalSize != sizeRule.targetSize()) { - if (totalSize > sizeRule.targetSize()) { + while (totalSize != targetSize) { + if (totalSize > targetSize) { for (StatusBar statusBar : barRow) { if (statusBar.size > sizeRule.minSize()) { statusBar.size--; totalSize--; - if (totalSize == sizeRule.targetSize()) break whileLoop; + if (totalSize == targetSize) break whileLoop; } } } else { @@ -202,7 +218,7 @@ public class FancyStatusBars { if (statusBar.size < sizeRule.maxSize()) { statusBar.size++; totalSize++; - if (totalSize == sizeRule.targetSize()) break whileLoop; + if (totalSize == targetSize) break whileLoop; } } } @@ -219,10 +235,12 @@ public class FancyStatusBars { // Update the positions float widthPerSize; if (sizeRule.isTargetSize()) - widthPerSize = (float) sizeRule.totalWidth() / sizeRule.targetSize(); + widthPerSize = (float) sizeRule.totalWidth() / targetSize; else widthPerSize = sizeRule.widthPerSize(); + if (visibleHealthMove) widthPerSize /= 2; + int currSize = 0; int rowSize = barRow.size(); for (int i = 0; i < rowSize; i++) { @@ -243,7 +261,7 @@ public class FancyStatusBars { statusBar.size = Math.clamp(statusBar.size, sizeRule.minSize(), sizeRule.maxSize()); float x = barAnchor.isRight() ? - anchorPosition.x() + currSize * widthPerSize : + anchorPosition.x() + (visibleHealthMove ? sizeRule.totalWidth() / 2.f : 0) + currSize * widthPerSize : anchorPosition.x() - currSize * widthPerSize - statusBar.size * widthPerSize; statusBar.setX(MathHelper.ceil(x) + offsetX); @@ -263,9 +281,13 @@ public class FancyStatusBars { } } + public static boolean isEnabled() { + return SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars && !Utils.isInTheRift(); + } + public boolean render(DrawContext context, int scaledWidth, int scaledHeight) { var player = client.player; - if (!SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars || player == null || Utils.isInTheRift()) + if (!isEnabled() || player == null) return false; Collection<StatusBar> barCollection = statusBars.values(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java index f8109852..467691fd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java @@ -93,7 +93,7 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { public float fill = 0; public float overflowFill = 0; - public boolean ghost = false; + public boolean inMouse = false; private Object value = ""; @@ -119,7 +119,7 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (width <= 0) return; // half works lol. only puts transparency on the filler of the bar - if (ghost) context.setShaderColor(1f, 1f, 1f, 0.25f); + if (inMouse) context.setShaderColor(1f, 1f, 1f, 0.25f); switch (iconPosition) { case LEFT -> context.drawGuiTexture(icon, x, y, 9, 9); case RIGHT -> context.drawGuiTexture(icon, x + width - 9, y, 9, 9); @@ -134,7 +134,7 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { if (hasOverflow && overflowFill > 0) { RenderHelper.renderNineSliceColored(context, BAR_FILL, barX + 1, y + 2, (int) ((barWith - 2) * overflowFill), 5, colors[1]); } - if (ghost) context.setShaderColor(1f, 1f, 1f, 1f); + if (inMouse) context.setShaderColor(1f, 1f, 1f, 1f); //context.drawText(MinecraftClient.getInstance().textRenderer, gridX + " " + gridY + " s:" + size , x, y-9, Colors.WHITE, true); } @@ -164,19 +164,19 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { int temp_x = x; int temp_y = y; int temp_width = width; - boolean temp_ghost = ghost; + boolean temp_ghost = inMouse; x = mouseX; y = mouseY; width = 100; - ghost = false; + inMouse = false; render(context, mouseX, mouseY, delta); x = temp_x; y = temp_y; width = temp_width; - ghost = temp_ghost; + inMouse = temp_ghost; } // GUI shenanigans diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java index d1009a25..df072710 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java @@ -277,7 +277,7 @@ public class StatusBarsConfigScreen extends Screen { public void removed() { super.removed(); FancyStatusBars.statusBars.values().forEach(statusBar -> statusBar.setOnClick(null)); - if (cursorBar != null) cursorBar.ghost = false; + if (cursorBar != null) cursorBar.inMouse = false; FancyStatusBars.updatePositions(); assert client != null; GLFW.glfwSetCursor(client.getWindow().getHandle(), 0); @@ -292,7 +292,7 @@ public class StatusBarsConfigScreen extends Screen { private void onBarClick(StatusBar statusBar, int button, int mouseX, int mouseY) { if (button == 0) { cursorBar = statusBar; - cursorBar.ghost = true; + cursorBar.inMouse = true; if (statusBar.anchor != null) FancyStatusBars.barPositioner.removeBar(statusBar.anchor, statusBar.gridY, statusBar); FancyStatusBars.updatePositions(); @@ -321,7 +321,7 @@ public class StatusBarsConfigScreen extends Screen { @Override public boolean mouseReleased(double mouseX, double mouseY, int button) { if (cursorBar != null) { - cursorBar.ghost = false; + cursorBar.inMouse = false; cursorBar = null; FancyStatusBars.updatePositions(); checkNullAnchor(FancyStatusBars.statusBars.values()); |