diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-07-31 18:02:08 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-07-31 18:09:41 +0200 |
| commit | ee6ff9a7d7b77efa16d1735aa8a684e442bdccee (patch) | |
| tree | eaa21b4997c7ff7fff8df4aed26f72b60f1f0265 /src/main/java | |
| parent | 31511ecd012c5dbe8cc2c8a7245851392cdf6f58 (diff) | |
| download | Skyblocker-ee6ff9a7d7b77efa16d1735aa8a684e442bdccee.tar.gz Skyblocker-ee6ff9a7d7b77efa16d1735aa8a684e442bdccee.tar.bz2 Skyblocker-ee6ff9a7d7b77efa16d1735aa8a684e442bdccee.zip | |
Update to use clickable widget
Diffstat (limited to 'src/main/java')
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<>(); |
