aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/fancybars
diff options
context:
space:
mode:
authorvicisacat <victor.branchu@gmail.com>2024-04-13 00:00:50 +0200
committervicisacat <victor.branchu@gmail.com>2024-04-20 16:09:49 +0200
commit3581365e654306cf08d0c4284ddfa454befd519d (patch)
tree57711435d7d85d7288a839f4cce8ecd922e330a0 /src/main/java/de/hysky/skyblocker/skyblock/fancybars
parent94f72e832a2c166c8bbd61480b75803f4c6b1071 (diff)
downloadSkyblocker-3581365e654306cf08d0c4284ddfa454befd519d.tar.gz
Skyblocker-3581365e654306cf08d0c4284ddfa454befd519d.tar.bz2
Skyblocker-3581365e654306cf08d0c4284ddfa454befd519d.zip
ssergorp
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/fancybars')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java26
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java78
2 files changed, 82 insertions, 22 deletions
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 3b6453a0..6d321a90 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java
@@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.fancybars;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.utils.render.RenderHelper;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.*;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.widget.ClickableWidget;
@@ -36,6 +37,8 @@ public class StatusBar implements Widget, Drawable, Element, Selectable {
public float fill = 0;
public float overflowFill = 0;
+ private Object text = "";
+
private int x = 0;
private int y = 0;
@@ -57,12 +60,32 @@ public class StatusBar implements Widget, Drawable, Element, Selectable {
context.drawGuiTexture(icon, x, y, 9, 9);
context.drawGuiTexture(BAR_BACK, x + 10, y + 1, width - 10, 7);
RenderHelper.renderNineSliceColored(context, BAR_FILL, x + 11, y + 2, (int) ((width - 12) * fill), 5, colors[0]);
- if (hasOverflow) {
+ if (hasOverflow && overflowFill > 0) {
RenderHelper.renderNineSliceColored(context, BAR_FILL, x + 11, y + 2, (int) ((width - 12) * overflowFill), 5, colors[1]);
}
context.drawText(MinecraftClient.getInstance().textRenderer, gridX + " ; " + gridY , x, y-9, Colors.WHITE, true);
}
+ public void updateValues(float fill, float overflowFill, Object text) {
+ this.text = text;
+ this.fill = fill;
+ this.overflowFill = overflowFill;
+ }
+
+ public void renderText(DrawContext context) {
+ TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+ String text = this.text.toString();
+ int x = this.x + 11 + (width - textRenderer.getWidth(text) - 12) / 2;
+ int y = this.y - 3;
+
+ final int[] offsets = new int[]{-1, 1};
+ for (int i : offsets) {
+ context.drawText(textRenderer, text, x + i, y, 0, false);
+ context.drawText(textRenderer, text, x, y + i, 0, false);
+ }
+ context.drawText(textRenderer, text, x, y, (textColor == null ? colors[0]: textColor).getRGB(), false);
+ }
+
public void renderCursor(DrawContext context, int mouseX, int mouseY, float delta) {
int temp_x = x;
int temp_y = y;
@@ -161,6 +184,7 @@ public class StatusBar implements Widget, Drawable, Element, Selectable {
@Override
public String toString() {
return new ToStringBuilder(this)
+ .append("name", name)
.append("gridX", gridX)
.append("gridY", gridY)
.append("size", size)
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 23b5b71c..8c659029 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java
@@ -1,6 +1,8 @@
package de.hysky.skyblocker.skyblock.fancybars;
+import de.hysky.skyblocker.mixin.accessor.WindowAccessor;
import de.hysky.skyblocker.skyblock.FancyStatusBars;
+import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.ScreenPos;
import net.minecraft.client.gui.ScreenRect;
@@ -8,8 +10,10 @@ import net.minecraft.client.gui.navigation.NavigationAxis;
import net.minecraft.client.gui.navigation.NavigationDirection;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;
+import net.minecraft.util.Colors;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
+import org.lwjgl.glfw.GLFW;
import java.util.Collection;
import java.util.HashMap;
@@ -20,6 +24,8 @@ public class StatusBarsConfigScreen extends Screen {
private static final Identifier HOTBAR_TEXTURE = new Identifier("hud/hotbar");
+ private final long RESIZE_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_HRESIZE_CURSOR);
+
private final Map<ScreenRect, int[]> meaningFullName = new HashMap<>();
private @Nullable StatusBar cursorBar = null;
@@ -31,6 +37,7 @@ public class StatusBarsConfigScreen extends Screen {
private final int[] currentCoords = new int[]{0, 0};
+ @SuppressWarnings("UnreachableCode") // IntelliJ big stupid
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
for (ScreenRect screenRect : meaningFullName.keySet()) {
@@ -38,9 +45,14 @@ public class StatusBarsConfigScreen extends Screen {
}
super.render(context, mouseX, mouseY, delta);
context.drawGuiTexture(HOTBAR_TEXTURE, width / 2 - 91, height - 22, 182, 22);
+ ScreenRect mouseRect = new ScreenRect(new ScreenPos(mouseX - 1, mouseY - 1), 3, 3);
+ assert client != null;
+ WindowAccessor window = (WindowAccessor) (Object) client.getWindow();
+ assert window != null;
if (cursorBar != null) {
cursorBar.renderCursor(context, mouseX, mouseY, delta);
- ScreenRect mouseRect = new ScreenRect(new ScreenPos(mouseX - 1, mouseY - 1), 3, 3);
+ context.drawText(textRenderer, currentCoords[0] + " " + currentCoords[1], 100, 5, Colors.WHITE, true);
+
if (FancyStatusBars.barGrid.getTopSize() == 0 && topBarZone.overlaps(mouseRect) && currentCoords[1] != 1) {
FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY);
@@ -63,36 +75,43 @@ public class StatusBarsConfigScreen extends Screen {
currentCoords[1] = -1;
FancyStatusBars.updatePositions();
} else rectLoop:for (ScreenRect screenRect : meaningFullName.keySet()) {
- for (NavigationDirection value : NavigationDirection.values()) {
- boolean overlaps = screenRect.getBorder(value).add(value).overlaps(mouseRect);
+ for (NavigationDirection direction : NavigationDirection.values()) {
+ boolean overlaps = screenRect.getBorder(direction).add(direction).overlaps(mouseRect);
if (overlaps) {
int[] ints = meaningFullName.get(screenRect);
- if (ints[0] != currentCoords[0] || ints[1] != currentCoords[1]) {
- currentCoords[0] = ints[0];
- currentCoords[1] = ints[1];
+ int offsetX = 0;
+ int offsetY = 0;
+ final boolean vertical = direction.getAxis().equals(NavigationAxis.VERTICAL);
+ if (vertical) {
+ if (!direction.isPositive()) {
+ offsetY = ints[1] > 0 ? 1 : 0;
+ } else {
+ offsetY = ints[1] > 0 ? 0 : -1;
+ }
+ } else {
+ if (direction.isPositive()) {
+ offsetX = ints[0] > 0 ? 1 : 0;
+ } else {
+ offsetX = ints[0] > 0 ? 0 : -1;
+ }
+ }
+ context.drawText(textRenderer, ints[0] + offsetX + " " + ints[1] + offsetY, 100, 15, Colors.WHITE, true);
+ if (ints[0] + offsetX != currentCoords[0] || ints[1] + offsetY != currentCoords[1]) {
+ currentCoords[0] = ints[0] + offsetX;
+ currentCoords[1] = ints[1] + offsetY;
System.out.println("Moving " + cursorBar);
System.out.println(ints[0] + " " + ints[1]);
FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY);
- int offset;
- if (value.getAxis().equals(NavigationAxis.VERTICAL)) {
- if (!value.isPositive()) {
- offset = ints[1] > 0 ? 1 : 0;
- } else {
- offset = ints[1] > 0 ? 0 : -1;
- }
- FancyStatusBars.barGrid.addRow(ints[1] + offset, ints[0] > 0);
- FancyStatusBars.barGrid.add(ints[0] < 0 ? -1 : 1, ints[1] + offset, cursorBar);
+ if (vertical) {
+
+ FancyStatusBars.barGrid.addRow(ints[1] + offsetY, ints[0] > 0);
+ FancyStatusBars.barGrid.add(ints[0] < 0 ? -1 : 1, ints[1] + offsetY, cursorBar);
} else {
- if (value.isPositive()) {
- offset = ints[0] > 0 ? 1 : 0;
- } else {
- offset = ints[0] > 0 ? 0 : -1;
- }
- FancyStatusBars.barGrid.add(ints[0] + offset, ints[1], cursorBar);
+ FancyStatusBars.barGrid.add(ints[0] + offsetX, ints[1], cursorBar);
}
FancyStatusBars.updatePositions();
System.out.println("After " + cursorBar);
@@ -101,6 +120,19 @@ public class StatusBarsConfigScreen extends Screen {
}
}
}
+ } else {
+ rectLoop:for (ScreenRect screenRect : meaningFullName.keySet()) {
+ for (NavigationDirection direction : new NavigationDirection[]{NavigationDirection.LEFT, NavigationDirection.RIGHT}) {
+ boolean overlaps = screenRect.getBorder(direction).add(direction).overlaps(mouseRect);
+
+ if (overlaps) {
+ GLFW.glfwSetCursor(window.getHandle(), RESIZE_CURSOR);
+ break rectLoop;
+ } else {
+ GLFW.glfwSetCursor(window.getHandle(), 0);
+ }
+ }
+ }
}
}
@@ -114,6 +146,7 @@ public class StatusBarsConfigScreen extends Screen {
Collection<StatusBar> values = FancyStatusBars.statusBars.values();
values.forEach(this::setup);
checkZeroCoordinates(values);
+ updateScreenRects();
topBarZone = new ScreenRect(width / 2 - 91, height - 22 - 15, 182, 15);
bottomLeftBarZone = new ScreenRect(width / 2 - 91 - 20, height - 22, 20, 22);
bottomRightBarZone = new ScreenRect(width / 2 + 91, height - 22, 20, 22);
@@ -136,11 +169,14 @@ public class StatusBarsConfigScreen extends Screen {
}
}
+ @SuppressWarnings("UnreachableCode")
@Override
public void removed() {
super.removed();
FancyStatusBars.statusBars.values().forEach(statusBar -> statusBar.setOnClick(null));
FancyStatusBars.updatePositions();
+ GLFW.glfwSetCursor(((WindowAccessor) (Object) client.getWindow()).getHandle(), 0);
+ GLFW.glfwDestroyCursor(RESIZE_CURSOR); // Does it explode if I don't do that?? idk aaaaaaaaa
}
@Override