Cloaks
This commit is contained in:
@@ -1,12 +1,6 @@
|
|||||||
package org.saturnclient.saturnclient.client;
|
package org.saturnclient.saturnclient.client;
|
||||||
|
|
||||||
import java.util.UUID;
|
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.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
||||||
@@ -49,6 +43,7 @@ public class ServiceClient {
|
|||||||
|
|
||||||
String accessToken = mcSession.getAccessToken();
|
String accessToken = mcSession.getAccessToken();
|
||||||
uuid = mcSession.getUuidOrNull();
|
uuid = mcSession.getUuidOrNull();
|
||||||
|
String username = mcSession.getUsername();
|
||||||
|
|
||||||
SaturnClient.LOGGER.info("Authenticating with UUID: " + accessToken);
|
SaturnClient.LOGGER.info("Authenticating with UUID: " + accessToken);
|
||||||
|
|
||||||
@@ -67,7 +62,7 @@ public class ServiceClient {
|
|||||||
Hats.availableHats.add(availableHat);
|
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);
|
Cloaks.loadCloak(uuid);
|
||||||
|
|
||||||
@@ -77,4 +72,20 @@ public class ServiceClient {
|
|||||||
return false;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,4 +8,7 @@ public class ServiceMethods {
|
|||||||
|
|
||||||
public static final Method<String, AuthResponse, String> Authenticate = new Method<>("auth",
|
public static final Method<String, AuthResponse, String> Authenticate = new Method<>("auth",
|
||||||
String.class, AuthResponse.class, String.class);
|
String.class, AuthResponse.class, String.class);
|
||||||
|
|
||||||
|
public static final Method<String, String, String> SetCloak = new Method<>("set_cloak",
|
||||||
|
String.class, String.class, String.class);
|
||||||
}
|
}
|
||||||
@@ -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.networking.v1.ClientPlayConnectionEvents;
|
||||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
|
|
||||||
import net.minecraft.client.network.PlayerListEntry;
|
import net.minecraft.client.network.PlayerListEntry;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|
||||||
@@ -46,7 +47,6 @@ public class PlayerTracker {
|
|||||||
private static void onPlayerJoin(MinecraftClient client, PlayerListEntry player) {
|
private static void onPlayerJoin(MinecraftClient client, PlayerListEntry player) {
|
||||||
GameProfile profile = player.getProfile();
|
GameProfile profile = player.getProfile();
|
||||||
UUID uuid = profile.getId();
|
UUID uuid = profile.getId();
|
||||||
// if (uuid != ServiceClient.uuid)
|
SaturnPlayer.player(uuid);
|
||||||
// ServiceClient.player(profile.getName(), uuid);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,30 +6,43 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class SaturnPlayer {
|
public class SaturnPlayer {
|
||||||
private static Map<UUID, SaturnPlayer> PLAYERS = new HashMap<>();
|
private static Map<UUID, SaturnPlayer> PLAYERS = new HashMap<>();
|
||||||
|
private static Map<String, UUID> PLAYER_NAMES = new HashMap<>();
|
||||||
|
|
||||||
public String cloak = "";
|
public String cloak = "";
|
||||||
public String hat = "";
|
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.cloak = cloak;
|
||||||
this.hat = hat;
|
this.hat = hat;
|
||||||
|
this.uuid = uuid;
|
||||||
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SaturnPlayer get(UUID uuid) {
|
public static SaturnPlayer get(UUID uuid) {
|
||||||
return PLAYERS.get(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);
|
PLAYERS.put(uuid, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void player(UUID uuid, SaturnPlayer player) {
|
public static void player(UUID uuid) {
|
||||||
if (PLAYERS.containsKey(uuid)) {
|
if (PLAYERS.containsKey(uuid)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If offline then leave
|
// If offline then leave
|
||||||
|
|
||||||
PLAYERS.put(uuid, player);
|
PLAYERS.put(uuid, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.saturnclient.saturnclient.cosmetics;
|
package org.saturnclient.saturnclient.cosmetics;
|
||||||
|
|
||||||
import org.saturnclient.saturnclient.SaturnClientConfig;
|
import org.saturnclient.saturnclient.SaturnClientConfig;
|
||||||
|
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
||||||
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||||
|
|
||||||
import net.minecraft.client.render.OverlayTexture;
|
import net.minecraft.client.render.OverlayTexture;
|
||||||
@@ -289,13 +290,9 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
if (playerEntityRenderState.skinTextures.capeTexture() != null) {
|
if (playerEntityRenderState.skinTextures.capeTexture() != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String name = playerEntityRenderState.name;
|
SaturnPlayer player = SaturnPlayer.get(playerEntityRenderState.name);
|
||||||
String uuid = Auth.playerNames.get(name);
|
|
||||||
if (uuid == null || !Auth.players.containsKey(uuid)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Identifier customCape = Cloaks.getCurrentCloakTexture(uuid);
|
Identifier customCape = Cloaks.getCurrentCloakTexture(player.uuid);
|
||||||
if (customCape == null || this.hasCustomModelForLayer(playerEntityRenderState.equippedChestStack,
|
if (customCape == null || this.hasCustomModelForLayer(playerEntityRenderState.equippedChestStack,
|
||||||
LayerType.WINGS)) {
|
LayerType.WINGS)) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package org.saturnclient.saturnclient.cosmetics.cloaks;
|
package org.saturnclient.saturnclient.cosmetics.cloaks;
|
||||||
|
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.saturnclient.saturnclient.auth.Auth;
|
|
||||||
|
import org.saturnclient.saturnclient.client.ServiceClient;
|
||||||
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
||||||
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.AnimatedCloakData;
|
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.AnimatedCloakData;
|
||||||
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.IdentifierUtils;
|
import org.saturnclient.saturnclient.cosmetics.cloaks.utils.IdentifierUtils;
|
||||||
@@ -33,7 +34,7 @@ public class Cloaks {
|
|||||||
public static final List<String> availableCloaks = new ArrayList<>();
|
public static final List<String> availableCloaks = new ArrayList<>();
|
||||||
public static Identifier cloakCacheIdentifier = null;
|
public static Identifier cloakCacheIdentifier = null;
|
||||||
public static final Map<UUID, List<AnimatedCloakData>> animatedCloaks = new ConcurrentHashMap<>();
|
public static final Map<UUID, List<AnimatedCloakData>> animatedCloaks = new ConcurrentHashMap<>();
|
||||||
private static final Map<String, Long> lastFrameTime = new ConcurrentHashMap<>();
|
private static final Map<UUID, Long> lastFrameTime = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private static final ExecutorService CLOAK_LOADER_EXECUTOR = Executors.newFixedThreadPool(
|
private static final ExecutorService CLOAK_LOADER_EXECUTOR = Executors.newFixedThreadPool(
|
||||||
Math.min(4, Runtime.getRuntime().availableProcessors()),
|
Math.min(4, Runtime.getRuntime().availableProcessors()),
|
||||||
@@ -59,8 +60,7 @@ public class Cloaks {
|
|||||||
*
|
*
|
||||||
* @param cloakName Name of the cloak file to load
|
* @param cloakName Name of the cloak file to load
|
||||||
*/
|
*/
|
||||||
public static void setCloak(String uuid, String cloakName) {
|
public static void setCloak(UUID uuid, String cloakName) {
|
||||||
Auth.setCloak(cloakName);
|
|
||||||
setCloakSilent(uuid, cloakName);
|
setCloakSilent(uuid, cloakName);
|
||||||
SaturnClient.LOGGER.info("Cloak set to " + cloakName);
|
SaturnClient.LOGGER.info("Cloak set to " + cloakName);
|
||||||
}
|
}
|
||||||
@@ -71,8 +71,9 @@ public class Cloaks {
|
|||||||
* @param cloakName Name of the cloak file to load
|
* @param cloakName Name of the cloak file to load
|
||||||
*/
|
*/
|
||||||
public static void setCloak(String cloakName) {
|
public static void setCloak(String cloakName) {
|
||||||
|
ServiceClient.setCloak(cloakName);
|
||||||
if (availableCloaks.contains(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
|
* @param cloakName Name of the cloak file to load
|
||||||
*/
|
*/
|
||||||
public static void setCloakSilent(String uuid, String cloakName) {
|
public static void setCloakSilent(UUID uuid, String cloakName) {
|
||||||
SaturnPlayer player = Auth.players.get(uuid);
|
SaturnPlayer player = SaturnPlayer.get(uuid);
|
||||||
|
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
Auth.players.put(uuid, new SaturnPlayer(cloakName, null));
|
// Auth.players.put(uuid, new SaturnPlayer(cloakName, null));
|
||||||
|
// TODO: Address this functionality
|
||||||
} else {
|
} else {
|
||||||
player.cloak = cloakName;
|
player.cloak = cloakName;
|
||||||
}
|
}
|
||||||
@@ -227,16 +230,14 @@ public class Cloaks {
|
|||||||
}, CLOAK_LOADER_EXECUTOR);
|
}, CLOAK_LOADER_EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Identifier getCurrentCloakTexture(String uuid) {
|
public static Identifier getCurrentCloakTexture(UUID uuid) {
|
||||||
if (!Auth.players.containsKey(uuid)) {
|
SaturnPlayer player = SaturnPlayer.get(uuid);
|
||||||
|
|
||||||
|
if (player == null || player.cloak.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String cloakName = Auth.players.get(uuid).cloak;
|
String cloakName = player.cloak;
|
||||||
|
|
||||||
if (cloakName.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Arrays.asList(ANIMATED_CLOAKS).contains(cloakName)) {
|
if (Arrays.asList(ANIMATED_CLOAKS).contains(cloakName)) {
|
||||||
List<AnimatedCloakData> frames = animatedCloaks.get(uuid);
|
List<AnimatedCloakData> frames = animatedCloaks.get(uuid);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package org.saturnclient.ui2.screens.store;
|
package org.saturnclient.ui2.screens.store;
|
||||||
|
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.auth.Auth;
|
|
||||||
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
|
||||||
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks;
|
||||||
import org.saturnclient.ui2.SaturnScreen;
|
import org.saturnclient.ui2.SaturnScreen;
|
||||||
|
|||||||
Reference in New Issue
Block a user