aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-07-31 18:02:08 +0200
committerLinnea Gräf <nea@nea.moe>2025-07-31 18:09:41 +0200
commitee6ff9a7d7b77efa16d1735aa8a684e442bdccee (patch)
treeeaa21b4997c7ff7fff8df4aed26f72b60f1f0265 /src/main/java
parent31511ecd012c5dbe8cc2c8a7245851392cdf6f58 (diff)
downloadSkyblocker-ee6ff9a7d7b77efa16d1735aa8a684e442bdccee.tar.gz
Skyblocker-ee6ff9a7d7b77efa16d1735aa8a684e442bdccee.tar.bz2
Skyblocker-ee6ff9a7d7b77efa16d1735aa8a684e442bdccee.zip
Update to use clickable widget
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ErrorPage.java39
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/LoadingPage.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerPage.java23
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java20
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerWidget.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/TextWidget.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillWidget.java83
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java55
8 files changed, 190 insertions, 95 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ErrorPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ErrorPage.java
index eca3a0d9..5f8f953b 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ErrorPage.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ErrorPage.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.skyblock.profileviewer.rework;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
+import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
import org.jetbrains.annotations.NotNull;
@@ -9,26 +10,26 @@ import java.util.List;
public record ErrorPage(ProfileLoadState.Error error) implements ProfileViewerPage {
- @Override
- public int getSortIndex() {
- return 0;
- }
+ @Override
+ public int getSortIndex() {
+ return 0;
+ }
- @Override
- public @NotNull ItemStack getIcon() {
- return Ico.BARRIER;
- }
+ @Override
+ public @NotNull ItemStack getIcon() {
+ return Ico.BARRIER;
+ }
- @Override
- public @NotNull String getName() {
- return "Error Loading";
- }
+ @Override
+ public @NotNull String getName() {
+ return "Error Loading";
+ }
- @Override
- public @NotNull List<ProfileViewerWidget.Instance> getWidgets() {
- return List.of(
- ProfileViewerWidget.widget(ProfileViewerScreenRework.PAGE_WIDTH / 2, 8, TextWidget.centered(Text.of("Error!"))),
- ProfileViewerWidget.widget(ProfileViewerScreenRework.PAGE_WIDTH / 2, 19, TextWidget.centered(Text.of(error.message())))
- );
- }
+ @Override
+ public @NotNull List<ProfileViewerWidget.Instance> getWidgets() {
+ return List.of(
+ ProfileViewerWidget.widget(ProfileViewerScreenRework.PAGE_WIDTH / 2, 8, TextWidget.centered(Text.of("Error!"))),
+ ProfileViewerWidget.widget(ProfileViewerScreenRework.PAGE_WIDTH / 2, 19, TextWidget.centered(Text.of(error.message())))
+ );
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/LoadingPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/LoadingPage.java
index 4d326277..48125084 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/LoadingPage.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/LoadingPage.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.skyblock.profileviewer.rework;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
+import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerPage.java
index c68201a8..e15b9564 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerPage.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerPage.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.skyblock.profileviewer.rework;
+import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.NotNullByDefault;
@@ -8,20 +9,20 @@ import java.util.List;
@NotNullByDefault
public interface ProfileViewerPage extends Comparable<ProfileViewerPage> {
- int getSortIndex();
+ int getSortIndex();
- @Override
- default int compareTo(@NotNull ProfileViewerPage o) {
- return Integer.compare(this.getSortIndex(), o.getSortIndex());
- }
+ @Override
+ default int compareTo(@NotNull ProfileViewerPage o) {
+ return Integer.compare(this.getSortIndex(), o.getSortIndex());
+ }
- default ProfileViewerWidget.Instance widget(int x, int y, ProfileViewerWidget widget) {
- return ProfileViewerWidget.widget(x, y, widget);
- }
+ default ProfileViewerWidget.Instance widget(int x, int y, ProfileViewerWidget widget) {
+ return ProfileViewerWidget.widget(x, y, widget);
+ }
- ItemStack getIcon();
+ ItemStack getIcon();
- String getName();
+ String getName();
- List<ProfileViewerWidget.Instance> getWidgets();
+ List<ProfileViewerWidget.Instance> getWidgets();
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java
index c66b5eeb..c0773771 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerScreenRework.java
@@ -13,6 +13,7 @@ import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.RenderPipelines;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
@@ -84,6 +85,19 @@ public class ProfileViewerScreenRework extends Screen {
buttons.get(i).setToggled(i == selectedIndex);
}
widgets = pages.get(selectedIndex).getWidgets();
+ clearChildren();
+ init();
+ }
+
+ @Override
+ protected void init() {
+ super.init();
+ int rootX = width / 2 - GUI_WIDTH / 2;
+ int rootY = height / 2 - GUI_HEIGHT / 2 + 5;
+ for (var widget : pages.get(selectedIndex).getWidgets()) {
+ widget.setPositionFromRoot(rootX + 5, rootY + 7);
+ addDrawableChild(widget);
+ }
}
public CompletableFuture<ProfileLoadState> loadProfilesFromPlayer(String name) {
@@ -122,7 +136,6 @@ public class ProfileViewerScreenRework extends Screen {
@Override
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
- super.render(context, mouseX, mouseY, deltaTicks);
int rootX = width / 2 - GUI_WIDTH / 2;
int rootY = height / 2 - GUI_HEIGHT / 2 + 5;
@@ -132,9 +145,6 @@ public class ProfileViewerScreenRework extends Screen {
button.setY(rootY - 28);
button.render(context, mouseX, mouseY, deltaTicks);
}
-
- for (var widget : widgets) {
- widget.render(context, rootX + 5, rootY + 5, mouseX, mouseY, deltaTicks);
- }
+ super.render(context, mouseX, mouseY, deltaTicks);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerWidget.java
index d601b6e4..f047bd7a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerWidget.java
@@ -1,19 +1,61 @@
package de.hysky.skyblocker.skyblock.profileviewer.rework;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
+import net.minecraft.client.gui.widget.ClickableWidget;
+import net.minecraft.text.Text;
public interface ProfileViewerWidget {
void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, float deltaTicks);
default void click(int x, int y, int mouseX, int mouseY) {}
- static Instance widget(int x, int y, ProfileViewerWidget widget) {
- return new Instance(widget, x, y);
- }
+ int getHeight();
+
+ int getWidth();
+
+ class Instance extends ClickableWidget {
+
+ private final int originalX;
+ private final int originalY;
+ private final ProfileViewerWidget widget;
+
+ public Instance(int x, int y, ProfileViewerWidget widget) {
+ super(x, y, widget.getWidth(), widget.getHeight(), Text.empty());// TODO: figure out the messages
+ originalX = x;
+ originalY = y;
+ this.widget = widget;
+ }
+
+ public int getOriginalX() {
+ return originalX;
+ }
+
+ public int getOriginalY() {
+ return originalY;
+ }
+
+ @Override
+ protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
+ widget.render(context, this.getX(), this.getY(), mouseX, mouseY, deltaTicks);
+ }
+
+ @Override
+ public void onClick(double mouseX, double mouseY) {
+ widget.click(getX(), getY(), (int) mouseX, (int) mouseY);
+ }
- record Instance(ProfileViewerWidget widget, int xRelative, int yRelative) {
- void render(DrawContext drawContext, int rootX, int rootY, int mouseX, int mouseY, float deltaTicks) {
- widget.render(drawContext, rootX + xRelative, rootY + yRelative, mouseX, mouseY, deltaTicks);
+ @Override
+ protected void appendClickableNarrations(NarrationMessageBuilder builder) {
}
+
+ public void setPositionFromRoot(int rootX, int rootY) {
+ setX(rootX + originalX);
+ setY(rootY + originalY);
+ }
+ }
+
+ static Instance widget(int x, int y, ProfileViewerWidget widget) {
+ return new Instance(x, y, widget);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/TextWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/TextWidget.java
index a4e515d2..91fe329b 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/TextWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/TextWidget.java
@@ -28,4 +28,14 @@ public final class TextWidget implements ProfileViewerWidget {
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, float deltaTicks) {
drawContext.drawText(textRenderer, text, x + offset, y, -1, true);
}
+
+ @Override
+ public int getHeight() {
+ return textRenderer.fontHeight;
+ }
+
+ @Override
+ public int getWidth() {
+ return 0;
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillWidget.java
new file mode 100644
index 00000000..485d3a1b
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillWidget.java
@@ -0,0 +1,83 @@
+package de.hysky.skyblocker.skyblock.profileviewer.rework.pages;
+
+import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.skyblock.profileviewer.model.PlayerData;
+import de.hysky.skyblocker.skyblock.profileviewer.rework.ProfileViewerWidget;
+import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder;
+import de.hysky.skyblocker.utils.Formatters;
+import de.hysky.skyblocker.utils.NEURepoManager;
+import de.hysky.skyblocker.utils.render.HudHelper;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gl.RenderPipelines;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import net.minecraft.util.Identifier;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.OptionalInt;
+
+final class SkillWidget implements ProfileViewerWidget {
+ private static final Identifier ICON_DATA_TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/icon_data_widget.png");
+ private static final Identifier BAR_FILL = Identifier.of(SkyblockerMod.NAMESPACE, "bars/bar_fill");
+ private static final Identifier BAR_BACK = Identifier.of(SkyblockerMod.NAMESPACE, "bars/bar_back");
+
+ private final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+ private final PlayerData.Skill skill;
+ private final LevelFinder.LevelInfo levelInfo;
+ private final OptionalInt softSkillCap;
+
+ SkillWidget(
+ PlayerData.Skill skill,
+ LevelFinder.LevelInfo levelInfo,
+ OptionalInt softSkillCap
+ ) {
+ this.skill = skill;
+ this.levelInfo = levelInfo;
+ this.softSkillCap = softSkillCap;
+ }
+
+ public static final int WIDTH = 109;
+ public static final int HEIGHT = 26;
+
+ @Override
+ public void render(DrawContext drawContext,
+ int x, int y, int mouseX, int mouseY, float deltaTicks) {
+ drawContext.drawTexture(RenderPipelines.GUI_TEXTURED, ICON_DATA_TEXTURE, x, y, 0, 0, WIDTH, HEIGHT, WIDTH, HEIGHT);
+ drawContext.drawItem(skill.getIcon(), x + 3, y + 4);
+ drawContext.drawText(textRenderer, skill.getName() + " " + levelInfo.level, x + 31, y + 4, -1, false);
+ Color fillColor = Color.GREEN;
+ var skillCap = NEURepoManager.getConstants().getLeveling().getMaximumLevels().get(skill.name().toLowerCase(Locale.ROOT));
+ if (softSkillCap.isPresent() && levelInfo.level > softSkillCap.getAsInt())
+ fillColor = Color.YELLOW;
+ if (levelInfo.level >= skillCap)
+ fillColor = Color.MAGENTA;
+ drawContext.drawGuiTexture(RenderPipelines.GUI_TEXTURED, BAR_BACK, x + 30, y + 14, 75, 6);
+ HudHelper.renderNineSliceColored(drawContext, BAR_FILL, x + 30, y + 14, (int) (75 * levelInfo.fill), 6, fillColor);
+
+ // TODO: add helper for hover selection
+ if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 14 && mouseY < y + 21) {
+ List<Text> tooltipText = new ArrayList<>();
+ tooltipText.add(Text.literal(skill.getName()).formatted(Formatting.GREEN));
+ tooltipText.add(Text.literal("XP: " + Formatters.INTEGER_NUMBERS.format(levelInfo.xp)).formatted(Formatting.GOLD));
+ if (levelInfo.level < skillCap) {
+ tooltipText.add(Text.literal("XP till " + (levelInfo.level + 1) + ": " + Formatters.INTEGER_NUMBERS.format(levelInfo.nextLevelXP - levelInfo.levelXP)).formatted(Formatting.GRAY));
+ }
+ drawContext.drawTooltip(textRenderer, tooltipText, mouseX, mouseY);
+ }
+ }
+
+ @Override
+ public int getHeight() {
+ return HEIGHT;
+ }
+
+ @Override
+ public int getWidth() {
+ return WIDTH;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java
index bb57cd1b..cc01ac5d 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java
@@ -1,68 +1,15 @@
package de.hysky.skyblocker.skyblock.profileviewer.rework.pages;
-import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.skyblock.profileviewer.model.PlayerData;
import de.hysky.skyblocker.skyblock.profileviewer.rework.*;
-import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
-import de.hysky.skyblocker.utils.Formatters;
-import de.hysky.skyblocker.utils.NEURepoManager;
-import de.hysky.skyblocker.utils.render.HudHelper;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gl.RenderPipelines;
-import net.minecraft.client.gui.DrawContext;
import net.minecraft.item.ItemStack;
-import net.minecraft.text.Text;
-import net.minecraft.util.Formatting;
-import net.minecraft.util.Identifier;
-import java.awt.*;
-import java.util.ArrayList;
+import java.util.*;
import java.util.List;
-import java.util.Locale;
-import java.util.OptionalInt;
public class SkillsPage implements ProfileViewerPage {
- private static final Identifier ICON_DATA_TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/icon_data_widget.png");
- private static final Identifier BAR_FILL = Identifier.of(SkyblockerMod.NAMESPACE, "bars/bar_fill");
- private static final Identifier BAR_BACK = Identifier.of(SkyblockerMod.NAMESPACE, "bars/bar_back");
-
- record SkillWidget(
- PlayerData.Skill skill,
- LevelFinder.LevelInfo levelInfo,
- OptionalInt softSkillCap
- ) implements ProfileViewerWidget {
- static TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
-
- @Override
- public void render(DrawContext drawContext,
- int x, int y, int mouseX, int mouseY, float deltaTicks) {
- drawContext.drawTexture(RenderPipelines.GUI_TEXTURED, ICON_DATA_TEXTURE, x, y, 0, 0, 109, 26, 109, 26);
- drawContext.drawItem(skill.getIcon(), x + 3, y + 4);
- drawContext.drawText(textRenderer, skill.getName() + " " + levelInfo.level, x + 31, y + 4, -1, false);
- Color fillColor = Color.GREEN;
- var skillCap = NEURepoManager.getConstants().getLeveling().getMaximumLevels().get(skill.name().toLowerCase(Locale.ROOT));
- if (softSkillCap.isPresent() && levelInfo.level > softSkillCap.getAsInt())
- fillColor = Color.YELLOW;
- if (levelInfo.level >= skillCap)
- fillColor = Color.MAGENTA;
- drawContext.drawGuiTexture(RenderPipelines.GUI_TEXTURED, BAR_BACK, x + 30, y + 14, 75, 6);
- HudHelper.renderNineSliceColored(drawContext, BAR_FILL, x + 30, y + 14, (int) (75 * levelInfo.fill), 6, fillColor);
- // TODO: add helper for hover selection
-
- if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 14 && mouseY < y + 21) {
- List<Text> tooltipText = new ArrayList<>();
- tooltipText.add(Text.literal(skill.getName()).formatted(Formatting.GREEN));
- tooltipText.add(Text.literal("XP: " + Formatters.INTEGER_NUMBERS.format(levelInfo.xp)).formatted(Formatting.GOLD));
- if (levelInfo.level < skillCap) {
- tooltipText.add(Text.literal("XP till " + (levelInfo.level + 1) + ": " + Formatters.INTEGER_NUMBERS.format(levelInfo.nextLevelXP - levelInfo.levelXP)).formatted(Formatting.GRAY));
- }
- drawContext.drawTooltip(textRenderer, tooltipText, mouseX, mouseY);
- }
- }
- }
List<ProfileViewerWidget.Instance> widgets = new ArrayList<>();