aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/accessor/WindowAccessor.java11
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java49
-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
-rw-r--r--src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/defense.pngbin0 -> 198 bytes
-rw-r--r--src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/experience.pngbin0 -> 243 bytes
-rw-r--r--src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/health.pngbin0 -> 197 bytes
-rw-r--r--src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/intelligence.pngbin0 -> 194 bytes
-rw-r--r--src/main/resources/skyblocker.mixins.json1
11 files changed, 139 insertions, 36 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
index 86405f58..20124e4b 100644
--- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
@@ -164,6 +164,9 @@ public class SkyblockerConfig {
public boolean fancyCraftingTable = true;
@SerialEntry
+ public boolean oldBars = false;
+
+ @SerialEntry
public boolean backpackPreviewWithoutShift = false;
@SerialEntry
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
index dbfbbb10..0c6a3d75 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
@@ -28,6 +28,13 @@ public class GeneralCategory {
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
+ .name(Text.literal("old bars"))
+ .binding(defaults.general.oldBars,
+ () -> config.general.oldBars,
+ newValue -> config.general.oldBars = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
.name(Text.translatable("text.autoconfig.skyblocker.option.general.acceptReparty"))
.binding(defaults.general.acceptReparty,
() -> config.general.acceptReparty,
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/WindowAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/WindowAccessor.java
new file mode 100644
index 00000000..ffbf3487
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/WindowAccessor.java
@@ -0,0 +1,11 @@
+package de.hysky.skyblocker.mixin.accessor;
+
+import net.minecraft.client.util.Window;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(Window.class)
+public interface WindowAccessor {
+ @Accessor("handle")
+ long getHandle();
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java
index a29d3f60..1a582863 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java
@@ -1,7 +1,5 @@
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;
@@ -10,6 +8,7 @@ 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 jdk.jshell.EvalException;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.minecraft.client.MinecraftClient;
@@ -20,7 +19,7 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import java.awt.*;
-import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -48,14 +47,13 @@ public class FancyStatusBars {
public static BarGrid barGrid = new BarGrid();
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, "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() {
+ statusBars.put("health", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "bars/icons/health"), new Color[]{new Color(255, 0, 0), new Color(255, 220, 0)}, true, null, "health"));
+ statusBars.put("intelligence", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "bars/icons/intelligence"), new Color[]{new Color(0, 255, 255), new Color(180, 0, 255)}, true, null, "intelligence"));
+ statusBars.put("defense", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "bars/icons/defense"), new Color[]{new Color(255, 255, 255)}, false, null, "defense"));
+ statusBars.put("experience", new StatusBar(new Identifier(SkyblockerMod.NAMESPACE, "bars/icons/experience"), new Color[]{new Color(100, 220, 70)}, false, null, "experience"));
+
+
barGrid.addRow(1, false);
barGrid.add(1, 1, statusBars.get("health"));
barGrid.add(2, 1, statusBars.get("intelligence"));
@@ -95,14 +93,18 @@ public class FancyStatusBars {
whileLoop: while (totalSize != 12) {
if (totalSize > 12) {
for (StatusBar bar : row) {
- bar.size--;
- totalSize--;
+ if (bar.size > 2) { // TODO: this can cause infinite looping if we add more than 6 bars
+ bar.size--;
+ totalSize--;
+ }
if (totalSize == 12) break whileLoop;
}
} else {
for (StatusBar bar : row) {
- bar.size++;
- totalSize++;
+ if (bar.size < 12) {
+ bar.size++;
+ totalSize++;
+ }
if (totalSize == 12) break whileLoop;
}
}
@@ -177,6 +179,25 @@ public class FancyStatusBars {
var player = client.player;
if (!SkyblockerConfigManager.get().general.bars.enableBars || player == null || Utils.isInTheRift())
return false;
+
+ if (!SkyblockerConfigManager.get().general.oldBars) {
+ Collection<StatusBar> barCollection = statusBars.values();
+ for (StatusBar value : barCollection) {
+ value.render(context, -1, -1, client.getLastFrameDuration());
+ }
+ for (StatusBar statusBar : barCollection) {
+ statusBar.renderText(context);
+ }
+ StatusBarTracker.Resource health = statusBarTracker.getHealth();
+ statusBars.get("health").updateValues(health.value() / (float) health.max(), health.overflow() / (float) health.max(), health.value());
+
+ StatusBarTracker.Resource intelligence = statusBarTracker.getMana();
+ statusBars.get("intelligence").updateValues(intelligence.value() / (float) intelligence.max(), intelligence.overflow() / (float) intelligence.max(), intelligence.value());
+ int defense = statusBarTracker.getDefense();
+ statusBars.get("defense").updateValues(defense / (defense + 100.f), 0, defense);
+ statusBars.get("experience").updateValues(player.experienceProgress, 0, player.experienceLevel);
+ return true;
+ }
anchorsX[0] = scaledWidth / 2 - 91;
anchorsY[0] = scaledHeight - 33;
anchorsX[1] = anchorsX[0];
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
diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/defense.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/defense.png
new file mode 100644
index 00000000..4dd13141
--- /dev/null
+++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/defense.png
Binary files differ
diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/experience.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/experience.png
new file mode 100644
index 00000000..c1ba7d0c
--- /dev/null
+++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/experience.png
Binary files differ
diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/health.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/health.png
new file mode 100644
index 00000000..a92f80d0
--- /dev/null
+++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/health.png
Binary files differ
diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/intelligence.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/intelligence.png
new file mode 100644
index 00000000..0f3872b9
--- /dev/null
+++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/intelligence.png
Binary files differ
diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json
index 99d9faaa..a483c0f0 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -49,6 +49,7 @@
"accessor.ScreenAccessor",
"accessor.SkullBlockEntityAccessor",
"accessor.SlotAccessor",
+ "accessor.WindowAccessor",
"accessor.WorldRendererAccessor",
"discordipc.ConnectionMixin"
],