1
0
mirror of https://github.com/Suiranoil/SkinRestorer.git synced 2026-01-16 04:42:12 +00:00

add ely.by provider

This commit is contained in:
2024-07-02 01:24:40 +03:00
parent 3e88781186
commit 399636e1ae
5 changed files with 97 additions and 23 deletions

View File

@@ -59,6 +59,7 @@ public final class SkinRestorer {
SkinRestorer.providersRegistry.register(EmptySkinProvider.PROVIDER_NAME, SkinProvider.EMPTY, false); SkinRestorer.providersRegistry.register(EmptySkinProvider.PROVIDER_NAME, SkinProvider.EMPTY, false);
SkinRestorer.providersRegistry.register(MojangSkinProvider.PROVIDER_NAME, SkinProvider.MOJANG); SkinRestorer.providersRegistry.register(MojangSkinProvider.PROVIDER_NAME, SkinProvider.MOJANG);
SkinRestorer.providersRegistry.register(ElyBySkinProvider.PROVIDER_NAME, SkinProvider.ELY_BY);
SkinRestorer.providersRegistry.register(MineskinSkinProvider.PROVIDER_NAME, SkinProvider.MINESKIN); SkinRestorer.providersRegistry.register(MineskinSkinProvider.PROVIDER_NAME, SkinProvider.MINESKIN);
} }

View File

@@ -0,0 +1,71 @@
package net.lionarius.skinrestorer.skin.provider;
import com.google.gson.JsonObject;
import com.mojang.authlib.properties.Property;
import net.lionarius.skinrestorer.skin.SkinVariant;
import net.lionarius.skinrestorer.util.JsonUtils;
import net.lionarius.skinrestorer.util.PlayerUtils;
import net.lionarius.skinrestorer.util.Result;
import net.lionarius.skinrestorer.util.WebUtils;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpRequest;
import java.util.Optional;
public final class ElyBySkinProvider implements SkinProvider {
public static final String PROVIDER_NAME = "ely.by";
private static final URI API_URI;
static {
try {
API_URI = new URI("http://skinsystem.ely.by/");
} catch (URISyntaxException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public String getArgumentName() {
return "username";
}
@Override
public boolean hasVariantSupport() {
return false;
}
@Override
public Result<Optional<Property>, Exception> getSkin(String username, SkinVariant variant) {
try {
var profile = ElyBySkinProvider.getElyByProfile(username);
var properties = profile.getAsJsonArray("properties");
var textures = PlayerUtils.findTexturesProperty(properties);
return Result.ofNullable(textures);
} catch (Exception e) {
return Result.error(e);
}
}
private static JsonObject getElyByProfile(String username) throws IOException {
var request = HttpRequest.newBuilder()
.uri(ElyBySkinProvider.API_URI
.resolve("textures/signed/")
.resolve(username + "?unsigned=false")
)
.GET()
.build();
var response = WebUtils.executeRequest(request);
WebUtils.throwOnClientErrors(response);
if (response.statusCode() != 200)
throw new IllegalArgumentException("no profile with name " + username);
return JsonUtils.parseJson(response.body());
}
}

View File

@@ -1,11 +1,11 @@
package net.lionarius.skinrestorer.skin.provider; package net.lionarius.skinrestorer.skin.provider;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.Property;
import net.lionarius.skinrestorer.skin.SkinVariant; import net.lionarius.skinrestorer.skin.SkinVariant;
import net.lionarius.skinrestorer.util.JsonUtils; import net.lionarius.skinrestorer.util.JsonUtils;
import net.lionarius.skinrestorer.util.PlayerUtils;
import net.lionarius.skinrestorer.util.Result; import net.lionarius.skinrestorer.util.Result;
import net.lionarius.skinrestorer.util.WebUtils; import net.lionarius.skinrestorer.util.WebUtils;
@@ -52,7 +52,7 @@ public final class MojangSkinProvider implements SkinProvider {
var profile = MojangSkinProvider.getMojangProfile(uuid); var profile = MojangSkinProvider.getMojangProfile(uuid);
var properties = profile.getAsJsonArray("properties"); var properties = profile.getAsJsonArray("properties");
var textures = MojangSkinProvider.findTexturesProperty(properties); var textures = PlayerUtils.findTexturesProperty(properties);
return Result.ofNullable(textures); return Result.ofNullable(textures);
} catch (Exception e) { } catch (Exception e) {
@@ -60,27 +60,6 @@ public final class MojangSkinProvider implements SkinProvider {
} }
} }
private static Property findTexturesProperty(JsonArray properties) {
Property textures = null;
for (var property : properties) {
var propertyObject = property.getAsJsonObject();
if (propertyObject == null)
continue;
try {
textures = JsonUtils.fromJson(propertyObject, Property.class);
break;
} catch (Exception e) {
// ignored
}
}
if (textures == null)
throw new IllegalStateException("no textures in profile");
return textures;
}
private static String getUuid(final String name) throws IOException { private static String getUuid(final String name) throws IOException {
var request = HttpRequest.newBuilder() var request = HttpRequest.newBuilder()
.uri(MojangSkinProvider.API_URI .uri(MojangSkinProvider.API_URI

View File

@@ -9,6 +9,7 @@ import java.util.Optional;
public interface SkinProvider { public interface SkinProvider {
EmptySkinProvider EMPTY = new EmptySkinProvider(); EmptySkinProvider EMPTY = new EmptySkinProvider();
MojangSkinProvider MOJANG = new MojangSkinProvider(); MojangSkinProvider MOJANG = new MojangSkinProvider();
ElyBySkinProvider ELY_BY = new ElyBySkinProvider();
MineskinSkinProvider MINESKIN = new MineskinSkinProvider(); MineskinSkinProvider MINESKIN = new MineskinSkinProvider();
String getArgumentName(); String getArgumentName();

View File

@@ -1,5 +1,6 @@
package net.lionarius.skinrestorer.util; package net.lionarius.skinrestorer.util;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.Property;
@@ -120,4 +121,25 @@ public final class PlayerUtils {
return xJson.equals(yJson); return xJson.equals(yJson);
} }
public static Property findTexturesProperty(JsonArray properties) {
Property textures = null;
for (var property : properties) {
var propertyObject = property.getAsJsonObject();
if (propertyObject == null)
continue;
try {
textures = JsonUtils.fromJson(propertyObject, Property.class);
break;
} catch (Exception e) {
// ignored
}
}
if (textures == null)
throw new IllegalStateException("no textures in profile");
return textures;
}
} }