aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-07-31 23:02:43 +0200
committerLinnea Gräf <nea@nea.moe>2025-07-31 23:03:36 +0200
commit17ce787a262cbd96ecf969d30afa8b7a5f2299d3 (patch)
tree3d3ba51edaa612e16d13a9b21e7cf5f471712ebc /src
parent5df247974bb6d7b9088759f99f65e60b59124c70 (diff)
downloadSkyblocker-17ce787a262cbd96ecf969d30afa8b7a5f2299d3.tar.gz
Skyblocker-17ce787a262cbd96ecf969d30afa8b7a5f2299d3.tar.bz2
Skyblocker-17ce787a262cbd96ecf969d30afa8b7a5f2299d3.zip
add entity widget
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/EntityViewerWidget.java102
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java1
-rw-r--r--src/main/resources/assets/skyblocker/textures/gui/profile_viewer/entity_widget.png (renamed from src/main/resources/assets/skyblocker/textures/gui/profile_viewer/entitiy_widget.png)bin258 -> 258 bytes
3 files changed, 103 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/EntityViewerWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/EntityViewerWidget.java
new file mode 100644
index 00000000..3077c887
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/EntityViewerWidget.java
@@ -0,0 +1,102 @@
+package de.hysky.skyblocker.skyblock.profileviewer.rework.pages;
+
+import com.mojang.authlib.GameProfile;
+import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.skyblock.profileviewer.rework.ProfileViewerWidget;
+import net.minecraft.block.entity.SkullBlockEntity;
+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.client.gui.screen.ingame.InventoryScreen;
+import net.minecraft.client.network.OtherClientPlayerEntity;
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.client.util.SkinTextures;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.entity.player.PlayerModelPart;
+import net.minecraft.util.Identifier;
+
+import java.awt.*;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+
+public class EntityViewerWidget implements ProfileViewerWidget {
+
+ public static final Identifier BACKGROUND = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/profile_viewer/entity_widget.png");
+ public static final int WIDTH = 82, HEIGHT = 110;
+
+ sealed interface LoadedEntity {
+ record Success(GameProfile profile, OtherClientPlayerEntity entity) implements LoadedEntity {
+ public String name() {
+ return profile.getName();
+ }
+ }
+
+ record Loading() implements LoadedEntity {}
+
+ record Failure() implements LoadedEntity {}
+ }
+
+ CompletableFuture<LoadedEntity> loadedEntity;
+ TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+
+ public EntityViewerWidget(UUID uuid) {
+ loadedEntity = SkullBlockEntity.fetchProfileByUuid(uuid)
+ .<LoadedEntity>thenApply(profile -> {
+ var profileUnwrapped = profile.get();
+ var entity = new OtherClientPlayerEntity(MinecraftClient.getInstance().world, profileUnwrapped) {
+ @Override
+ public SkinTextures getSkinTextures() {
+ PlayerListEntry playerListEntry = new PlayerListEntry(profileUnwrapped, false);
+ return playerListEntry.getSkinTextures();
+ }
+
+ @Override
+ public boolean isPartVisible(PlayerModelPart modelPart) {
+ return !(modelPart.getName().equals(PlayerModelPart.CAPE.getName()));
+ }
+
+ @Override
+ public boolean isInvisibleTo(PlayerEntity player) {
+ return true;
+ }
+ };
+ entity.setCustomNameVisible(false);
+ return new LoadedEntity.Success(profileUnwrapped, entity);
+ }).exceptionally(ex -> {
+// // "Player not found" doesn't fit on the screen lol
+// this.playerName = "User not found";
+// this.errorMessage = "Player skin not found";
+// this.profileNotFound = true;
+ return new LoadedEntity.Failure();
+ });
+ }
+
+ @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);
+ switch (loadedEntity.getNow(new LoadedEntity.Loading())) {
+ case LoadedEntity.Failure failure -> {
+ // TODO: I should totally add an error message here
+ }
+ case LoadedEntity.Loading loading -> {
+ // I should totally add a throbber here...
+ }
+ case LoadedEntity.Success success -> {
+ var username = success.name();
+ InventoryScreen.drawEntity(drawContext, x, y + 16, x + WIDTH, y + HEIGHT, 42, 0.0625F, mouseX, mouseY, success.entity);
+ drawContext.drawCenteredTextWithShadow(textRenderer, username.length() > 15 ? username.substring(0, 15) : username, x + 40, y + 14, Color.WHITE.getRGB());
+ }
+ }
+ }
+
+ @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 2e380216..b327351b 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
@@ -46,6 +46,7 @@ public class SkillsPage implements ProfileViewerPage {
x, y, skill
));
}
+ widgets.add(widget(0, 0, new EntityViewerWidget(load.mainMemberId())));
}
@Init
diff --git a/src/main/resources/assets/skyblocker/textures/gui/profile_viewer/entitiy_widget.png b/src/main/resources/assets/skyblocker/textures/gui/profile_viewer/entity_widget.png
index 6be2f33d..6be2f33d 100644
--- a/src/main/resources/assets/skyblocker/textures/gui/profile_viewer/entitiy_widget.png
+++ b/src/main/resources/assets/skyblocker/textures/gui/profile_viewer/entity_widget.png
Binary files differ