aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-09-20 01:44:30 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-09-20 01:44:30 -0400
commit7fa219a62cc42aa57f54b42fcc8f6c7d46b13356 (patch)
tree93c8a96ce18d9a6ed40f56bd5010c189db3e9da9 /src/main/java
parentc6522b8d8b3389c6ee60f6cf6fc83bffa3436618 (diff)
downloadSkyblocker-7fa219a62cc42aa57f54b42fcc8f6c7d46b13356.tar.gz
Skyblocker-7fa219a62cc42aa57f54b42fcc8f6c7d46b13356.tar.bz2
Skyblocker-7fa219a62cc42aa57f54b42fcc8f6c7d46b13356.zip
Fix Skin Fetch Fails
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java65
1 files changed, 39 insertions, 26 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
index d789f5d9..91b569a2 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerScreen.java
@@ -5,9 +5,10 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import com.mojang.util.UndashedUuid;
+
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
-import de.hysky.skyblocker.mixins.accessors.SkullBlockEntityAccessor;
import de.hysky.skyblocker.skyblock.profileviewer.collections.CollectionsPage;
import de.hysky.skyblocker.skyblock.profileviewer.dungeons.DungeonsPage;
import de.hysky.skyblocker.skyblock.profileviewer.inventory.InventoryPage;
@@ -22,6 +23,7 @@ import it.unimi.dsi.fastutil.ints.IntList;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.block.entity.SkullBlockEntity;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
@@ -146,35 +148,46 @@ public class ProfileViewerScreen extends Screen {
}
});
- CompletableFuture<Void> minecraftProfileFuture = SkullBlockEntityAccessor.invokeFetchProfileByName(username).thenAccept(profile -> {
- this.playerName = profile.get().getName();
- entity = new OtherClientPlayerEntity(MinecraftClient.getInstance().world, profile.get()) {
- @Override
- public SkinTextures getSkinTextures() {
- PlayerListEntry playerListEntry = new PlayerListEntry(profile.get(), false);
- return playerListEntry.getSkinTextures();
- }
+ CompletableFuture<Void> playerFuture = CompletableFuture.runAsync(() -> {
+ String stringifiedUuid = ApiUtils.name2Uuid(username);
- @Override
- public boolean isPartVisible(PlayerModelPart modelPart) {
- return !(modelPart.getName().equals(PlayerModelPart.CAPE.getName()));
- }
+ if (stringifiedUuid.isEmpty()) {
+ this.playerName = "User not found";
+ this.profileNotFound = true;
+ }
+
+ UUID uuid = UndashedUuid.fromStringLenient(stringifiedUuid);
+
+ //The fetch by name method can sometimes fail in weird cases and return a fake offline player
+ SkullBlockEntity.fetchProfileByUuid(uuid).thenAccept(profile -> {
+ this.playerName = profile.get().getName();
+ entity = new OtherClientPlayerEntity(MinecraftClient.getInstance().world, profile.get()) {
+ @Override
+ public SkinTextures getSkinTextures() {
+ PlayerListEntry playerListEntry = new PlayerListEntry(profile.get(), false);
+ return playerListEntry.getSkinTextures();
+ }
- @Override
- public boolean isInvisibleTo(PlayerEntity player) {
- return true;
- }
- };
- entity.setCustomNameVisible(false);
- }).exceptionally(ex -> {
- this.playerName = "User not found";
- this.profileNotFound = true;
- return null;
- });
+ @Override
+ public boolean isPartVisible(PlayerModelPart modelPart) {
+ return !(modelPart.getName().equals(PlayerModelPart.CAPE.getName()));
+ }
- return CompletableFuture.allOf(profileFuture, minecraftProfileFuture);
- }
+ @Override
+ public boolean isInvisibleTo(PlayerEntity player) {
+ return true;
+ }
+ };
+ entity.setCustomNameVisible(false);
+ }).exceptionally(ex -> {
+ this.playerName = "User not found";
+ this.profileNotFound = true;
+ return null;
+ }).join();
+ });
+ return CompletableFuture.allOf(profileFuture, playerFuture);
+ }
public void onNavButtonClick(ProfileViewerNavButton clickedButton) {
if (profileViewerPages[activePage] != null) profileViewerPages[activePage].markWidgetsAsInvisible();