diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java | 3 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java | 7 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/mixin/accessor/WindowAccessor.java | 11 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/FancyStatusBars.java | 49 | ||||
-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 | ||||
-rw-r--r-- | src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/defense.png | bin | 0 -> 198 bytes | |||
-rw-r--r-- | src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/experience.png | bin | 0 -> 243 bytes | |||
-rw-r--r-- | src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/health.png | bin | 0 -> 197 bytes | |||
-rw-r--r-- | src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/intelligence.png | bin | 0 -> 194 bytes | |||
-rw-r--r-- | src/main/resources/skyblocker.mixins.json | 1 |
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 Binary files differnew file mode 100644 index 00000000..4dd13141 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/defense.png 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 Binary files differnew file mode 100644 index 00000000..c1ba7d0c --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/experience.png 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 Binary files differnew file mode 100644 index 00000000..a92f80d0 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/health.png 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 Binary files differnew file mode 100644 index 00000000..0f3872b9 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/bars/icons/intelligence.png 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" ], |