diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-07-31 23:02:43 +0200 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-07-31 23:03:36 +0200 |
| commit | 17ce787a262cbd96ecf969d30afa8b7a5f2299d3 (patch) | |
| tree | 3d3ba51edaa612e16d13a9b21e7cf5f471712ebc /src | |
| parent | 5df247974bb6d7b9088759f99f65e60b59124c70 (diff) | |
| download | Skyblocker-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.java | 102 | ||||
| -rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/profileviewer/rework/pages/SkillsPage.java | 1 | ||||
| -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) | bin | 258 -> 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 Binary files differindex 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 |
