diff options
| author | viciscat <51047087+viciscat@users.noreply.github.com> | 2024-05-09 23:56:54 +0200 |
|---|---|---|
| committer | viciscat <51047087+viciscat@users.noreply.github.com> | 2024-12-12 18:19:04 +0100 |
| commit | ac73162054a4aba93c96b4039f2cf71b1ce4dc79 (patch) | |
| tree | 31f0dabeb81659eec7a884f8bf0fe9ba0ad96b77 /src/main/java | |
| parent | 3133b406b743d07fdd42ecf428a22125d1437770 (diff) | |
| download | Skyblocker-ac73162054a4aba93c96b4039f2cf71b1ce4dc79.tar.gz Skyblocker-ac73162054a4aba93c96b4039f2cf71b1ce4dc79.tar.bz2 Skyblocker-ac73162054a4aba93c96b4039f2cf71b1ce4dc79.zip | |
made it work!
yes I deleted a lot of files
also created the config screen class or whatever
Diffstat (limited to 'src/main/java')
39 files changed, 251 insertions, 1199 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java index d3a24308..e671406a 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java @@ -42,6 +42,7 @@ public abstract class GenericContainerScreenHandlerMixin extends ScreenHandler { } case null, default -> {} } + onContentChanged(slots.get(slot).inventory); // this should be default behavior } @Override diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java index 2c7fde47..ce04268a 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java @@ -29,7 +29,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.isInDungeons() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { + if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java index 4c4e1c0f..cad56cfa 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java @@ -53,6 +53,5 @@ public class AuctionHouseScreenHandler extends GenericContainerScreenHandler { @Override public void setStackInSlot(int slot, int revision, ItemStack stack) { super.setStackInSlot(slot, revision, stack); - onContentChanged(slots.get(slot).inventory); } } 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 56a41e3d..33a2980d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -37,7 +37,7 @@ public class EndHudWidget extends HudWidget { } public EndHudWidget(MutableText title, Integer colorValue) { - super(title, colorValue); + super(title, colorValue, "hud_end"); this.setX(5); this.setY(5); this.update(); 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 1fdcdac1..3bf72336 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -51,7 +51,7 @@ public class FarmingHudWidget extends HudWidget { private final MinecraftClient client = MinecraftClient.getInstance(); public FarmingHudWidget() { - super(TITLE, Formatting.YELLOW.getColorValue()); + super(TITLE, Formatting.YELLOW.getColorValue(), "hud_farming"); setX(SkyblockerConfigManager.get().farming.garden.farmingHud.x); setY(SkyblockerConfigManager.get().farming.garden.farmingHud.y); update(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java new file mode 100644 index 00000000..5fcde767 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfiguration.java @@ -0,0 +1,29 @@ +package de.hysky.skyblocker.skyblock.tabhud.config; + +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.GenericContainerScreenHandler; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerListener; +import net.minecraft.text.Text; + +public class WidgetsConfiguration extends Screen implements ScreenHandlerListener { + + private GenericContainerScreenHandler handler; + + protected WidgetsConfiguration(GenericContainerScreenHandler handler) { + super(Text.literal("Widgets Configuration")); + this.handler = handler; + } + + public void updateHandler(GenericContainerScreenHandler newHandler) { + handler = newHandler; + } + + @Override + public void onSlotUpdate(ScreenHandler handler, int slotId, ItemStack stack) { + } + + @Override + public void onPropertyUpdate(ScreenHandler handler, int property, int value) {} +} 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 78118e4c..7290ecea 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 @@ -3,10 +3,7 @@ package de.hysky.skyblocker.skyblock.tabhud.screenbuilder; import java.io.BufferedReader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.NoSuchElementException; +import java.util.*; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -22,9 +19,12 @@ 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 it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectIntMutablePair; +import it.unimi.dsi.fastutil.objects.ObjectIntPair; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Colors; import net.minecraft.util.Identifier; public class ScreenBuilder { @@ -85,9 +85,6 @@ public class ScreenBuilder { // do widgets that require args the normal way JsonElement arg; switch (name) { - case "EventWidget" -> { - return new EventWidget(widget.get("inGarden").getAsBoolean()); - } case "DungeonPlayerWidget" -> { return new DungeonPlayerWidget(widget.get("player").getAsInt()); } @@ -168,15 +165,11 @@ public class ScreenBuilder { private static int totalWidth = 0; - /** - * Run the pipeline to build a Screen - */ - public void run(DrawContext context, int screenW, int screenH) { - + private void topAligned(MatrixStack matrices, int screenW, int screenH) { if (positionsNeedsUpdating) { positionsNeedsUpdating = false; - final int maxY = 200; + final int maxY = 300; final int startY = 20; totalWidth = 0; @@ -185,6 +178,7 @@ public class ScreenBuilder { int currentY = startY; for (TabHudWidget tabHudWidget : PlayerListMgr.widgetsToShow) { if (positioning.getOrDefault(tabHudWidget.getInternalID(), false)) continue; + tabHudWidget.update(); if (currentY + tabHudWidget.getHeight() > maxY) { totalWidth += currentWidth + ScreenConst.WIDGET_PAD; currentY = startY; @@ -196,11 +190,82 @@ public class ScreenBuilder { } totalWidth += currentWidth; } + matrices.translate((float) (screenW - totalWidth)/2, 0, 0); + } + + private void centered(MatrixStack matrices, int screenW, int screenH) { + if (positionsNeedsUpdating) { + positionsNeedsUpdating = false; + 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)) continue; + tabHudWidget.update(); + 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 (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(); + } + // 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; + } + } + + matrices.translate((float) (screenW - totalWidth)/2, 0, 0); + } + + /** + * 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); + i+=9; + } + + MatrixStack matrices = context.getMatrices(); matrices.push(); - matrices.translate((float) (screenW - totalWidth)/2, 0, 0); - for (HudWidget w : instances) { + + centered(matrices, screenW, screenH); + + for (HudWidget w : PlayerListMgr.widgetsToShow) { w.render(context); } matrices.pop(); 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 5591ea37..258a831e 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 @@ -10,11 +10,13 @@ import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; 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 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; @@ -86,21 +88,25 @@ public class ScreenMaster { @Init public static void init() { - try { - ClassPath.from(TabHudWidget.class.getClassLoader()).getTopLevelClasses("de.hysky.skyblocker.skyblock.tabhud.widget").iterator().forEachRemaining(classInfo -> { - Class<?> load = classInfo.load(); - if (!load.getSuperclass().equals(TabHudWidget.class)) return; - try { - TabHudWidget tabHudWidget = (TabHudWidget) load.getDeclaredConstructor().newInstance(); - PlayerListMgr.widgetInstances.put(tabHudWidget.getHypixelWidgetName(), tabHudWidget); - } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) { - LOGGER.error("[Skyblocker] Failed to load {} hud widget", classInfo.getName(), e); - } - - }); - } catch (Exception e) { - LOGGER.error("[Skyblocker] Failed to get instances of hud widgets", e); - } + ClientLifecycleEvents.CLIENT_STARTED.register(client -> { + System.out.println(Object.class); + try { + ClassPath.from(TabHudWidget.class.getClassLoader()).getTopLevelClasses("de.hysky.skyblocker.skyblock.tabhud.widget").iterator().forEachRemaining(classInfo -> { + try { + Class<?> load = Class.forName(classInfo.getName()); + if (!load.getSuperclass().equals(TabHudWidget.class)) return; + TabHudWidget tabHudWidget = (TabHudWidget) load.getDeclaredConstructor().newInstance(); + PlayerListMgr.widgetInstances.put(tabHudWidget.getHypixelWidgetName(), tabHudWidget); + } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException | ClassNotFoundException e) { + LOGGER.error("[Skyblocker] Failed to load {} hud widget", classInfo.getName(), e); + } + + }); + } catch (Exception e) { + LOGGER.error("[Skyblocker] Failed to get instances of hud widgets", e); + } + }); + // WHY MUST IT ALWAYS BE SUCH NESTED GARBAGE MINECRAFT KEEP THAT IN DFU FFS @@ -139,8 +145,7 @@ public class ScreenMaster { } } catch (Exception ex) { - throw new IllegalStateException( - "Rejected this resource pack. Reason: " + ex.getMessage()); + LOGGER.error("it borked", ex); } } @@ -156,7 +161,7 @@ public class ScreenMaster { } } if (excnt > 0) { - throw new IllegalStateException("This screen definition isn't valid, see above"); + LOGGER.warn("shit went down"); } } }); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index b8f0cc42..8832e6f0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -10,7 +10,9 @@ import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectObjectMutablePair; +import net.minecraft.text.OrderedText; import net.minecraft.text.Style; +import net.minecraft.util.Formatting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,8 +40,8 @@ import java.util.regex.Pattern; public class PlayerListMgr { public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); - private static final Pattern PLAYERS_COLUMN_PATTERN = Pattern.compile("(^|\\s)(Players \\(\\d+\\)|Island)(\\s|$)"); - private static final Pattern INFO_COLUMN_PATTERN = Pattern.compile("(^|\\s)Info(\\s|$)"); + private static final Pattern PLAYERS_COLUMN_PATTERN = Pattern.compile("(^|\\s*)(Players \\(\\d+\\)|Island)(\\s*|$)"); + private static final Pattern INFO_COLUMN_PATTERN = Pattern.compile("(^|\\s*)Info(\\s*|$)"); /** * The player list in tab. @@ -82,8 +84,9 @@ public class PlayerListMgr { if (displayName == null) continue; String string = displayName.getString(); - if (!playersDone) { - // check if Players (number) + if (string.isBlank()) continue; + if (!playersDone) { + // check if Players (number) if (playersColumnPredicate.test(string)) { if (!doingPlayers) { doingPlayers = true; @@ -98,35 +101,54 @@ public class PlayerListMgr { contents.clear(); continue; } - // add player to contents - contents.add(displayName); // Players don't have the silly space } else { - if (string.isBlank()) continue; - if (infoColumnPredicate.test(string)) continue; + if (infoColumnPredicate.test(string)) continue; + // New widget alert!!!! if (!string.startsWith(" ")) { if (!contents.isEmpty()) widgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents)); contents.clear(); Pair<String, ? extends Text> nameAndInfo = getNameAndInfo(displayName); hypixelWidgetName = nameAndInfo.left(); - if (!nameAndInfo.right().getString().isBlank()) contents.add(nameAndInfo.right()); + if (!nameAndInfo.right().getString().isBlank()) contents.add(trim(nameAndInfo.right())); continue; } - contents.add(removeSpace(displayName)); // remove the silly space - } - } + } + // Add the line to the content + contents.add(trim(displayName)); + } + if (!contents.isEmpty()) widgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents)); ScreenBuilder.positionsNeedsUpdating = true; } - private static Text removeSpace(Text text) { - AtomicBoolean removed = new AtomicBoolean(false); - MutableText out = Text.empty(); + private static Text trim(Text text) { + List<Text> trimmedParts = new ArrayList<>(); + AtomicBoolean leadingSpaceFound = new AtomicBoolean(false); + + // leading spaces text.visit((style, asString) -> { - if (!removed.get()) { - out.append(Text.literal(asString.substring(1)).fillStyle(style)); - removed.set(true); - } else out.append(Text.literal(asString).fillStyle(style)); + String trimmed = asString; + if (!leadingSpaceFound.get()) { + trimmed = trimmed.stripLeading(); + if (!trimmed.isBlank()) leadingSpaceFound.set(true); + else return Optional.empty(); + } + trimmedParts.add(Text.literal(trimmed).setStyle(style)); return Optional.empty(); }, Style.EMPTY); + + // trailing spaces + for (int i = 0; i < trimmedParts.size(); i++) { + Text last = trimmedParts.removeLast(); + String trimmed = last.getString().stripTrailing(); + if (!trimmed.isBlank()) { + trimmedParts.add(Text.literal(trimmed).setStyle(last.getStyle())); + break; + } + } + + MutableText out = Text.empty(); + trimmedParts.forEach(out::append); + return out; } @@ -136,7 +158,7 @@ public class PlayerListMgr { tabHudWidget.updateFromTab(lines); return tabHudWidget; } else { - DefaultTabHudWidget defaultTabHudWidget = new DefaultTabHudWidget(hypixelWidgetName, Text.literal(hypixelWidgetName)); + DefaultTabHudWidget defaultTabHudWidget = new DefaultTabHudWidget(hypixelWidgetName, Text.literal(hypixelWidgetName).formatted(Formatting.BOLD)); widgetInstances.put(defaultTabHudWidget.getHypixelWidgetName(), defaultTabHudWidget); defaultTabHudWidget.updateFromTab(lines); return defaultTabHudWidget; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java index 68635ee6..6aedded7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ElectionWidget.java @@ -8,6 +8,7 @@ import java.util.regex.Pattern; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; @@ -53,7 +54,7 @@ public class ElectionWidget extends TabHudWidget { @Override public void updateContent(List<Text> lines) { - String status = PlayerListMgr.strAt(76); + String status = lines.getFirst().getString(); if (status == null) { this.addComponent(new IcoTextComponent()); this.addComponent(new IcoTextComponent()); @@ -67,7 +68,11 @@ public class ElectionWidget extends TabHudWidget { IcoTextComponent over = new IcoTextComponent(Ico.BARRIER, EL_OVER); this.addComponent(over); - String win = PlayerListMgr.strAt(77); + for (int i = 1; i < lines.size(); i++) { + this.addComponent(new PlainTextComponent(lines.get(i))); + } + + /*String win = PlayerListMgr.strAt(77); if (win == null || !win.contains(": ")) { this.addComponent(new IcoTextComponent()); } else { @@ -78,26 +83,24 @@ public class ElectionWidget extends TabHudWidget { } this.addSimpleIcoText(Ico.PLAYER, "Participants:", Formatting.AQUA, 78); - this.addSimpleIcoText(Ico.SIGN, "Year:", Formatting.LIGHT_PURPLE, 79); + this.addSimpleIcoText(Ico.SIGN, "Year:", Formatting.LIGHT_PURPLE, 79);*/ |
