aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-07-31 23:56:46 +0200
committerLinnea Gräf <nea@nea.moe>2025-07-31 23:56:46 +0200
commit8a8620fc640031be4195426afc90387b95e88681 (patch)
tree2efaa3384ca83564c34a45909817924efe436085 /src/main/java/de
parent17ce787a262cbd96ecf969d30afa8b7a5f2299d3 (diff)
downloadSkyblocker-8a8620fc640031be4195426afc90387b95e88681.tar.gz
Skyblocker-8a8620fc640031be4195426afc90387b95e88681.tar.bz2
Skyblocker-8a8620fc640031be4195426afc90387b95e88681.zip
Add player meta widget
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/model/ProfileMemberProfile.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/ProfileViewerWidget.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/PlayerMetaWidget.java96
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java1
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