diff --git a/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java b/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java index 777f5de..27611bf 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java +++ b/src/main/java/org/saturnclient/saturnclient/client/ServiceClient.java @@ -87,6 +87,13 @@ public class ServiceClient { session.request(ServiceMethods.SetCloak, itemId).whenComplete((msg, throwable) -> { if (throwable != null) { throwable.printStackTrace(); + } else { + try { + session.request(ServiceMethods.SendPlayer, + new ServiceMethods.Types.SendPlayerRequest(SaturnPlayer.getExternalUUIDAsString())); + } catch (Exception e) { + e.printStackTrace(); + } } }); } catch (Exception e) { @@ -99,6 +106,13 @@ public class ServiceClient { session.request(ServiceMethods.SetHat, itemId).whenComplete((msg, throwable) -> { if (throwable != null) { throwable.printStackTrace(); + } else { + try { + session.request(ServiceMethods.SendPlayer, + new ServiceMethods.Types.SendPlayerRequest(SaturnPlayer.getExternalUUIDAsString())); + } catch (Exception e) { + e.printStackTrace(); + } } }); } catch (Exception e) { @@ -167,15 +181,20 @@ public class ServiceClient { } } }); + + session.onNotification(ServiceMethods.Player, (player) -> { + System.out.println(player); + SaturnPlayer.set(player.toSaturnPlayer()); + }); } public static void player(UUID uuid, String name) { try { - session.request(ServiceMethods.Player, uuid.toString().replaceAll("-", "")) + session.request(ServiceMethods.GetPlayer, uuid.toString().replaceAll("-", "")) .whenComplete((user, throwable) -> { if (throwable != null) { throwable.printStackTrace(); - } else { + } else if (user != null) { SaturnPlayer.set(user.toSaturnPlayer(uuid, name)); } }); diff --git a/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java b/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java index 1f5d986..0a09c53 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java +++ b/src/main/java/org/saturnclient/saturnclient/client/ServiceMethods.java @@ -2,47 +2,112 @@ package org.saturnclient.saturnclient.client; import java.util.UUID; +import org.saturnclient.saturnclient.client.ServiceMethods.Types.SendPlayerRequest; import org.saturnclient.saturnclient.client.player.SaturnPlayer; import dev.selimaj.session.types.Method; public class ServiceMethods { - public class Types { + + // ========================= + // Types (Rust structs) + // ========================= + public static class Types { + public record EmoteRequest(String emote, String[] targets) { } public record EmoteEvent(String emote, String from) { } - public record Player(String cloak, String hat, String[] cloaks, String[] hats) { + public record Player( + String cloak, + String hat, + String[] cloaks, + String[] hats) { public SaturnPlayer toSaturnPlayer(UUID uuid, String name) { return new SaturnPlayer(uuid, name, cloak, hat); } } + + public record PlayerStream(Player player, String name, String uuid) { + public SaturnPlayer toSaturnPlayer() { + return new SaturnPlayer(UUID.fromString(uuid), name, this.player.cloak, this.player.hat); + } + } + + public record SendPlayerRequest(String[] targets) { + } } + // ========================= + // AUTH + // ========================= public static final Method Authenticate = new Method<>("auth", - String.class, Types.Player.class, String.class); + String.class, + Types.Player.class, + String.class); - // Equip + // ========================= + // EQUIP + // ========================= public static final Method SetCloak = new Method<>("set_cloak", - String.class, String.class, String.class); + String.class, + String.class, + String.class); + public static final Method SetHat = new Method<>("set_hat", - String.class, String.class, String.class); + String.class, + String.class, + String.class); - // Buy + // ========================= + // BUY + // ========================= public static final Method BuyCloak = new Method<>("buy_cloak", - String.class, String.class, String.class); + String.class, + String.class, + String.class); + public static final Method BuyHat = new Method<>("buy_hat", - String.class, String.class, String.class); + String.class, + String.class, + String.class); - // Emote - public static final Method Emote = new Method<>("emote", - Types.EmoteRequest.class, String.class, String.class); + // ========================= + // EMOTE + // ========================= + public static final Method Emote = new Method<>("emote", + Types.EmoteRequest.class, + Void.class, + String.class); - public static final Method EmoteEvent = new Method<>("emote_event", - Types.EmoteEvent.class, String.class, String.class); + public static final Method EmoteEvent = new Method<>("emote_event", + Types.EmoteEvent.class, + Void.class, + Void.class); - public static final Method Player = new Method<>("player", - String.class, Types.Player.class, String.class); + // ========================= + // GET PLAYER + // ========================= + public static final Method GetPlayer = new Method<>("get_player", + String.class, + Types.Player.class, + String.class); + + // ========================= + // PLAYER (Server Notification) + // ========================= + public static final Method Player = new Method<>("player", + Types.PlayerStream.class, + Void.class, + Void.class); + + // ========================= + // SEND PLAYER + // ========================= + public static final Method SendPlayer = new Method<>("send_player", + SendPlayerRequest.class, + Void.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 f4c935e..bda57c7 100644 --- a/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java +++ b/src/main/java/org/saturnclient/saturnclient/client/player/SaturnPlayer.java @@ -47,7 +47,7 @@ public class SaturnPlayer { } public static String[] getExternalUUIDAsString() { - return PLAYERS.keySet().stream().filter(id -> !id.equals(ServiceClient.uuid)).map(UUID::toString) + return PLAYERS.keySet().stream().filter(id -> id.equals(ServiceClient.uuid)).map(UUID::toString) .toArray(String[]::new); } 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 d624942..f8140df 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java @@ -62,7 +62,7 @@ public class Cloaks { */ public static void setCloak(String cloakName) { if (availableCloaks.contains(cloakName)) { - setCloak(ServiceClient.uuid, cloakName); + // setCloak(ServiceClient.uuid, cloakName); ServiceClient.setCloak(cloakName); } }