From 47f51301b50d6f93d02a05b5dde4d03a47da9655 Mon Sep 17 00:00:00 2001 From: noramibuu Date: Tue, 30 Sep 2025 12:33:28 +0300 Subject: [PATCH 1/5] use uuids for lookup and update usernames --- .../meteorclient/systems/config/Config.java | 7 ++++++ .../meteorclient/systems/friends/Friend.java | 25 +++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java b/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java index fbb9898355..3adcc65f76 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java @@ -159,6 +159,13 @@ public class Config extends System { .build() ); + public final Setting useUUIDsForLookup = sgMisc.add(new BoolSetting.Builder() + .name("use-uuids-to-lookup") + .description("Uses UUIDs to lookup for friends when available.") + .defaultValue(true) + .build() + ); + public List dontShowAgainPrompts = new ArrayList<>(); public Config() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java index 35514dfc60..491394f09c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.systems.friends; import com.mojang.util.UndashedUuid; +import meteordevelopment.meteorclient.systems.config.Config; import meteordevelopment.meteorclient.utils.misc.ISerializable; import meteordevelopment.meteorclient.utils.network.Http; import meteordevelopment.meteorclient.utils.render.PlayerHeadTexture; @@ -49,11 +50,25 @@ public PlayerHeadTexture getHead() { public void updateInfo() { updating = true; - APIResponse res = Http.get("https://api.mojang.com/users/profiles/minecraft/" + name).sendJson(APIResponse.class); - if (res == null || res.name == null || res.id == null) return; - name = res.name; - id = UndashedUuid.fromStringLenient(res.id); - mc.execute(() -> headTexture = PlayerHeadUtils.fetchHead(id)); + + APIResponse res = null; + + // Prefer UUID-based lookup when configured and UUID is known + if (Config.get().useUUIDsForLookup.get() && id != null) { + res = Http.get("https://sessionserver.mojang.com/session/minecraft/profile/" + UndashedUuid.toString(id)).sendJson(APIResponse.class); + } + + // Fallback to name-based lookup + if (res == null || res.name == null || res.id == null) { + res = Http.get("https://api.mojang.com/users/profiles/minecraft/" + name).sendJson(APIResponse.class); + } + + if (res != null && res.name != null && res.id != null) { + name = res.name; + id = UndashedUuid.fromStringLenient(res.id); + mc.execute(() -> headTexture = PlayerHeadUtils.fetchHead(id)); + } + updating = false; } From 4221c5eaae1f7781a18c4c0cc1d3f0aef7f827ce Mon Sep 17 00:00:00 2001 From: noramibuu Date: Thu, 2 Oct 2025 22:15:01 +0300 Subject: [PATCH 2/5] remove config option for useUUIDsForLookup --- .../meteorclient/systems/config/Config.java | 7 ------- .../meteorclient/systems/friends/Friend.java | 4 +--- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java b/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java index 3adcc65f76..fbb9898355 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/config/Config.java @@ -159,13 +159,6 @@ public class Config extends System { .build() ); - public final Setting useUUIDsForLookup = sgMisc.add(new BoolSetting.Builder() - .name("use-uuids-to-lookup") - .description("Uses UUIDs to lookup for friends when available.") - .defaultValue(true) - .build() - ); - public List dontShowAgainPrompts = new ArrayList<>(); public Config() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java index 491394f09c..e7c77da8a7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java @@ -6,7 +6,6 @@ package meteordevelopment.meteorclient.systems.friends; import com.mojang.util.UndashedUuid; -import meteordevelopment.meteorclient.systems.config.Config; import meteordevelopment.meteorclient.utils.misc.ISerializable; import meteordevelopment.meteorclient.utils.network.Http; import meteordevelopment.meteorclient.utils.render.PlayerHeadTexture; @@ -53,8 +52,7 @@ public void updateInfo() { APIResponse res = null; - // Prefer UUID-based lookup when configured and UUID is known - if (Config.get().useUUIDsForLookup.get() && id != null) { + if (id != null) { res = Http.get("https://sessionserver.mojang.com/session/minecraft/profile/" + UndashedUuid.toString(id)).sendJson(APIResponse.class); } From 09495f075c6364eaffc39508b573fa7562d7278e Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 3 Oct 2025 20:13:52 +0100 Subject: [PATCH 3/5] remove dynamic refreshing from the friends tab because its more trouble than its worth --- .../meteorclient/gui/tabs/builtin/FriendsTab.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java index b5c1c305ec..0451e3519b 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java @@ -80,7 +80,6 @@ private void initTable(WTable table) { MeteorExecutor.execute(() -> { if (friend.headTextureNeedsUpdate()) { friend.updateInfo(); - reload(); } }) ); From 7a1e184fac7b3be299944e7725a1651f453d97e6 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 3 Oct 2025 20:42:59 +0100 Subject: [PATCH 4/5] strip ids from cracked accounts, set Http exception handler --- .../meteorclient/systems/friends/Friend.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java index e7c77da8a7..125479962d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friend.java @@ -6,7 +6,9 @@ package meteordevelopment.meteorclient.systems.friends; import com.mojang.util.UndashedUuid; +import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.utils.misc.ISerializable; +import meteordevelopment.meteorclient.utils.network.FailedHttpResponse; import meteordevelopment.meteorclient.utils.network.Http; import meteordevelopment.meteorclient.utils.render.PlayerHeadTexture; import meteordevelopment.meteorclient.utils.render.PlayerHeadUtils; @@ -15,6 +17,7 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; +import java.net.http.HttpResponse; import java.util.Objects; import java.util.UUID; @@ -49,24 +52,32 @@ public PlayerHeadTexture getHead() { public void updateInfo() { updating = true; - - APIResponse res = null; + HttpResponse res = null; if (id != null) { - res = Http.get("https://sessionserver.mojang.com/session/minecraft/profile/" + UndashedUuid.toString(id)).sendJson(APIResponse.class); + res = Http.get("https://sessionserver.mojang.com/session/minecraft/profile/" + UndashedUuid.toString(id)) + .exceptionHandler(e -> MeteorClient.LOG.error("Error while trying to connect session server for friend '{}'", name)) + .sendJsonResponse(APIResponse.class); } // Fallback to name-based lookup - if (res == null || res.name == null || res.id == null) { - res = Http.get("https://api.mojang.com/users/profiles/minecraft/" + name).sendJson(APIResponse.class); + if (res == null || res.statusCode() != 200) { + res = Http.get("https://api.mojang.com/users/profiles/minecraft/" + name) + .exceptionHandler(e -> MeteorClient.LOG.error("Error while trying to update info for friend '{}'", name)) + .sendJsonResponse(APIResponse.class); } - if (res != null && res.name != null && res.id != null) { - name = res.name; - id = UndashedUuid.fromStringLenient(res.id); + if (res != null && res.statusCode() == 200) { + name = res.body().name; + id = UndashedUuid.fromStringLenient(res.body().id); mc.execute(() -> headTexture = PlayerHeadUtils.fetchHead(id)); } + // cracked accounts shouldn't be assigned ids + else if (!(res instanceof FailedHttpResponse)) { + id = null; + } + updating = false; } @@ -104,7 +115,7 @@ public int hashCode() { @Override public int compareTo(@NotNull Friend friend) { - return name.compareTo(friend.name); + return name.compareToIgnoreCase(friend.name); } private static class APIResponse { From 47d9f44da3120d558a473560baf8e5fb2179f8a8 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 3 Oct 2025 20:44:40 +0100 Subject: [PATCH 5/5] reload friends tab on the main thread, should make it more consistent --- .../meteorclient/gui/tabs/builtin/FriendsTab.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java index 0451e3519b..aeaec4e1ed 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/FriendsTab.java @@ -20,6 +20,8 @@ import meteordevelopment.meteorclient.utils.network.MeteorExecutor; import net.minecraft.client.gui.screen.Screen; +import static meteordevelopment.meteorclient.MeteorClient.mc; + public class FriendsTab extends Tab { public FriendsTab() { super("Friends"); @@ -64,7 +66,7 @@ public void initWidgets() { MeteorExecutor.execute(() -> { friend.updateInfo(); - reload(); + mc.execute(this::reload); }); } };