aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java105
1 files changed, 88 insertions, 17 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
index c463ecb5..48ef3251 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
@@ -16,25 +16,38 @@ public class FancyStatusBars extends DrawableHelper {
private final StatusBarTracker statusBarTracker = SkyblockerMod.getInstance().statusBarTracker;
private final StatusBar[] bars = new StatusBar[]{
- new StatusBar(0, 16733525, 2),
- new StatusBar(1, 5636095, 2),
- new StatusBar(2, 12106180, 1),
- new StatusBar(3, 8453920, 1),
+ new StatusBar(0, 16733525, 2), // Health Bar
+ new StatusBar(1, 5636095, 2), // Intelligence Bar
+ new StatusBar(2, 12106180, 1), // Defence Bar
+ new StatusBar(3, 8453920, 1), // Experience Bar
};
- private int left;
- private int top;
+ // Positions to show the bars
+ // 0: Hotbar Layer 1, 1: Hotbar Layer 2, 2: Right of hotbar
+ private final int[] anchorsX = new int[3];
+ private final int[] anchorsY = new int[3];
+
+ public FancyStatusBars() {
+ moveBar(0, 0);
+ moveBar(1, 0);
+ moveBar(2, 0);
+ moveBar(3, 0);
+ }
private int fill(int value, int max) {
- return (32 * value - 1) / max;
+ return (100 * value) / max;
}
public boolean render(MatrixStack matrices, int scaledWidth, int scaledHeight) {
var player = client.player;
if (!SkyblockerConfig.get().general.bars.enableBars || player == null)
return false;
- left = scaledWidth / 2 - 91;
- top = scaledHeight - 35;
+ anchorsX[0] = scaledWidth / 2 - 91;
+ anchorsY[0] = scaledHeight - 33;
+ anchorsX[1] = anchorsX[0];
+ anchorsY[1] = anchorsY[0] - 13;
+ anchorsX[2] = (scaledWidth / 2 + 91) + 2;
+ anchorsY[2] = scaledHeight - 16;
bars[0].update(statusBarTracker.getHealth());
bars[1].update(statusBarTracker.getMana());
@@ -52,19 +65,64 @@ public class FancyStatusBars extends DrawableHelper {
return true;
}
+ public void moveBar(int bar, int location) {
+ // Set the bar to the new anchor
+ bars[bar].anchorNum = location;
+
+ // Count how many bars are in each location
+ int layer1Count = 0, layer2Count = 0, rightCount = 0;
+ for (int i = 0; i < 4; i++) {
+ switch (bars[i].anchorNum) {
+ case 0:
+ layer1Count++;
+ break;
+ case 1:
+ layer2Count++;
+ break;
+ case 2:
+ rightCount++;
+ break;
+ }
+ }
+
+ // Set the bars width and offsetX according to their anchor and how many bars are on that layer
+ int adjustedLayer1Count = 0, adjustedLayer2Count = 0, adjustedRightCount = 0;
+ for (int i = 0; i < 4; i++) {
+ switch (bars[i].anchorNum) {
+ case 0:
+ bars[i].bar_width = (172 - ((layer1Count - 1) * 11)) / layer1Count;
+ bars[i].offsetX = adjustedLayer1Count * (bars[i].bar_width + 11 + (layer1Count == 3 ? 0 : 1));
+ adjustedLayer1Count++;
+ break;
+ case 1:
+ bars[i].bar_width = (172 - ((layer2Count - 1) * 11)) / layer2Count;
+ bars[i].offsetX = adjustedLayer2Count * (bars[i].bar_width + 11 + (layer2Count == 3 ? 0 : 1));
+ adjustedLayer2Count++;
+ break;
+ case 2:
+ bars[i].bar_width = 50;
+ bars[i].offsetX = adjustedRightCount * (50 + 11);
+ adjustedRightCount++;
+ break;
+ }
+ }
+ }
+
private class StatusBar {
public final int[] fill;
- private final int offsetX;
+ public int offsetX;
private final int v;
private final int text_color;
+ public int anchorNum;
+ public int bar_width;
public Object text;
private StatusBar(int i, int textColor, int fillNum) {
- this.offsetX = i * 46;
this.v = i * 9;
this.text_color = textColor;
this.fill = new int[fillNum];
- this.fill[0] = 33;
+ this.fill[0] = 100;
+ this.anchorNum = 0;
this.text = "";
}
@@ -77,16 +135,29 @@ public class FancyStatusBars extends DrawableHelper {
}
public void draw(MatrixStack matrices) {
- drawTexture(matrices, left + offsetX, top, 0, v, 43, 9);
- for (int i = 0; i < fill.length; i++)
- drawTexture(matrices, left + offsetX + 11, top, 43 + i * 31, v, fill[i], 9);
+ // Draw the icon for the bar
+ drawTexture(matrices, anchorsX[anchorNum] + offsetX, anchorsY[anchorNum], 0, v, 9, 9);
+
+ // Draw the background for the bar
+ drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10, anchorsY[anchorNum], 10, v, 2, 9);
+ for (int i = 2; i < bar_width - 2; i++)
+ drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10 + i, anchorsY[anchorNum], 12, v, 1, 9);
+ drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10 + bar_width - 2, anchorsY[anchorNum], 41, v, 2, 9);
+
+ // Draw the filled part of the bar
+ for (int i = 0; i < fill.length; i++) {
+ for (int j = (bar_width - 3); j >= 0; j--) {
+ if ( Math.max((j * 100)/(bar_width - 3), 1) > fill[i]) continue;
+ drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], ((j == 0 || j == bar_width - 3) ? 43 : 44) + i * 31, v, 1, 9);
+ }
+ }
}
public void drawText(MatrixStack matrices) {
TextRenderer textRenderer = client.textRenderer;
String text = this.text.toString();
- int x = left + this.offsetX + 11 + (33 - textRenderer.getWidth(text)) / 2;
- int y = top - 3;
+ int x = anchorsX[anchorNum] + this.offsetX + 11 + (bar_width - textRenderer.getWidth(text)) / 2;
+ int y = anchorsY[anchorNum] - 3;
final int[] offsets = new int[]{-1, 1};
for (int i : offsets) {