aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java44
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarPositioner.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java42
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java6
5 files changed, 70 insertions, 36 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..e69287da 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
@@ -5,8 +5,8 @@ import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.fancybars.FancyStatusBars;
import de.hysky.skyblocker.events.HudRenderEvents;
+import de.hysky.skyblocker.skyblock.fancybars.FancyStatusBars;
import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
import de.hysky.skyblocker.skyblock.item.ItemCooldowns;
import de.hysky.skyblocker.skyblock.item.ItemProtection;
@@ -22,10 +22,6 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
-
-import java.util.function.Supplier;
-import java.util.regex.Pattern;
-
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -36,6 +32,9 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import java.util.function.Supplier;
+import java.util.regex.Pattern;
+
@Environment(EnvType.CLIENT)
@Mixin(InGameHud.class)
public abstract class InGameHudMixin {
@@ -79,21 +78,34 @@ 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() && FancyStatusBars.isEnabled() && 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;renderHealthBar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/entity/player/PlayerEntity;IIIIFIIIZ)V", shift = At.Shift.AFTER), cancellable = true)
private void skyblocker$renderStatusBars(DrawContext context, CallbackInfo ci) {
- if (!Utils.isOnSkyblock())
- return;
- if (statusBars.render(context, context.getScaledWindowWidth(), context.getScaledWindowHeight()))
- ci.cancel();
+ if (Utils.isOnSkyblock() && statusBars.render(context, context.getScaledWindowWidth(), context.getScaledWindowHeight())) 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();
+ }
+
+ @ModifyExpressionValue(method = "renderStatusBars", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;getScaledWindowHeight()I"))
+ private int skyblocker$moveHealthDown(int original) {
+ return Utils.isOnSkyblock() && FancyStatusBars.isEnabled() && !FancyStatusBars.isHealthFancyBarVisible() && FancyStatusBars.isExperienceFancyBarVisible() ? original + 6 : original;
+ }
+
+ @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() && 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();
}
@@ -124,16 +136,16 @@ public abstract class InGameHudMixin {
@ModifyArg(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 2))
private LayeredDrawer.Layer skyblocker$afterMainHud(LayeredDrawer.Layer mainHudLayer) {
return (context, tickDelta) -> {
- mainHudLayer.render(context, tickDelta);
- HudRenderEvents.AFTER_MAIN_HUD.invoker().onRender(context, tickDelta);
+ mainHudLayer.render(context, tickDelta);
+ HudRenderEvents.AFTER_MAIN_HUD.invoker().onRender(context, tickDelta);
};
}
@ModifyArg(method = "<init>", slice = @Slice(from = @At(value = "NEW", target = "Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 1)), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 5))
private LayeredDrawer.Layer skyblocker$beforeChat(LayeredDrawer.Layer beforeChatLayer) {
return (context, tickDelta) -> {
- HudRenderEvents.BEFORE_CHAT.invoker().onRender(context, tickDelta);
- beforeChatLayer.render(context, tickDelta);
+ HudRenderEvents.BEFORE_CHAT.invoker().onRender(context, tickDelta);
+ beforeChatLayer.render(context, tickDelta);
};
}
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 141a48ed..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,17 +281,21 @@ 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();
- for (StatusBar value : barCollection) {
- value.render(context, -1, -1, client.getLastFrameDuration());
+ for (StatusBar statusBar : barCollection) {
+ if (statusBar.anchor != null) statusBar.render(context, -1, -1, client.getLastFrameDuration());
}
for (StatusBar statusBar : barCollection) {
- if (statusBar.showText()) statusBar.renderText(context);
+ if (statusBar.anchor != null && statusBar.showText()) statusBar.renderText(context);
}
StatusBarTracker.Resource health = statusBarTracker.getHealth();
statusBars.get("health").updateValues(health.value() / (float) health.max(), health.overflow() / (float) health.max(), health.value());
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());