aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorvicisacat <victor.branchu@gmail.com>2024-04-10 18:19:29 +0200
committervicisacat <victor.branchu@gmail.com>2024-04-20 16:09:48 +0200
commit3fe321f463fc728374e6f3423c6ac9eef31be184 (patch)
tree01ae764c36e17508e5b57fb41513b6ae8ca5593d /src/main
parenta6ac00af3844d5f59c1f528a901c94e91e58889d (diff)
downloadSkyblocker-3fe321f463fc728374e6f3423c6ac9eef31be184.tar.gz
Skyblocker-3fe321f463fc728374e6f3423c6ac9eef31be184.tar.bz2
Skyblocker-3fe321f463fc728374e6f3423c6ac9eef31be184.zip
more progress
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java28
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/BarGrid.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBar.java38
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/fancybars/StatusBarsConfigScreen.java39
5 files changed, 98 insertions, 11 deletions
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<String, StatusBar> 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<StatusBar> 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<StatusBar> 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<StatusBar> 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<StatusBar> 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<ScreenRect, int[]> 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);
+ }
}