diff options
Diffstat (limited to 'src/main/java')
20 files changed, 478 insertions, 164 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java index ce04268a..fab7a172 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.mixins; +import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen; import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.tabhud.TabHud; @@ -29,7 +30,7 @@ public class PlayerListHudMixin { @Inject(at = @At("HEAD"), method = "render", cancellable = true) public void skyblocker$renderTabHud(CallbackInfo info, @Local(argsOnly = true) DrawContext context, @Local(argsOnly = true) int w) { - if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { + if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed() || MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java index 33a2980d..d91b8efe 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -5,6 +5,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import de.hysky.skyblocker.utils.Location; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ProfileComponent; import net.minecraft.item.ItemStack; @@ -42,6 +43,10 @@ public class EndHudWidget extends HudWidget { this.setY(5); this.update(); } + @Override + public boolean shouldRender(Location location) { + return location.equals(Location.THE_END) && SkyblockerConfigManager.get().otherLocations.end.hudEnabled; + } @Override public void updateContent() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java index 3bf72336..15be316a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -9,6 +9,7 @@ import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import de.hysky.skyblocker.utils.ItemUtils; import it.unimi.dsi.fastutil.doubles.DoubleBooleanPair; +import de.hysky.skyblocker.utils.Location; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; @@ -101,4 +102,9 @@ public class FarmingHudWidget extends HudWidget { // Multiply by 60 to convert to hourly and divide by 100 for rounding is combined into multiplying by 0.6. return shouldUseNpcPrice || itemBazaarPrice.rightBoolean() ? FarmingHud.NUMBER_FORMAT.format((int) (price * cropsPerMinute * 0.6) * 100) : "No Data"; } + + @Override + public boolean shouldRender(Location location) { + return location.equals(Location.GARDEN) && SkyblockerConfigManager.get().farming.garden.farmingHud.enableHud; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/PreviewTab.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/PreviewTab.java index 65456c96..29aab7df 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/PreviewTab.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/PreviewTab.java @@ -1,23 +1,59 @@ package de.hysky.skyblocker.skyblock.tabhud.config; +import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder; import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; +import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; +import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.ScreenRect; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.tab.Tab; +import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.GenericContainerScreenHandler; +import net.minecraft.text.MutableText; +import net.minecraft.text.Style; import net.minecraft.text.Text; +import net.minecraft.util.Colors; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; public class PreviewTab implements Tab { private final MinecraftClient client; + private final PreviewWidget previewWidget; + private final WidgetsConfigurationScreen parent; + private ScreenBuilder.Layer currentLayer = ScreenBuilder.Layer.MAIN_TAB; + private final ButtonWidget[] layerButtons; - public PreviewTab(MinecraftClient client) { + public PreviewTab(MinecraftClient client, WidgetsConfigurationScreen parent) { this.client = client; + previewWidget = new PreviewWidget(); + this.parent = parent; + + ScreenBuilder.Layer[] values = ScreenBuilder.Layer.values(); + layerButtons = new ButtonWidget[values.length]; + for (int i = 0; i < values.length; i++) { + ScreenBuilder.Layer layer = values[i]; + layerButtons[i] = ButtonWidget.builder(Text.literal(layer.toString()), button -> { + this.currentLayer = layer; + for (ButtonWidget layerButton : this.layerButtons) { + layerButton.active = !layerButton.equals(button); + } + }) + .size(80, 15) + .build(); + } } @Override @@ -27,15 +63,65 @@ public class PreviewTab implements Tab { @Override public void forEachChild(Consumer<ClickableWidget> consumer) { - + consumer.accept(previewWidget); + for (ButtonWidget layerButton : layerButtons) { + consumer.accept(layerButton); + } } @Override public void refreshGrid(ScreenRect tabArea) { + float ratio = Math.min((tabArea.height() - 5) / (float) parent.height, (tabArea.width() - 105) / (float) parent.width); + previewWidget.setPosition(5, tabArea.getTop() + 5); + previewWidget.setWidth((int) (parent.width * ratio)); + previewWidget.setHeight((int) (parent.height * ratio)); + previewWidget.ratio = ratio; + updatePlayerListFromPreview(); + ScreenBuilder screenBuilder = ScreenMaster.getScreenBuilder(parent.getCurrentLocation()); + screenBuilder.positionWidgets(parent.width, parent.height); + + for (int i = 0; i < layerButtons.length; i++) { + ButtonWidget layerButton = layerButtons[i]; + layerButton.setPosition(tabArea.width() - 90, tabArea.getTop() + 10 + i * 15); + } + + forEachChild(clickableWidget -> clickableWidget.visible = parent.isPreviewVisible()); + } + + private void updatePlayerListFromPreview() { + if (!parent.isPreviewVisible()) return; + List<Text> lines = new ArrayList<>(); + for (int i = 3; i <= 5; i++) { + ItemStack stack = parent.getHandler().getSlot(i).getStack(); + + for (Text text : ItemUtils.getLore(stack)) { + MutableText mutableText = Text.empty(); + AtomicBoolean foundSquare = new AtomicBoolean(false); + text.visit((style, asString) -> { + if (!asString.startsWith("⬛")) { + mutableText.append(Text.literal(asString).fillStyle(style)); + } else foundSquare.set(true); + return Optional.empty(); + }, Style.EMPTY); + + if (foundSquare.get()) { + lines.add(mutableText); + System.out.println(mutableText.getString()); + System.out.println(mutableText); + } + } + } + PlayerListMgr.updateWidgetsFrom(lines); } - public static class PreviewWidget extends ClickableWidget { + public class PreviewWidget extends ClickableWidget { + + private float ratio = 1f; + + public PreviewWidget() { + this(0, 0, 0, 0, Text.literal("Preview widget")); + } public PreviewWidget(int x, int y, int width, int height, Text message) { super(x, y, width, height, message); @@ -43,7 +129,35 @@ public class PreviewTab implements Tab { @Override protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - ScreenMaster.getScreenBuilder(Utils.getLocation()); + ScreenBuilder screenBuilder = ScreenMaster.getScreenBuilder(parent.getCurrentLocation()); + context.drawBorder(getX() - 1, getY() - 1, getWidth() + 2, getHeight() + 2, -1); + context.enableScissor(getX(), getY(), getRight(), getBottom()); + MatrixStack matrices = context.getMatrices(); + matrices.push(); + matrices.translate(getX(), getY(), 0f); + matrices.scale(ratio, ratio, 1f); + + screenBuilder.renderWidgets(context, PreviewTab.this.currentLayer); + + float localMouseX = (mouseX - getX()) / ratio; + float localMouseY = (mouseY - getY()) / ratio; + + context.drawBorder((int) localMouseX, (int) localMouseY, 2, 2, Colors.RED); + + for (HudWidget hudWidget : screenBuilder.getHudWidgets(PreviewTab.this.currentLayer)) { + if (hudWidget.isMouseOver(localMouseX, localMouseY)) { + context.drawBorder( + hudWidget.getX() - 1, + hudWidget.getY() - 1, + hudWidget.getWidth() + 2, + hudWidget.getHeight() + 2, + Colors.LIGHT_YELLOW); + break; + } + } + + matrices.pop(); + context.disableScissor(); } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java index 4ea8c157..e1684093 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java @@ -1,6 +1,8 @@ package de.hysky.skyblocker.skyblock.tabhud.config; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.gui.ScreenRect; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.tab.TabManager; @@ -13,12 +15,41 @@ import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; +import java.util.Map; + public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerListener { private GenericContainerScreenHandler handler; private String titleLowercase; private boolean tabPreview = false; + private PreviewTab previewTab; + + private final Map<String, Location> nameToLocation = Map.ofEntries( + Map.entry("private islands", Location.PRIVATE_ISLAND), + Map.entry("the hub", Location.HUB), + Map.entry("the dungeon hub", Location.DUNGEON_HUB), + Map.entry("the farming islands", Location.THE_FARMING_ISLAND), + Map.entry("garden", Location.GARDEN), + Map.entry("the park", Location.THE_PARK), + Map.entry("the gold mine", Location.GOLD_MINE), + Map.entry("deep caverns", Location.DEEP_CAVERNS), + Map.entry("dwarven mines", Location.DWARVEN_MINES), + Map.entry("crystal hollows", Location.CRYSTAL_HOLLOWS), + Map.entry("the mineshaft", Location.GLACITE_MINESHAFT), + Map.entry("spider's den", Location.SPIDERS_DEN), + Map.entry("the end", Location.THE_END), + Map.entry("crimson isle", Location.CRIMSON_ISLE), + Map.entry("kuudra", Location.KUUDRAS_HOLLOW), + Map.entry("the rift", Location.THE_RIFT), + Map.entry("jerry's workshop", Location.WINTER_ISLAND) + ); + private Location currentLocation = Location.HUB; + + public Location getCurrentLocation() { + return currentLocation; + } + public boolean isPreviewVisible() { return tabPreview; } @@ -41,8 +72,9 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL @Override protected void init() { widgetsOrderingTab = new WidgetsOrderingTab(this.client, this.handler); + previewTab = new PreviewTab(this.client, this); this.tabNavigation = TabNavigationWidget.builder(this.tabManager, this.width) - .tabs(this.widgetsOrderingTab) + .tabs(this.widgetsOrderingTab, this.previewTab) .build(); this.tabNavigation.selectTab(0, false); this.addDrawableChild(tabNavigation); @@ -61,14 +93,24 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL } } - public void updateHandler(GenericContainerScreenHandler newHandler, String title) { + public void updateHandler(GenericContainerScreenHandler newHandler, String titleLowercase) { handler.removeListener(this); handler = newHandler; handler.addListener(this); - this.titleLowercase = title; + this.titleLowercase = titleLowercase; + String trim = this.titleLowercase + .replace("widgets in", "") + .replace("widgets on", "") + .trim(); + + currentLocation = nameToLocation.getOrDefault(trim, Utils.getLocation()); widgetsOrderingTab.updateHandler(handler); } + public GenericContainerScreenHandler getHandler() { + return handler; + } + private @Nullable ItemStack slotThirteenBacklog = null; @Override 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 983ec41b..5a7a2481 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 @@ -88,7 +88,6 @@ public class WidgetsOrderingTab implements Tab { for (int i = 0; i < hopperTooltip.size(); i++) { Text text = hopperTooltip.get(i); String string = text.getString(); - System.out.println(string); if (start == -1 && string.contains("▶")) { start = i; } 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 973d7204..8a3a0dd7 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 @@ -1,16 +1,15 @@ package de.hysky.skyblocker.skyblock.tabhud.screenbuilder; import java.util.*; +import java.util.function.BiFunction; import com.google.gson.JsonObject; +import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.*; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; import de.hysky.skyblocker.skyblock.tabhud.util.ScreenConst; import de.hysky.skyblocker.skyblock.tabhud.widget.*; -import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.AlignStage; -import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.CollideStage; -import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PipelineStage; -import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PlaceStage; -import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.pipeline.StackStage; +import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectIntMutablePair; import it.unimi.dsi.fastutil.objects.ObjectIntPair; @@ -18,6 +17,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.util.Colors; import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; public class ScreenBuilder { @@ -33,12 +33,14 @@ public class ScreenBuilder { //private final String builderName; - private final Map<String, Boolean> positioning = new Object2ObjectOpenHashMap<>(); + private final Map<String, PositionRule> positioning = new Object2ObjectOpenHashMap<>(); + private final Location location; /** * Create a ScreenBuilder from a json. */ - public ScreenBuilder(Identifier ident) { + public ScreenBuilder(Location location) { + this.location = location; /*try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident)) { this.builderName = ident.getPath(); @@ -146,6 +148,10 @@ public class ScreenBuilder { }; } + public @Nullable PositionRule getPositionRule(String widgetInternalId) { + return positioning.get(widgetInternalId); + } + /** * Lookup Widget instance from alias name */ @@ -156,141 +162,70 @@ public class ScreenBuilder { return this.objectMap.get(name); } - private List<TabHudWidget> topAligned(int screenW, int screenH) { - List<TabHudWidget> affected = new ArrayList<>(); - List<TabHudWidget> unaffected = new ArrayList<>(); + private final List<HudWidget> hudScreen = new ArrayList<>(); + private final List<HudWidget> mainTabScreen = new ArrayList<>(); + private final List<HudWidget> secondaryTabScreen = new ArrayList<>(); - final int maxY = 300; - final int startY = 20; + public void positionWidgets(int screenW, int screenH) { + hudScreen.clear(); + mainTabScreen.clear(); + secondaryTabScreen.clear(); - int totalWidth = 0; + WidgetPositioner newPositioner = DefaultPositioner.CENTERED.getNewPositioner(screenW, screenH); - int currentWidth = 0; - int currentY = startY; - for (TabHudWidget tabHudWidget : PlayerListMgr.widgetsToShow) { - if (positioning.getOrDefault(tabHudWidget.getInternalID(), false)) { - unaffected.add(tabHudWidget); - tabHudWidget.setPositioned(false); - continue; + for (HudWidget widget : ScreenMaster.widgetInstances.values()) { + if (widget.shouldRender(location)) { + hudScreen.add(widget); + widget.update(); + widget.setPositioned(false); } - affected.add(tabHudWidget); - tabHudWidget.setPositioned(true); - - tabHudWidget.update(); - if (currentY + tabHudWidget.getHeight() > maxY) { - totalWidth += currentWidth + ScreenConst.WIDGET_PAD; - currentY = startY; - currentWidth = 0; - } - tabHudWidget.setPosition(totalWidth, currentY); - currentY += tabHudWidget.getHeight() + ScreenConst.WIDGET_PAD; - currentWidth = Math.max(currentWidth, tabHudWidget.getWidth()); - } - totalWidth += currentWidth; - - // centering - int off = (screenW - totalWidth) / 2; - for (TabHudWidget tabHudWidget : affected) { - tabHudWidget.setX(tabHudWidget.getX() - off); } - return unaffected; + // TODO check things and stuff + mainTabScreen.addAll(PlayerListMgr.tabWidgetsToShow); - } - - private List<TabHudWidget> centered(int screenW, int screenH) { - List<TabHudWidget> affected = new ArrayList<>(); - List<TabHudWidget> unaffected = new ArrayList<>(); - - int totalWidth = 0; - - final int maxY = Math.min(400, (int) (screenH * 0.9f)); - // each column is a pair of a list of widgets for the rows and an int for the width of the column - List<ObjectIntPair<List<TabHudWidget>>> columns = new ArrayList<>(); - columns.add(new ObjectIntMutablePair<>(new ArrayList<>(), 0)); - - int currentY = 0; - int currentWidth = 0; - - for (TabHudWidget tabHudWidget : PlayerListMgr.widgetsToShow) { - if (positioning.getOrDefault(tabHudWidget.getInternalID(), false)) { - unaffected.add(tabHudWidget); - tabHudWidget.setPositioned(false); - continue; - } - affected.add(tabHudWidget); - tabHudWidget.setPositioned(true); - - tabHudWidget.update(); - // Too large to fit in column - if (currentY + tabHudWidget.getHeight() > maxY) { - currentY = 0; - currentWidth = 0; - columns.add(new ObjectIntMutablePair<>(new ArrayList<>(), 0)); - } - tabHudWidget.setY(currentY); - currentY += tabHudWidget.getHeight() + ScreenConst.WIDGET_PAD; - currentWidth = Math.max(currentWidth, tabHudWidget.getWidth()); - columns.getLast().right(currentWidth); - columns.getLast().left().add(tabHudWidget); + for (HudWidget widget : mainTabScreen) { + newPositioner.positionWidget(widget); + widget.setPositioned(true); } - for (int i = 0; i < columns.size(); i++) { - ObjectIntPair<List<TabHudWidget>> listObjectIntPair = columns.get(i); - int columnWidth = listObjectIntPair.rightInt(); - List<TabHudWidget> column = listObjectIntPair.left(); - - // calculate the height of the column - int height = (column.size() - 1) * ScreenConst.WIDGET_PAD; - for (TabHudWidget tabHudWidget : column) { - height += tabHudWidget.getHeight(); + newPositioner.finalizePositioning(); + for (HudWidget widget : hudScreen) { + if (!widget.isPositioned()) { + WidgetPositioner.applyRuleToWidget(widget, screenW, screenH, this::getPositionRule); } - // set x and y of the widgets! - int offset = (screenH - height) / 2; - for (TabHudWidget tabHudWidget : column) { - tabHudWidget.setY(tabHudWidget.getY() + offset); - if (i < columns.size() / 2) { - tabHudWidget.setX(totalWidth + columnWidth - tabHudWidget.getWidth()); - } else { - tabHudWidget.setX(totalWidth); - } - } - totalWidth += columnWidth + ScreenConst.WIDGET_PAD; } - - // Center everything - int off = (screenW - totalWidth) / 2; - for (TabHudWidget tabHudWidget : affected) { - tabHudWidget.setX(tabHudWidget.getX() - off); + for (HudWidget widget : secondaryTabScreen) { + if (!widget.isPositioned()) { + WidgetPositioner.applyRuleToWidget(widget, screenW, screenH, this::getPositionRule); + } } - - return unaffected; } - private final List<HudWidget> hudScreen = new ArrayList<>(); - private final List<HudWidget> mainTabScreen = new ArrayList<>(); - private final List<HudWidget> secondaryTabScreen = new ArrayList<>(); - - private void positionWidgets(int screenW, int screenH) { - hudScreen.clear(); - mainTabScreen.clear(); - secondaryTabScreen.clear(); + public void renderWidgets(DrawContext context, Layer layer) { + List<HudWidget> widgetsToRender = getHudWidgets(layer); - List<TabHudWidget> unaffected; - if (false) { - unaffected = centered(screenW, screenH); - } else { - unaffected = topAligned(screenW, screenH); + for (HudWidget widget : widgetsToRender) { + widget.render(context); } } + public List<HudWidget> getHudWidgets(Layer layer) { + return switch (layer) { + case MAIN_TAB -> mainTabScreen; + case SECONDARY_TAB -> secondaryTabScreen; + case HUD -> hudScreen; + case null -> List.of(); + }; + } + /** * Run the pipeline to build a Screen */ public void run(DrawContext context, int screenW, int screenH) { int i = 0; - for (TabHudWidget value : PlayerListMgr.widgetInstances.values()) { - context.drawText(MinecraftClient.getInstance().textRenderer, value.getHypixelWidgetName(), 0, i, PlayerListMgr.widgetsToShow.contains(value) ? Colors.LIGHT_YELLOW : -1, true); + for (TabHudWidget value : PlayerListMgr.tabWidgetInstances.values()) { + context.drawText(MinecraftClient.getInstance().textRenderer, value.getHypixelWidgetName(), 0, i, PlayerListMgr.tabWidgetsToShow.contains(value) ? Colors.LIGHT_YELLOW : -1, true); i += 9; } @@ -299,8 +234,27 @@ public class ScreenBuilder { positionWidgets(screenW, screenH); } - for (HudWidget w : PlayerListMgr.widgetsToShow) { - w.render(context); + renderWidgets(context, Layer.MAIN_TAB); + } + + public enum Layer { + MAIN_TAB, + SECONDARY_TAB, + HUD + } + + private enum DefaultPositioner { + TOP(TopAlignedWidgetPositioner::new), + CENTERED(CenteredWidgetPositioner::new); + + private final BiFunction<Integer, Integer, WidgetPositioner> function; + + DefaultPositioner(BiFunction<Integer, Integer, WidgetPositioner> widgetPositionerSupplier) { + function = widgetPositionerSupplier; + } + + public WidgetPositioner getNewPositioner(int screenWidth, int screenHeight) { + return function.apply(screenWidth, screenHeight); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java index 2146d966..62c03ab3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java @@ -1,9 +1,7 @@ package de.hysky.skyblocker.skyblock.tabhud.screenbuilder; import com.google.common.reflect.ClassPath; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.events.SkyblockEvents; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.skyblock.tabhud.TabHud; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; @@ -11,22 +9,13 @@ import de.hysky.skyblocker.skyblock.tabhud.util.PlayerLocator; import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.TabHudWidget; import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.fabricmc.fabric.api.resource.ResourcePackActivationType; -import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.main.Main; -import net.minecraft.resource.Resource; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.ResourceType; import net.minecraft.util.Identifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; @@ -42,6 +31,8 @@ public class ScreenMaster { private static final HashMap<String, ScreenBuilder> screenBMap = new HashMap<>(); private static final Map<Location, ScreenBuilder> builderMap = new HashMap<>(); + public static final Map<String, HudWidget> widgetInstances = new HashMap<>(); + /** * Load a screen mapping from an identifier */ @@ -52,17 +43,10 @@ public class ScreenMaster { String screenType = parts[parts.length - 2]; String location = parts[parts.length - 1]; location = location.replace(".json", ""); - - ScreenBuilder sb = new ScreenBuilder(ident); - switch (screenType) { - case "standard" -> standardMap.put(location, sb); - case "screen_a" -> screenAMap.put(location, sb); - case "screen_b" -> screenBMap.put(location, sb); - } } public static ScreenBuilder getScreenBuilder(Location location) { - return builderMap.computeIfAbsent(location, location1 -> new ScreenBuilder(new Identifier(""))); + return builderMap.get(location); } /** @@ -87,13 +71,15 @@ public class ScreenMaster { sb = lookup.get("default"); } - sb.run(context, w, h); + getScreenBuilder(Utils.getLocation()).run(context, w, h); } @Init public static void init() { + SkyblockEvents.LOCATION_CHANGE.register(location -> ScreenBuilder.positionsNeedsUpdating = true); + ClientLifecycleEvents.CLIENT_STARTED.register(client -> { System.out.println(Object.class); try { @@ -102,7 +88,7 @@ public class ScreenMaster { Class<?> load = Class |
