Use /profiles/minecraft instead of /users/profiles/minecraft
The authlib-injector spect does not require /users/profiles/minecraft to be implemented, so we should POST to /profiles/minecraft to get player UUIDs.
This commit is contained in:
parent
5f747af9db
commit
30f19a655a
@ -79,12 +79,12 @@ public final class OnlineModeFix {
|
||||
throw new AssertionError("missing sessionId");
|
||||
}
|
||||
|
||||
// sessionId hashas the form:
|
||||
// sessionId has the form:
|
||||
// token:<accessToken>:<player UUID>
|
||||
String accessToken = sessionId.split(":")[1];
|
||||
|
||||
String uuid = null;
|
||||
uuid = MojangApi.getUuid(user);
|
||||
uuid = MojangApi.getUuid(user, proxy);
|
||||
if (uuid == null) {
|
||||
return new ByteArrayUrlConnection(("Couldn't find UUID of " + user).getBytes("utf-8"));
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ final class SkinFix {
|
||||
if (capeOwner != null) {
|
||||
// since we do not need to process the image, open a direct connection bypassing
|
||||
// Handler
|
||||
Texture texture = MojangApi.getTexture(MojangApi.getUuid(capeOwner), "CAPE");
|
||||
Texture texture = MojangApi.getTexture(MojangApi.getUuid(capeOwner, proxy), "CAPE");
|
||||
if (texture == null)
|
||||
return null;
|
||||
|
||||
@ -91,7 +91,7 @@ final class SkinFix {
|
||||
}
|
||||
|
||||
private static URLConnection getSkinConnection(String owner, Proxy proxy) throws IOException {
|
||||
Texture texture = MojangApi.getTexture(MojangApi.getUuid(owner), "SKIN");
|
||||
Texture texture = MojangApi.getTexture(MojangApi.getUuid(owner, proxy), "SKIN");
|
||||
if (texture == null)
|
||||
return null;
|
||||
|
||||
|
@ -38,10 +38,15 @@ package org.prismlauncher.legacy.utils.api;
|
||||
import org.prismlauncher.legacy.utils.Base64;
|
||||
import org.prismlauncher.legacy.utils.api.ApiServers;
|
||||
import org.prismlauncher.legacy.utils.json.JsonParser;
|
||||
import org.prismlauncher.legacy.utils.url.UrlUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.Proxy;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -49,10 +54,20 @@ import java.util.Map;
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public final class MojangApi {
|
||||
public static String getUuid(String username) throws IOException {
|
||||
try (InputStream in = new URL(ApiServers.getAccountURL() + "/users/profiles/minecraft/" + username).openStream()) {
|
||||
Map<String, Object> map = (Map<String, Object>) JsonParser.parse(in);
|
||||
return (String) map.get("id");
|
||||
public static String getUuid(String username, Proxy proxy) throws IOException {
|
||||
URL url = new URL(ApiServers.getAccountURL() + "/profiles/minecraft");
|
||||
HttpURLConnection connection = (HttpURLConnection) UrlUtils.openConnection(url, proxy);
|
||||
connection.setDoOutput(true);
|
||||
connection.setRequestMethod("POST");
|
||||
connection.setRequestProperty("Content-Type", "application/json");
|
||||
connection.setRequestProperty("Accept", "application/json");
|
||||
try (OutputStream os = connection.getOutputStream()) {
|
||||
String payload = "[\"" + username + "\"]";
|
||||
os.write(payload.getBytes("utf-8"));
|
||||
}
|
||||
try (InputStream in = connection.getInputStream()) {
|
||||
List<Map<String, Object>> list = (List<Map<String, Object>>) JsonParser.parse(in);
|
||||
return (String) list.get(0).get("id");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user