diff --git a/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java b/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java index 6b8595c..0476370 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java +++ b/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java @@ -1,12 +1,6 @@ package org.saturnclient.saturnclient.client; import java.util.UUID; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.client.player.SaturnPlayer; @@ -49,6 +43,7 @@ public class ServiceClient { String accessToken = mcSession.getAccessToken(); uuid = mcSession.getUuidOrNull(); + String username = mcSession.getUsername(); SaturnClient.LOGGER.info("Authenticating with UUID: " + accessToken); @@ -67,7 +62,7 @@ public class ServiceClient { Hats.availableHats.add(availableHat); } - SaturnPlayer.set(uuid, new SaturnPlayer(response.cloak(), response.hat())); + SaturnPlayer.set(uuid, username, new SaturnPlayer(uuid, username, response.cloak(), response.hat())); Cloaks.loadCloak(uuid); @@ -77,4 +72,20 @@ public class ServiceClient { return false; } } + + public static void setCloak(String cloak) { + try { + session.request(ServiceMethods.SetCloak, cloak).get(); + } catch (Exception e) { + SaturnClient.LOGGER.error("Failed to set cloak (service): ", e); + } + } + + public static void setHat(String hat) { + try { + session.request(ServiceMethods.SetCloak, hat).get(); + } catch (Exception e) { + SaturnClient.LOGGER.error("Failed to set hat (service): ", e); + } + } } diff --git a/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java b/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java index 6f3a1c4..4be3b40 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java +++ b/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java @@ -8,4 +8,7 @@ public class ServiceMethods { public static final Method Authenticate = new Method<>("auth", String.class, AuthResponse.class, String.class); + + public static final Method SetCloak = new Method<>("set_cloak", + String.class, String.class, String.class); } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/saturnclient/client/player/PlayerTracker.java b/src/main/java/org/saturnclient/saturnclient/client/player/PlayerTracker.java index 308fb3a..2a27c6b 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/player/PlayerTracker.java +++ b/src/main/java/org/saturnclient/saturnclient/client/player/PlayerTracker.java @@ -3,6 +3,7 @@ package org.saturnclient.saturnclient.client.player; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import org.saturnclient.saturnclient.SaturnClient; + import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.MinecraftClient; @@ -46,7 +47,6 @@ public class PlayerTracker { private static void onPlayerJoin(MinecraftClient client, PlayerListEntry player) { GameProfile profile = player.getProfile(); UUID uuid = profile.getId(); - // if (uuid != ServiceClient.uuid) - // ServiceClient.player(profile.getName(), uuid); + SaturnPlayer.player(uuid); } } 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 551f245..9173f31 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java +++ b/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java @@ -6,30 +6,43 @@ import java.util.UUID; public class SaturnPlayer { private static Map PLAYERS = new HashMap<>(); + private static Map PLAYER_NAMES = new HashMap<>(); public String cloak = ""; public String hat = ""; + public final UUID uuid; + public final String name; - public SaturnPlayer(String cloak, String hat) { + public SaturnPlayer(UUID uuid, String name, String cloak, String hat) { this.cloak = cloak; this.hat = hat; + this.uuid = uuid; + this.name = name; } public static SaturnPlayer get(UUID uuid) { return PLAYERS.get(uuid); } - public static void set(UUID uuid, SaturnPlayer player) { + public static SaturnPlayer get(String name) { + UUID uuid = PLAYER_NAMES.get(name); + if (uuid == null) + return null; + return PLAYERS.get(uuid); + } + + public static void set(UUID uuid, String name, SaturnPlayer player) { + PLAYER_NAMES.put(name, uuid); PLAYERS.put(uuid, player); } - public static void player(UUID uuid, SaturnPlayer player) { + public static void player(UUID uuid) { if (PLAYERS.containsKey(uuid)) { return; } // If offline then leave - PLAYERS.put(uuid, player); + PLAYERS.put(uuid, null); } } diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java index 8137649..7f869a3 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java @@ -1,6 +1,7 @@ package org.saturnclient.saturnclient.cosmetics; import org.saturnclient.saturnclient.SaturnClientConfig; +import org.saturnclient.saturnclient.client.player.SaturnPlayer; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import net.minecraft.client.render.OverlayTexture; @@ -289,13 +290,9 @@ public class CloakFeatureRenderer extends FeatureRenderer availableCloaks = new ArrayList<>(); public static Identifier cloakCacheIdentifier = null; public static final Map> animatedCloaks = new ConcurrentHashMap<>(); - private static final Map lastFrameTime = new ConcurrentHashMap<>(); + private static final Map lastFrameTime = new ConcurrentHashMap<>(); private static final ExecutorService CLOAK_LOADER_EXECUTOR = Executors.newFixedThreadPool( Math.min(4, Runtime.getRuntime().availableProcessors()), @@ -59,8 +60,7 @@ public class Cloaks { * * @param cloakName Name of the cloak file to load */ - public static void setCloak(String uuid, String cloakName) { - Auth.setCloak(cloakName); + public static void setCloak(UUID uuid, String cloakName) { setCloakSilent(uuid, cloakName); SaturnClient.LOGGER.info("Cloak set to " + cloakName); } @@ -71,8 +71,9 @@ public class Cloaks { * @param cloakName Name of the cloak file to load */ public static void setCloak(String cloakName) { + ServiceClient.setCloak(cloakName); if (availableCloaks.contains(cloakName)) { - setCloak(Auth.uuid, cloakName); + setCloak(ServiceClient.uuid, cloakName); } } @@ -82,10 +83,12 @@ public class Cloaks { * * @param cloakName Name of the cloak file to load */ - public static void setCloakSilent(String uuid, String cloakName) { - SaturnPlayer player = Auth.players.get(uuid); + public static void setCloakSilent(UUID uuid, String cloakName) { + SaturnPlayer player = SaturnPlayer.get(uuid); + if (player == null) { - Auth.players.put(uuid, new SaturnPlayer(cloakName, null)); + // Auth.players.put(uuid, new SaturnPlayer(cloakName, null)); + // TODO: Address this functionality } else { player.cloak = cloakName; } @@ -227,16 +230,14 @@ public class Cloaks { }, CLOAK_LOADER_EXECUTOR); } - public static Identifier getCurrentCloakTexture(String uuid) { - if (!Auth.players.containsKey(uuid)) { + public static Identifier getCurrentCloakTexture(UUID uuid) { + SaturnPlayer player = SaturnPlayer.get(uuid); + + if (player == null || player.cloak.isEmpty()) { return null; } - String cloakName = Auth.players.get(uuid).cloak; - - if (cloakName.isEmpty()) { - return null; - } + String cloakName = player.cloak; if (Arrays.asList(ANIMATED_CLOAKS).contains(cloakName)) { List frames = animatedCloaks.get(uuid); diff --git a/src/main/java/org/saturnclient/ui2/screens/store/CloakStore.java b/src/main/java/org/saturnclient/ui2/screens/store/CloakStore.java index 848e598..ba662d2 100644 --- a/src/main/java/org/saturnclient/ui2/screens/store/CloakStore.java +++ b/src/main/java/org/saturnclient/ui2/screens/store/CloakStore.java @@ -1,7 +1,6 @@ package org.saturnclient.ui2.screens.store; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.auth.Auth; import org.saturnclient.saturnclient.client.player.SaturnPlayer; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import org.saturnclient.ui2.SaturnScreen;