From 96f201cdb44a93e6970c15efab3692aecb76e853 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Fri, 20 Feb 2026 02:45:42 +0100 Subject: [PATCH] Auth --- build.gradle | 2 +- .../saturnclient/client/ServiceClient.java | 39 +++++++------------ .../saturnclient/client/ServiceMethods.java | 12 ++---- .../client/player/SaturnPlayer.java | 24 ++++++++++++ .../cosmetics/CloakFeatureRenderer.java | 1 - .../saturnclient/cosmetics/cloaks/Cloaks.java | 11 +++--- 6 files changed, 49 insertions(+), 40 deletions(-) diff --git a/build.gradle b/build.gradle index 83ef670..3fcc938 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ dependencies { modApi "dev.felnull:special-model-loader:1.4.0+pre.1" include "dev.felnull:special-model-loader:1.4.0+pre.1" - implementation 'com.github.selimaj-dev:session-java:0.1.3' + implementation 'com.github.selimaj-dev:session-java:0.1.4' include modImplementation("dev.kosmx.player-anim:player-animation-lib-fabric:${project.player_anim}") //You might want bendy-lib. playerAnimator will wrap it. diff --git a/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java b/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java index d5ff6af..6b8595c 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java +++ b/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java @@ -9,6 +9,9 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.saturnclient.client.player.SaturnPlayer; +import org.saturnclient.saturnclient.cosmetics.Hats; +import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import dev.selimaj.session.Session; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; @@ -18,25 +21,11 @@ public class ServiceClient { public static UUID uuid; public static boolean connectTimeout() { - ExecutorService executor = Executors.newSingleThreadExecutor(); - - Callable task = () -> Session.connect("ws://localhost:3000"); - - Future future = executor.submit(task); - try { - session = future.get(10, TimeUnit.SECONDS); - System.out.println("Connected!"); + session = Session.connect("ws://localhost:3000", 0, null); return true; - } catch (TimeoutException e) { - System.out.println("Connection timed out!"); - future.cancel(true); - return false; } catch (Exception e) { - e.printStackTrace(); return false; - } finally { - executor.shutdown(); } } @@ -64,23 +53,23 @@ public class ServiceClient { SaturnClient.LOGGER.info("Authenticating with UUID: " + accessToken); if (!connectTimeout()) { + SaturnClient.LOGGER.error("Unable to authenticate: Session Server Timeout"); return false; } - // String cloak = parser.getString("cloak"); - // String hat = parser.getString("hat"); + ServiceMethods.AuthResponse response = session.request(ServiceMethods.Authenticate, accessToken).get(); - // for (String availableCloak : parser.getArray("cloaks")) { - // Cloaks.availableCloaks.add(availableCloak); - // } + for (String availableCloak : response.cloaks()) { + Cloaks.availableCloaks.add(availableCloak); + } - // for (String availableHat : parser.getArray("hats")) { - // Hats.availableHats.add(availableHat); - // } + for (String availableHat : response.hats()) { + Hats.availableHats.add(availableHat); + } - // players.put(uuid, new SaturnPlayer(cloak, hat)); + SaturnPlayer.set(uuid, new SaturnPlayer(response.cloak(), response.hat())); - // Cloaks.loadCloak(uuid); + Cloaks.loadCloak(uuid); return true; } catch (Exception e) { diff --git a/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java b/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java index bd61c1b..6f3a1c4 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java +++ b/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java @@ -1,15 +1,11 @@ package org.saturnclient.saturnclient.client; -import com.fasterxml.jackson.databind.node.TextNode; - import dev.selimaj.session.types.Method; public class ServiceMethods { - public record AuthResponse( - String username, - String password) { - } + public record AuthResponse(String cloak, String hat, String[] cloaks, String[] hats) { + } - public static final Method Authenticate = new Method<>("auth", - TextNode.class, AuthResponse.class, TextNode.class); + public static final Method Authenticate = new Method<>("auth", + String.class, AuthResponse.class, String.class); } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java b/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java index 5bfd6a1..551f245 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java +++ b/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java @@ -1,6 +1,12 @@ package org.saturnclient.saturnclient.client.player; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + public class SaturnPlayer { + private static Map PLAYERS = new HashMap<>(); + public String cloak = ""; public String hat = ""; @@ -8,4 +14,22 @@ public class SaturnPlayer { this.cloak = cloak; this.hat = hat; } + + public static SaturnPlayer get(UUID uuid) { + return PLAYERS.get(uuid); + } + + public static void set(UUID uuid, SaturnPlayer player) { + PLAYERS.put(uuid, player); + } + + public static void player(UUID uuid, SaturnPlayer player) { + if (PLAYERS.containsKey(uuid)) { + return; + } + + // If offline then leave + + PLAYERS.put(uuid, player); + } } diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java index 6ce1401..8137649 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java @@ -1,7 +1,6 @@ package org.saturnclient.saturnclient.cosmetics; import org.saturnclient.saturnclient.SaturnClientConfig; -import org.saturnclient.saturnclient.auth.Auth; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import net.minecraft.client.render.OverlayTexture; diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java index 4a31396..db0d24b 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java @@ -32,7 +32,7 @@ public class Cloaks { private static final String CLOAKS_RESOURCE_PATH = "assets/saturnclient/textures/cloaks/"; public static final List availableCloaks = new ArrayList<>(); public static Identifier cloakCacheIdentifier = null; - public static final Map> animatedCloaks = new ConcurrentHashMap<>(); + public static final Map> animatedCloaks = new ConcurrentHashMap<>(); private static final Map lastFrameTime = new ConcurrentHashMap<>(); private static final ExecutorService CLOAK_LOADER_EXECUTOR = Executors.newFixedThreadPool( @@ -99,8 +99,9 @@ public class Cloaks { * * @param cloakName Name of the cloak file to load */ - public static void loadCloak(String uuid) { - SaturnPlayer player = Auth.players.get(uuid); + public static void loadCloak(UUID uuid) { + SaturnPlayer player = SaturnPlayer.get(uuid); + if (player != null && player.cloak != null) { if (!player.cloak.isEmpty()) { if (Arrays.asList(ANIMATED_CLOAKS).contains(player.cloak)) { @@ -146,7 +147,7 @@ public class Cloaks { } } - public static CompletableFuture loadAnimatedCloakAsync(String uuid, String cloakName) { + public static CompletableFuture loadAnimatedCloakAsync(UUID uuid, String cloakName) { return CompletableFuture.runAsync(() -> { String fileName = cloakName + ".gif"; @@ -196,7 +197,7 @@ public class Cloaks { } else { // Queue for main thread execution // SaturnClient.client.execute( - // () -> IdentifierUtils.registerBufferedImageTexture(frameIdentifier, frame)); + // () -> IdentifierUtils.registerBufferedImageTexture(frameIdentifier, frame)); } animatedFrames.add(new AnimatedCloakData(frameIdentifier, delay));