diff options
author | vicisacat <victor.branchu@gmail.com> | 2024-04-13 00:00:50 +0200 |
---|---|---|
committer | vicisacat <victor.branchu@gmail.com> | 2024-04-20 16:09:49 +0200 |
commit | 3581365e654306cf08d0c4284ddfa454befd519d (patch) | |
tree | 57711435d7d85d7288a839f4cce8ecd922e330a0 /src/main/java/de/hysky/skyblocker/skyblock/fancybars | |
parent | 94f72e832a2c166c8bbd61480b75803f4c6b1071 (diff) | |
download | Skyblocker-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.java | 26 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java | 78 |
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 |