From 3fe321f463fc728374e6f3423c6ac9eef31be184 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Wed, 10 Apr 2024 18:19:29 +0200 Subject: more progress --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 1 + .../hysky/skyblocker/skyblock/FancyStatusBars.java | 28 +++++++++++++--- .../skyblocker/skyblock/fancybars/BarGrid.java | 3 +- .../skyblocker/skyblock/fancybars/StatusBar.java | 38 ++++++++++++++++++++- .../skyblock/fancybars/StatusBarsConfigScreen.java | 39 +++++++++++++++++++--- 5 files changed, 98 insertions(+), 11 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index 091e8548..6d86c88d 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -172,6 +172,7 @@ public class SkyblockerMod implements ClientModInitializer { Debug.init(); Kuudra.init(); RenderHelper.init(); + FancyStatusBars.init(); containerSolverManager.init(); statusBarTracker.init(); BeaconHighlighter.init(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java index a5cbab1f..6995c4d2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java @@ -1,11 +1,17 @@ package de.hysky.skyblocker.skyblock; +import com.mojang.brigadier.Command; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.fancybars.BarGrid; import de.hysky.skyblocker.skyblock.fancybars.StatusBar; +import de.hysky.skyblocker.skyblock.fancybars.StatusBarsConfigScreen; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; +import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -43,11 +49,13 @@ public class FancyStatusBars { public static Map statusBars = new HashMap<>(); static { - statusBars.put("health", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(255, 0, 0), new Color(255, 220, 0)}, true, null)); - statusBars.put("intelligence", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(0, 255, 255), new Color(180, 0, 255)}, true, null)); - statusBars.put("defense", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(255, 255, 255)}, false, null)); - statusBars.put("experience", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(100, 220, 70)}, false, null)); + statusBars.put("health", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(255, 0, 0), new Color(255, 220, 0)}, true, null, "health")); + statusBars.put("intelligence", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(0, 255, 255), new Color(180, 0, 255)}, true, null, "intelligence")); + statusBars.put("defense", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(255, 255, 255)}, false, null, "defense")); + statusBars.put("experience", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "temp"), new Color[]{new Color(100, 220, 70)}, false, null, "experience")); + } + public static void init() { barGrid.addRow(1, false); barGrid.add(1, 1, statusBars.get("health")); barGrid.add(2, 1, statusBars.get("intelligence")); @@ -55,6 +63,10 @@ public class FancyStatusBars { barGrid.add(1, 2, statusBars.get("experience")); barGrid.addRow(-1, true); barGrid.add(1, -1, statusBars.get("defense")); + + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register( + ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("bar_test").executes(Scheduler.queueOpenScreenCommand(StatusBarsConfigScreen::new))))); } public static void updatePositions() { @@ -62,6 +74,14 @@ public class FancyStatusBars { final int width = MinecraftClient.getInstance().getWindow().getScaledWidth(); final int height = MinecraftClient.getInstance().getWindow().getScaledHeight(); + for (StatusBar value : statusBars.values()) { + if (value.gridX == 0 || value.gridY == 0) { + value.setX(-1); + value.setY(-1); + value.setWidth(0); + } + } + // THE TOP for (int i = 0; i < barGrid.getTopSize(); i++) { List row = barGrid.getRow(i + 1, false); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarGrid.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarGrid.java index 5e774d4a..93219240 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarGrid.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarGrid.java @@ -33,7 +33,7 @@ public class BarGrid { LinkedList statusBars = (x < 0? bottomLeft: bottomRight).get(Math.abs(y)-1); statusBars.add(Math.min(Math.abs(x)-1, statusBars.size()), bar); bar.gridY = y; - bar.gridX = -(statusBars.indexOf(bar)+1); + bar.gridX = (int) ((statusBars.indexOf(bar)+1) * Math.signum(x)); } } @@ -54,6 +54,7 @@ public class BarGrid { } public void remove(int x, int y) { + System.out.println("Removing x: " + x + " y: " + y); if (y > 0) { if (x < 1) throw new IllegalArgumentException("x can't be negative, x: " + x); LinkedList statusBars = top.get(y-1); 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 a15660f0..3b6453a0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java @@ -2,11 +2,14 @@ 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.gui.*; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.Widget; +import net.minecraft.util.Colors; import net.minecraft.util.Identifier; +import org.apache.commons.lang3.builder.ToStringBuilder; import org.jetbrains.annotations.Nullable; import java.awt.*; @@ -21,6 +24,7 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { private final Color[] colors; private final boolean hasOverflow; private final @Nullable Color textColor; + private final String name; private @Nullable Consumer onClick = null; public int gridX = 0; @@ -35,21 +39,41 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { private int x = 0; private int y = 0; - public StatusBar(Identifier icon, Color[] colors, boolean hasOverflow, @Nullable Color textColor) { + public StatusBar(Identifier icon, Color[] colors, boolean hasOverflow, @Nullable Color textColor, String name) { this.icon = icon; this.colors = colors; this.hasOverflow = hasOverflow; this.textColor = textColor; + this.name = name; + } + + public StatusBar(Identifier icon, Color[] colors, boolean hasOverflow, @Nullable Color textColor){ + this(icon, colors, hasOverflow, textColor, "no name"); } @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { + if (width <= 0) return; 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) { 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 renderCursor(DrawContext context, int mouseX, int mouseY, float delta) { + int temp_x = x; + int temp_y = y; + int temp_width = width; + x = mouseX; + y = mouseY; + width = 100; + render(context, mouseX, mouseY, delta); + x = temp_x; + y = temp_y; + width = temp_width; } // GUI shenanigans @@ -133,4 +157,16 @@ public class StatusBar implements Widget, Drawable, Element, Selectable { public void appendNarrations(NarrationMessageBuilder builder) { } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("gridX", gridX) + .append("gridY", gridY) + .append("size", size) + .append("x", x) + .append("y", y) + .append("width", width) + .toString(); + } } 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 0a08a199..c1605303 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java @@ -21,18 +21,20 @@ public class StatusBarsConfigScreen extends Screen { private final Map meaningFullName = new HashMap<>(); private @Nullable StatusBar cursorBar = null; - protected StatusBarsConfigScreen(Text title) { - super(title); + public StatusBarsConfigScreen() { + super(Text.of("Status Bars Config")); + FancyStatusBars.updatePositions(); } @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { + for (ScreenRect screenRect : meaningFullName.keySet()) { + context.fillGradient(screenRect.position().x(), screenRect.position().y(), screenRect.position().x() + screenRect.width(), screenRect.position().y() + screenRect.height(), 0xFFFF0000, 0xFF0000FF); + } super.render(context, mouseX, mouseY, delta); context.drawGuiTexture(HOTBAR_TEXTURE, width/2 - 91, height-22, 182, 22); if (cursorBar != null) { - cursorBar.setX(mouseX); - cursorBar.setY(mouseY); - cursorBar.render(context, mouseX, mouseY, delta); + cursorBar.renderCursor(context, mouseX, mouseY, delta); mainLoop: for (ScreenRect screenRect : meaningFullName.keySet()) { for (NavigationDirection value : NavigationDirection.values()) { @@ -40,6 +42,8 @@ public class StatusBarsConfigScreen extends Screen { if (overlaps) { int[] ints = meaningFullName.get(screenRect); if (ints[0] != cursorBar.gridX || ints[1] != cursorBar.gridY) { + System.out.println("Moving " + cursorBar); + System.out.println(ints[0] + " " + ints[1]); FancyStatusBars.barGrid.remove(cursorBar.gridX, cursorBar.gridY); if (value.getAxis().equals(NavigationAxis.VERTICAL)) { if (value.isPositive()) { @@ -56,8 +60,11 @@ public class StatusBarsConfigScreen extends Screen { FancyStatusBars.barGrid.add(ints[0], ints[1], cursorBar); } } + FancyStatusBars.updatePositions(); + System.out.println("After " + cursorBar); break mainLoop; } + break; } } } @@ -75,14 +82,36 @@ public class StatusBarsConfigScreen extends Screen { statusBar.setOnClick(this::onClick); } + @Override + public void removed() { + super.removed(); + FancyStatusBars.statusBars.values().forEach(statusBar -> statusBar.setOnClick(null)); + } + + @Override + public boolean shouldPause() { + return false; + } + private void onClick(StatusBar statusBar) { cursorBar = statusBar; meaningFullName.clear(); FancyStatusBars.barGrid.remove(statusBar.gridX, statusBar.gridY); + FancyStatusBars.updatePositions(); FancyStatusBars.statusBars.values().forEach(statusBar1 -> { meaningFullName.put( new ScreenRect(new ScreenPos(statusBar1.getX(), statusBar1.getY()), statusBar1.getWidth(), statusBar1.getHeight()), new int[]{statusBar1.gridX, statusBar1.gridY}); }); } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int button) { + if (cursorBar != null) { + cursorBar = null; + FancyStatusBars.updatePositions(); + return true; + } + return super.mouseReleased(mouseX, mouseY, button); + } } -- cgit