diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-07-31 23:56:46 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-07-31 23:56:46 +0200 |
| commit | 8a8620fc640031be4195426afc90387b95e88681 (patch) | |
| tree | 2efaa3384ca83564c34a45909817924efe436085 /src/main/java/de | |
| parent | 17ce787a262cbd96ecf969d30afa8b7a5f2299d3 (diff) | |
| download | Skyblocker-8a8620fc640031be4195426afc90387b95e88681.tar.gz Skyblocker-8a8620fc640031be4195426afc90387b95e88681.tar.bz2 Skyblocker-8a8620fc640031be4195426afc90387b95e88681.zip | |
Add player meta widget
Diffstat (limited to 'src/main/java/de')
4 files changed, 104 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMemberProfile.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMemberProfile.java index 51c0cc8b..b4b41e2a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMemberProfile.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMemberProfile.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.profileviewer.model; import com.google.gson.annotations.SerializedName; +import org.jetbrains.annotations.Nullable; public class ProfileMemberProfile { @SerializedName("first_join") @@ -9,8 +10,9 @@ public class ProfileMemberProfile { public boolean cookie_buff_active; // TODO: deletion_notice, coop_invitation /** + * If this is not present, the person is not in a coop, and only has the shared coop bank, instead of a personal one. * @see ApiProfile#banking */ @SerializedName("bank_account") - public double personalBankAccount; + public @Nullable Double personalBankAccount; } 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 22fc5c8a..f92cf188 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 @@ -10,6 +10,10 @@ public interface ProfileViewerWidget { default void click(int x, int y, int mouseX, int mouseY) {} + default boolean isHovered(int x, int y, int width, int height, int mouseX, int mouseY) { + return x <= mouseX && mouseX < x + width && y <= mouseY && mouseY < y + height; + } + int getHeight(); int getWidth(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/PlayerMetaWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/PlayerMetaWidget.java new file mode 100644 index 00000000..f88f8008 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/PlayerMetaWidget.java @@ -0,0 +1,96 @@ +package de.hysky.skyblocker.skyblock.profileviewer.rework.pages; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.skyblock.profileviewer.rework.ProfileLoadState; +import de.hysky.skyblocker.skyblock.profileviewer.rework.ProfileViewerWidget; +import de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils; +import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +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.Colors; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class PlayerMetaWidget implements ProfileViewerWidget { + public static final Identifier BACKGROUND = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/basic_page_body_widget.png"); + public static final int WIDTH = 82, HEIGHT = 54; + TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + private static final int ROW_GAP = 9; + + final int skyblockExperience; + final Text profileName; + final int skyblockLevel; + final double purse; + final @Nullable Double personalBank; + final double coopBank; + final double totalBank; + + public PlayerMetaWidget(ProfileLoadState.SuccessfulLoad load) { + this.profileName = Text.literal(load.profile().cuteName).formatted(Formatting.UNDERLINE); + this.skyblockExperience = load.member().leveling.experience; + this.skyblockLevel = skyblockExperience / 100; + this.purse = load.member().currencies.coinsInPurse; + this.personalBank = load.member().profile.personalBankAccount; + this.coopBank = load.profile().banking.balance; + this.totalBank = personalBank != null ? personalBank + coopBank : coopBank; + // TODO: networth + } + + @Override + public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, float deltaTicks) { + drawContext.drawTexture(RenderPipelines.GUI_TEXTURED, BACKGROUND, x, y, 0, 0, WIDTH, HEIGHT, WIDTH, HEIGHT); + var matrices = drawContext.getMatrices(); + matrices.pushMatrix(); + matrices.translate(x, y); + matrices.scale(0.75F, 0.75F); + drawContext.drawItem(Ico.PAINTING, 0, 0); + matrices.popMatrix(); + drawContext.drawText(textRenderer, profileName, x + 14, y + 3, Colors.WHITE, true); + drawContext.drawText(textRenderer, Text.literal("Level: ") + .formatted(Formatting.GREEN) + .append(Text.literal(skyblockLevel + "") + .formatted(Formatting.WHITE)), + x + 2, y + 6 + ROW_GAP, Colors.WHITE, true); + drawContext.drawText(textRenderer, Text.literal("Purse: ") + .formatted(Formatting.GOLD) + .append(Text.literal(ProfileViewerUtils.numLetterFormat(purse)) + .formatted(Formatting.WHITE)), + x + 2, y + 6 + ROW_GAP * 2, Colors.WHITE, true); + var bankText = Text.literal("Bank: ") + .formatted(Formatting.GOLD) + .append(Text.literal(ProfileViewerUtils.numLetterFormat(totalBank)) + .formatted(Formatting.WHITE)); + drawContext.drawText(textRenderer, bankText, x + 2, y + 6 + ROW_GAP * 3, Colors.WHITE, true); + if (isHovered(x + 2, y + 6 + ROW_GAP * 3, textRenderer.getWidth(bankText), textRenderer.fontHeight, mouseX, mouseY)) { + var tooltip = new ArrayList<Text>(); + tooltip.add(Text.literal("Main Bank: ") + .formatted(Formatting.GOLD) + .append(Text.literal(ProfileViewerUtils.numLetterFormat(totalBank)) + .formatted(Formatting.WHITE))); + if (personalBank != null) // TODO: bank upgrades (completed_tasks.BANK_UPGRADE_SUPER_DELUXE), interest! + tooltip.add(Text.literal("Personal Bank: ") + .formatted(Formatting.GOLD) + .append(Text.literal(ProfileViewerUtils.numLetterFormat(personalBank)) + .formatted(Formatting.WHITE))); + drawContext.drawTooltip(textRenderer, tooltip, mouseX, mouseY); + } + // TODO: networth + } + + @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 b327351b..cddc78e6 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 @@ -47,6 +47,7 @@ public class SkillsPage implements ProfileViewerPage { )); } widgets.add(widget(0, 0, new EntityViewerWidget(load.mainMemberId()))); + widgets.add(widget(0, 112, new PlayerMetaWidget(load))); } @Init |
