aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/PreviewTab.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/WidgetsConfigurationScreen.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java205
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/HudWidget.java11
6 files changed, 220 insertions, 102 deletions
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
new file mode 100644
index 00000000..65456c96
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/PreviewTab.java
@@ -0,0 +1,54 @@
+package de.hysky.skyblocker.skyblock.tabhud.config;
+
+import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster;
+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.ClickableWidget;
+import net.minecraft.text.Text;
+
+import java.util.function.Consumer;
+
+public class PreviewTab implements Tab {
+
+ private final MinecraftClient client;
+
+ public PreviewTab(MinecraftClient client) {
+ this.client = client;
+ }
+
+ @Override
+ public Text getTitle() {
+ return Text.literal("Preview");
+ }
+
+ @Override
+ public void forEachChild(Consumer<ClickableWidget> consumer) {
+
+ }
+
+ @Override
+ public void refreshGrid(ScreenRect tabArea) {
+
+ }
+
+ public static class PreviewWidget extends ClickableWidget {
+
+ public PreviewWidget(int x, int y, int width, int height, Text message) {
+ super(x, y, width, height, message);
+ }
+
+ @Override
+ protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
+ ScreenMaster.getScreenBuilder(Utils.getLocation());
+ }
+
+ @Override
+ protected void appendClickableNarrations(NarrationMessageBuilder builder) {
+
+ }
+ }
+}
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 3b999e18..4ea8c157 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
@@ -18,6 +18,11 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
private GenericContainerScreenHandler handler;
private String titleLowercase;
+ private boolean tabPreview = false;
+ public boolean isPreviewVisible() {
+ return tabPreview;
+ }
+
// Tabs and stuff
private final TabManager tabManager = new TabManager(this::addDrawableChild, this::remove);
@Nullable
@@ -68,6 +73,9 @@ public class WidgetsConfigurationScreen extends Screen implements ScreenHandlerL
@Override
public void onSlotUpdate(ScreenHandler handler, int slotId, ItemStack stack) {
+ if (slotId == 4) {
+ tabPreview = stack.isOf(Items.PLAYER_HEAD);
+ }
if (widgetsOrderingTab == null) {
if (slotId == 13) slotThirteenBacklog = stack.copy();
return;
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 7290ecea..29e825d1 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
@@ -39,7 +39,7 @@ public class ScreenBuilder {
// maps alias -> widget instance
private final HashMap<String, HudWidget> objectMap = new HashMap<>();
- private final String builderName;
+ //private final String builderName;
private final Map<String, Boolean> positioning = new Object2ObjectOpenHashMap<>();
@@ -48,7 +48,7 @@ public class ScreenBuilder {
*/
public ScreenBuilder(Identifier ident) {
- try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident)) {
+ /*try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident)) {
this.builderName = ident.getPath();
JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
@@ -73,7 +73,7 @@ public class ScreenBuilder {
} catch (Exception ex) {
// rethrow as unchecked exception so that I don't have to catch anything in the ScreenMaster
throw new IllegalStateException("Failed to load file " + ident + ". Reason: " + ex.getMessage());
- }
+ }*/
}
/**
@@ -82,7 +82,7 @@ public class ScreenBuilder {
*/
public HudWidget instanceFrom(String name, JsonObject widget) {
- // do widgets that require args the normal way
+ /*// do widgets that require args the normal way
JsonElement arg;
switch (name) {
case "DungeonPlayerWidget" -> {
@@ -124,7 +124,7 @@ public class ScreenBuilder {
// load failed.
if (clazz == null) {
- throw new NoSuchElementException(builderName + "/[ERROR]: No such Widget type \"" + name + "\"!");
+ throw new NoSuchElementException(builderName + "/[ERROR]: No such Widget type \"" + name + "\"!");
}
// return instance of that class.
@@ -132,9 +132,10 @@ public class ScreenBuilder {
Constructor<?> ctor = clazz.getConstructor();
return (HudWidget) ctor.newInstance();
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException
- | IllegalArgumentException | InvocationTargetException | SecurityException ex) {
+ | IllegalArgumentException | InvocationTargetException | SecurityException ex) {
throw new IllegalStateException(builderName + "/" + name + ": Internal error...");
- }
+ }*/
+ return null;
}
/**
@@ -149,7 +150,7 @@ public class ScreenBuilder {
case "stack" -> new StackStage(this, descr);
case "align" -> new AlignStage(this, descr);
case "collideAgainst" -> new CollideStage(this, descr);
- default -> throw new NoSuchElementException("No such op " + op + " as requested by " + this.builderName);
+ default -> throw new NoSuchElementException("No such op " + op + " as requested by ");
};
}
@@ -158,93 +159,124 @@ public class ScreenBuilder {
*/
public HudWidget getInstance(String name) {
if (!this.objectMap.containsKey(name)) {
- throw new NoSuchElementException("No widget with alias " + name + " in screen " + builderName);
+ throw new NoSuchElementException("No widget with alias " + name + " in screen ");
}
return this.objectMap.get(name);
}
- private static int totalWidth = 0;
+ private List<TabHudWidget> topAligned(int screenW, int screenH) {
+ List<TabHudWidget> affected = new ArrayList<>();
+ List<TabHudWidget> unaffected = new ArrayList<>();
- private void topAligned(MatrixStack matrices, int screenW, int screenH) {
- if (positionsNeedsUpdating) {
+ final int maxY = 300;
+ final int startY = 20;
- positionsNeedsUpdating = false;
- final int maxY = 300;
- final int startY = 20;
-
- totalWidth = 0;
-
- int currentWidth = 0;
- 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;
- currentWidth = 0;
- }
- tabHudWidget.setPosition(totalWidth, currentY);
- currentY += tabHudWidget.getHeight() + ScreenConst.WIDGET_PAD;
- currentWidth = Math.max(currentWidth, tabHudWidget.getWidth());
+ int totalWidth = 0;
+
+ int currentWidth = 0;
+ int currentY = startY;
+ for (TabHudWidget tabHudWidget : PlayerListMgr.widgetsToShow) {
+ if (positioning.getOrDefault(tabHudWidget.getInternalID(), false)) {
+ unaffected.add(tabHudWidget);
+ continue;
}
- totalWidth += currentWidth;
+ affected.add(tabHudWidget);
+
+ 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());
}
- matrices.translate((float) (screenW - totalWidth)/2, 0, 0);
+ totalWidth += currentWidth;
+
+ // centering
+ int off = (screenW - totalWidth) / 2;
+ for (TabHudWidget tabHudWidget : affected) {
+ tabHudWidget.setX(tabHudWidget.getX() - off);
+ }
+
+ return unaffected;
+
}
- 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);
+ 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);
+ continue;
}
- 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);
- }
+ affected.add(tabHudWidget);
+
+ 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 (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;
}
+ totalWidth += columnWidth + ScreenConst.WIDGET_PAD;
+ }
+
+ // Center everything
+ int off = (screenW - totalWidth) / 2;
+ for (TabHudWidget tabHudWidget : affected) {
+ tabHudWidget.setX(tabHudWidget.getX() - off);
}
- matrices.translate((float) (screenW - totalWidth)/2, 0, 0);
+ return unaffected;
+ }
+
+ private void positionWidgets(int screenW, int screenH) {
+ List<TabHudWidget> unaffected;
+ if (false) {
+ unaffected = centered(screenW, screenH);
+ } else {
+ unaffected = topAligned(screenW, screenH);
+ }
}
/**
@@ -255,20 +287,17 @@ public class ScreenBuilder {
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;
+ i += 9;
}
-
-
- MatrixStack matrices = context.getMatrices();
- matrices.push();
-
- centered(matrices, screenW, screenH);
+ if (positionsNeedsUpdating) {
+ positionsNeedsUpdating = false;
+ positionWidgets(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 258a831e..2146d966 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,6 +10,7 @@ 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 de.hysky.skyblocker.utils.Location;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
@@ -39,6 +40,7 @@ public class ScreenMaster {
private static final HashMap<String, ScreenBuilder> standardMap = new HashMap<>();
private static final HashMap<String, ScreenBuilder> screenAMap = new HashMap<>();
private static final HashMap<String, ScreenBuilder> screenBMap = new HashMap<>();
+ private static final Map<Location, ScreenBuilder> builderMap = new HashMap<>();
/**
* Load a screen mapping from an identifier
@@ -59,6 +61,10 @@ public class ScreenMaster {
}
}
+ public static ScreenBuilder getScreenBuilder(Location location) {
+ return builderMap.computeIfAbsent(location, location1 -> new ScreenBuilder(new Identifier("")));
+ }
+
/**
* Top level render method.
* Calls the appropriate ScreenBuilder with the screen's dimensions
@@ -106,6 +112,7 @@ public class ScreenMaster {
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
@@ -165,6 +172,8 @@ public class ScreenMaster {
}
}
});
+
+ */
}
}
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 44946b5c..0e82d2a8 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
@@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.tabhud.util;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.mixins.accessors.PlayerListHudAccessor;
+import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenBuilder;
import de.hysky.skyblocker.skyblock.tabhud.widget.TabHudWidget;
import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent;
@@ -70,24 +71,30 @@ public class PlayerListMgr {
playerStringList = playerList.stream().map(PlayerListEntry::getDisplayName).filter(Objects::nonNull).map(Text::getString).map(String::strip).toList();
}
- Predicate<String> playersColumnPredicate = PLAYERS_COLUMN_PATTERN.asMatchPredicate();
- Predicate<String> infoColumnPredicate = INFO_COLUMN_PATTERN.asMatchPredicate();
+ // TODO DUNGEONS CHECK
+ if (!(MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen widgetsConfigurationScreen && widgetsConfigurationScreen.isPreviewVisible())) {
+ updateWidgetsFrom(playerList.stream().map(PlayerListEntry::getDisplayName).filter(Objects::nonNull).toList());
+ }
+
+
+ }
+
+ public static void updateWidgetsFrom(List<Text> lines) {
+ final Predicate<String> playersColumnPredicate = PLAYERS_COLUMN_PATTERN.asMatchPredicate();
+ final Predicate<String> infoColumnPredicate = INFO_COLUMN_PATTERN.asMatchPredicate();
widgetsToShow.clear();
boolean doingPlayers = false;
boolean playersDone = false;
String hypixelWidgetName = "";
List<Text> contents = new ArrayList<>();
- // TODO DUNGEONS CHECK
- for (PlayerListEntry playerListEntry : playerList) {
- Text displayName = playerListEntry.getDisplayName();
- if (displayName == null) continue;
+ for (Text displayName : lines) {
String string = displayName.getString();
- if (string.isBlank()) continue;
- if (!playersDone) {
- // check if Players (number)
+ if (string.isBlank()) continue;
+ if (!playersDone) {
+ // check if Players (number)
if (playersColumnPredicate.test(string)) {
if (!doingPlayers) {
doingPlayers = true;
@@ -102,8 +109,8 @@ public class PlayerListMgr {
contents.clear();
continue;
}
- } else {
- if (infoColumnPredicate.test(string)) continue;
+ } else {
+ if (infoColumnPredicate.test(string)) continue;
// New widget alert!!!!
if (!string.startsWith(" ")) {
if (!contents.isEmpty()) widgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents));
@@ -113,10 +120,10 @@ public class PlayerListMgr {
if (!nameAndInfo.right().getString().isBlank()) contents.add(trim(nameAndInfo.right()));
continue;
}
- }
+ }
// Add the line to the content
- contents.add(trim(displayName));
- }
+ contents.add(trim(displayName));
+ }
if (!contents.isEmpty()) widgetsToShow.add(getTabHudWidget(hypixelWidgetName, contents));
ScreenBuilder.positionsNeedsUpdating = true;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/HudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/HudWidget.java
index d095ad60..ea52d5a8 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/HudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/HudWidget.java
@@ -278,4 +278,15 @@ public abstract class HudWidget implements Element, Widget {
public String getInternalID() {
return internalID;
}
+
+ private boolean positioned = false;
+
+
+ public boolean isPositioned() {
+ return positioned;
+ }
+
+ public void setPositioned(boolean positioned) {
+ this.positioned = positioned;
+ }
}