From dffe1da305b3e18dab6777b70ee6954d63899490 Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Tue, 2 Jul 2024 02:22:34 +0200 Subject: configurable default positioning and bug fix --- .../hysky/skyblocker/config/categories/UIAndVisualsCategory.java | 9 +++++++++ .../de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java | 4 ++++ .../skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java | 5 +++-- .../skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java | 5 +++-- .../screenbuilder/pipeline/TopAlignedWidgetPositioner.java | 5 ++--- 5 files changed, 21 insertions(+), 7 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java index d4f39346..97bf40a1 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.config.categories; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.skyblock.fancybars.StatusBarsConfigScreen; +import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; import de.hysky.skyblocker.skyblock.waypoint.WaypointsScreen; import de.hysky.skyblocker.utils.render.title.TitleContainerConfigScreen; import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; @@ -201,6 +202,14 @@ public class UIAndVisualsCategory { () -> config.uiAndVisuals.tabHud.effectsFromFooter, newValue -> config.uiAndVisuals.tabHud.effectsFromFooter = newValue) .build()) + .option(Option.createBuilder() + .name(Text.literal("Default positioning behavior")) + .binding(defaults.uiAndVisuals.tabHud.defaultPositioning, + () -> config.uiAndVisuals.tabHud.defaultPositioning, + newValue -> config.uiAndVisuals.tabHud.defaultPositioning = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build() + ) // TODO Decide what to do with these options .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.plainPlayerNames")) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java index 2982804b..95738542 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.config.configs; +import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; import de.hysky.skyblocker.utils.waypoint.Waypoint; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.minecraft.client.resource.language.I18n; @@ -167,6 +168,9 @@ public class UIAndVisualsConfig { @SerialEntry public boolean plainPlayerNames = false; + @SerialEntry + public ScreenBuilder.DefaultPositioner defaultPositioning = ScreenBuilder.DefaultPositioner.TOP; + @SerialEntry public NameSorting nameSorting = NameSorting.DEFAULT; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java index a1b50bd7..74943e23 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsOrderingTab.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.tabhud.config; import de.hysky.skyblocker.skyblock.tabhud.config.entries.*; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ScreenRect; import net.minecraft.client.gui.tab.Tab; @@ -13,9 +14,7 @@ import net.minecraft.item.Items; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.text.MutableText; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; import java.util.List; @@ -77,6 +76,8 @@ public class WidgetsOrderingTab implements Tab { if (waitingForServer) return; if (client.interactionManager == null || this.client.player == null) return; client.interactionManager.clickSlot(handler.syncId, slot, button, SlotActionType.QUICK_MOVE, this.client.player); + // When moving a widget down it gets stuck sometimes + Scheduler.INSTANCE.schedule(() -> this.waitingForServer = false, 1); waitingForServer = true; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java index 163e9bec..2369d37f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java @@ -5,6 +5,7 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import com.google.gson.JsonObject; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.*; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; import de.hysky.skyblocker.skyblock.tabhud.widget.*; @@ -173,7 +174,7 @@ public class ScreenBuilder { mainTabScreen.clear(); secondaryTabScreen.clear(); - WidgetPositioner newPositioner = DefaultPositioner.CENTERED.getNewPositioner(screenW, screenH); + WidgetPositioner newPositioner = SkyblockerConfigManager.get().uiAndVisuals.tabHud.defaultPositioning.getNewPositioner(screenW, screenH); for (HudWidget widget : ScreenMaster.widgetInstances.values()) { if (widget.shouldRender(location)) { // TabHudWidget has this at false @@ -275,7 +276,7 @@ public class ScreenBuilder { - private enum DefaultPositioner { + public enum DefaultPositioner { TOP(TopAlignedWidgetPositioner::new), CENTERED(CenteredWidgetPositioner::new); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/TopAlignedWidgetPositioner.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/TopAlignedWidgetPositioner.java index 8e033f2a..6c7452c1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/TopAlignedWidgetPositioner.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/TopAlignedWidgetPositioner.java @@ -8,7 +8,6 @@ import java.util.List; public class TopAlignedWidgetPositioner extends WidgetPositioner { - private static final int MAX_COLUMN_HEIGHT = 300; private static final int START_Y = 20; private int totalWidth = 0; @@ -26,7 +25,7 @@ public class TopAlignedWidgetPositioner extends WidgetPositioner { public void positionWidget(HudWidget hudWidget) { widgets.add(hudWidget); - if (currentY + hudWidget.getHeight() > MAX_COLUMN_HEIGHT) { + if (currentY + hudWidget.getHeight() > screenHeight * 0.75f) { totalWidth += currentWidth + ScreenConst.WIDGET_PAD; currentY = START_Y; currentWidth = 0; @@ -39,7 +38,7 @@ public class TopAlignedWidgetPositioner extends WidgetPositioner { @Override public void finalizePositioning() { - int off = (screenWidth - totalWidth) / 2; + int off = (screenWidth - totalWidth - currentWidth) / 2; for (HudWidget widget : widgets) { widget.setX(widget.getX() + off); } -- cgit