diff --git a/.idea/misc.xml b/.idea/misc.xml index 2266f6b..45fe8ed 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main/java/net/silentclient/client/Client.java b/src/main/java/net/silentclient/client/Client.java index 413c15f..7ed5384 100644 --- a/src/main/java/net/silentclient/client/Client.java +++ b/src/main/java/net/silentclient/client/Client.java @@ -25,8 +25,10 @@ import net.silentclient.client.gui.util.BackgroundPanorama; import net.silentclient.client.keybinds.KeyBindManager; import net.silentclient.client.mixin.SilentClientTweaker; import net.silentclient.client.mixin.accessors.MinecraftAccessor; +import net.silentclient.client.mixin.ducks.AbstractClientPlayerExt; import net.silentclient.client.mods.ModInstances; import net.silentclient.client.mods.SettingsManager; +import net.silentclient.client.mods.settings.CosmeticsMod; import net.silentclient.client.mods.settings.FPSBoostMod; import net.silentclient.client.mods.settings.GeneralMod; import net.silentclient.client.mods.util.PingSource; @@ -49,7 +51,6 @@ import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; -import java.net.URISyntaxException; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; @@ -87,7 +88,6 @@ public class Client { private FriendsResponse friends; public int playersCount = 0; private CPSTracker cpsTracker; - private SilentSocket silentSocket; public static BackgroundPanorama backgroundPanorama; private KeyBindManager keyBindManager; private IMetadataSerializer iMetadataSerializer; @@ -183,13 +183,6 @@ public class Client { EventManager.register(this); EventManager.register(SneakHandler.getInstance()); EventManager.register(AnimationHandler.getInstance()); - logger.info("INITIALISING > silent-socket"); - try { - silentSocket = new SilentSocket("https://socket.silentclient.net"); - } catch (URISyntaxException e) { - Client.logger.catching(e); - } - silentSocket.Connect(Client.getInstance().getUserData().getAccessToken()); memoryDebug("CLIENT_POST_INIT"); } @@ -197,6 +190,8 @@ public class Client { memoryDebug("CLIENT_PRE_START"); logger.info("---------[ Silent Client Starting ]--------------"); try { + logger.info("STARTING > registering-player"); + Players.register(); logger.info("STARTING > sc-account"); PlayerResponse acc = updateAccount(); @@ -363,7 +358,7 @@ public class Client { public void shutdown() { logger.info("---------[ Silent Client Stopping ]--------------"); logger.info("STOPPING > silent-socket"); - silentSocket.Disconnect(); + Players.unregister(); logger.info("-------------------------------------------------"); } @@ -374,7 +369,30 @@ public class Client { } public void updateUserInformation() { - silentSocket.getSocket().emit("refresh", Minecraft.getMinecraft().getSession().getUsername().toLowerCase()); + if(Client.getInstance().getAccount() != null) { + (new Thread("updateUserInformation") { + public void run() { + PlayerResponse cosmetics = updateAccount(); + + if(cosmetics != null) { + Client.getInstance().setAccount(cosmetics.getAccount()); + + Client.getInstance().getCosmetics().setMyCapes(cosmetics.getAccount().getCosmetics().getCapes()); + Client.getInstance().getCosmetics().setMyWings(cosmetics.getAccount().getCosmetics().getWings()); + Client.getInstance().getCosmetics().setMyIcons(cosmetics.getAccount().getCosmetics().getIcons()); + Client.getInstance().getCosmetics().setMyBandanas(cosmetics.getAccount().getCosmetics().getBandanas()); + Client.getInstance().getCosmetics().setMyHats(cosmetics.getAccount().getCosmetics().getHats()); + Client.getInstance().getCosmetics().setMyShields(cosmetics.getAccount().getCosmetics().getShields()); + Client.getInstance().getSettingsManager().getSettingByClass(CosmeticsMod.class, "Cape Shoulders").setValBoolean(cosmetics.getAccount().getCapeShoulders()); + Client.getInstance().getSettingsManager().getSettingByClass(CosmeticsMod.class, "Cape Type").setValString(cosmetics.getAccount().getCapeType().equals("dynamic_curved") ? "Dynamic Curved" : cosmetics.getAccount().getCapeType().equals("curved_rectangle") ? "Curved Rectangle" : "Rectangle"); + if(Minecraft.getMinecraft().thePlayer != null) { + ((AbstractClientPlayerExt) Minecraft.getMinecraft().thePlayer).silent$setCapeType(cosmetics.getAccount().getCapeType()); + ((AbstractClientPlayerExt) Minecraft.getMinecraft().thePlayer).silent$setShoulders(cosmetics.getAccount().getCapeShoulders()); + } + } + } + }).start(); + } } public void updateFriendsList() { @@ -421,26 +439,13 @@ public class Client { public PlayerResponse updateAccount() { try { - URL url = new URL("https://api.silentclient.net/account"); - HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); - con.setRequestMethod("GET"); - con.setRequestProperty("User-Agent", "SilentClient"); - con.setRequestProperty("Authorization", "Bearer " + Client.getInstance().getUserData().getAccessToken()); + String content = Requests.post("https://api.silentclient.net/account/update", new JSONObject().append("server", Minecraft.getMinecraft().getCurrentServerData() != null ? Minecraft.getMinecraft().getCurrentServerData().serverIP : null).toString()); - BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); - String inputLine; - StringBuffer content = new StringBuffer(); - while ((inputLine = in.readLine()) != null) { - content.append(inputLine); - } - in.close(); - con.disconnect(); GsonBuilder builder = new GsonBuilder(); Gson gson = builder.create(); - PlayerResponse response = gson.fromJson(content.toString(), PlayerResponse.class); - return response; - } catch (IOException e) { + return gson.fromJson(content, PlayerResponse.class); + } catch (Exception e) { e.printStackTrace(); return null; } @@ -455,7 +460,7 @@ public class Client { if(getSettingsManager() != null && getSettingsManager().getSettingByClass(FPSBoostMod.class, "Do memory debug").getValBoolean()) { memoryDebug("Interval: " + l); } - silentSocket.getSocket().emit("update_information", (Minecraft.getMinecraft().getCurrentServerData() != null ? Minecraft.getMinecraft().getCurrentServerData().serverIP : "null")); + this.updateUserInformation(); } if(Client.getInstance().getAccount() != null) { if(Client.getInstance().getAccount().isBanned() && banerror == false) { @@ -519,7 +524,6 @@ public class Client { nextPing = 10; this.updateUserInformation(); Client.logger.info("Update Connection Server: " + event.getServerData().serverIP); - silentSocket.getSocket().emit("update_information", event.getServerData().serverIP); Server.setHypixel(Server.checkIsHypixel()); Server.setRuHypixel(Server.checkIsRuHypixel()); } @@ -531,7 +535,6 @@ public class Client { nextPing = 10; this.updateUserInformation(); Client.logger.info("Update Connection Server: null"); - silentSocket.getSocket().emit("update_information", ""); Server.setHypixel(Server.checkIsHypixel()); Server.setRuHypixel(Server.checkIsRuHypixel()); } @@ -543,7 +546,6 @@ public class Client { nextPing = 10; this.updateUserInformation(); Client.logger.info("Update Connection Server: null"); - silentSocket.getSocket().emit("update_information", ""); Server.setHypixel(Server.checkIsHypixel()); Server.setRuHypixel(Server.checkIsRuHypixel()); } @@ -581,10 +583,6 @@ public class Client { return "v" + version + "-" + getBuildData().getCommit() + "-" + getBuildData().getBranch(); } - public SilentSocket getSilentSocket() { - return silentSocket; - } - public Cosmetics getCosmetics() { return cosmetics; } diff --git a/src/main/java/net/silentclient/client/utils/AccountManager.java b/src/main/java/net/silentclient/client/utils/AccountManager.java index 97d75a8..ca32e75 100644 --- a/src/main/java/net/silentclient/client/utils/AccountManager.java +++ b/src/main/java/net/silentclient/client/utils/AccountManager.java @@ -55,8 +55,8 @@ public class AccountManager { Session session = new Session(account.username, nameToUuid(account.username), account.mc_access_token != null ? account.mc_access_token : "0", account.mc_access_token != null ? "msa" : "legacy"); ((MinecraftExt) Minecraft.getMinecraft()).setSession(session); Client.getInstance().getUserData().setAccessToken(selected.access_token); - Client.getInstance().getSilentSocket().Disconnect(); - Client.getInstance().getSilentSocket().Connect(selected.access_token); + Players.unregister(); + Players.register(); } PlayerResponse acc = Client.getInstance().updateAccount(); if(acc != null) { diff --git a/src/main/java/net/silentclient/client/utils/Players.java b/src/main/java/net/silentclient/client/utils/Players.java index b53dc83..837c726 100644 --- a/src/main/java/net/silentclient/client/utils/Players.java +++ b/src/main/java/net/silentclient/client/utils/Players.java @@ -2,14 +2,12 @@ package net.silentclient.client.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.entity.player.EntityPlayer; import net.silentclient.client.Client; import net.silentclient.client.cosmetics.HatData; import net.silentclient.client.mixin.ducks.AbstractClientPlayerExt; -import net.silentclient.client.mods.settings.CosmeticsMod; import net.silentclient.client.utils.types.PlayerResponse; +import org.json.JSONObject; import java.util.Map; import java.util.UUID; @@ -17,6 +15,7 @@ import java.util.WeakHashMap; public class Players { public static final Map playersCache = new WeakHashMap<>(); + public static boolean isLoading = false; public static void reload() { playersCache.clear(); @@ -92,53 +91,29 @@ public class Players { return result.isOnline() ? "true" : "false"; } else { + Players.isLoading = true; Client.logger.info("Loading Account of " + name.toLowerCase()); playersCache.put(name.toLowerCase(), null); - Client.getInstance().getSilentSocket().getSocket().emit("account", name.toLowerCase()); + (new Thread("loadingAccountOf"+name) { + public void run() { + PlayerResponse response = getAccount(name.toLowerCase()); + if(response != null && response.getAccount() != null) { + playersCache.put(response.getAccount().getUsername(), response.getAccount()); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + Client.logger.catching(e); + } + Players.isLoading = false; + } + }).start(); } return "false"; } public static void handleAccount(PlayerResponse.Account account) { - if(account.getUsername().toLowerCase().equals(Minecraft.getMinecraft().getSession().getUsername().toLowerCase().toString())) { - Client.getInstance().setAccount(account); - Client.getInstance().getCosmetics().setMyCapes(account.getCosmetics().getCapes()); - Client.getInstance().getCosmetics().setMyWings(account.getCosmetics().getWings()); - Client.getInstance().getCosmetics().setMyIcons(account.getCosmetics().getIcons()); - Client.getInstance().getCosmetics().setMyBandanas(account.getCosmetics().getBandanas()); - Client.getInstance().getCosmetics().setMyHats(account.getCosmetics().getHats()); - Client.getInstance().getCosmetics().setMyShields(account.getCosmetics().getShields()); - Client.getInstance().getSettingsManager().getSettingByClass(CosmeticsMod.class, "Cape Shoulders").setValBoolean(account.getCapeShoulders()); - Client.getInstance().getSettingsManager().getSettingByClass(CosmeticsMod.class, "Cape Type").setValString(account.getCapeType().equals("dynamic_curved") ? "Dynamic Curved" : account.getCapeType().equals("curved_rectangle") ? "Curved Rectangle" : "Rectangle"); - if(Minecraft.getMinecraft().thePlayer != null) { - ((AbstractClientPlayerExt) Minecraft.getMinecraft().thePlayer).silent$setCapeType(account.getCapeType()); - ((AbstractClientPlayerExt) Minecraft.getMinecraft().thePlayer).silent$setShoulders(account.getCapeShoulders()); - Players.getPlayerStatus(false, ((AbstractClientPlayerExt) Minecraft.getMinecraft().thePlayer).silent$getNameClear(), EntityPlayer.getUUID(Minecraft.getMinecraft().thePlayer.getGameProfile()), Minecraft.getMinecraft().thePlayer); - } - } - if(Minecraft.getMinecraft().theWorld != null && getPlayerEntityByName(account.original_username) != null) { - Client.logger.info("Account processing: " + account.getUsername()); - if(playersCache.containsKey(account.getUsername())) { - playersCache.remove(account.getUsername()); - } - playersCache.put(account.getUsername(), account); - } - } - - public static EntityPlayer getPlayerEntityByName(String name) - { - for (int i = 0; i < Minecraft.getMinecraft().theWorld.playerEntities.size(); ++i) - { - EntityPlayer entityplayer = (EntityPlayer)Minecraft.getMinecraft().theWorld.playerEntities.get(i); - - if (name.equalsIgnoreCase(entityplayer.getName())) - { - return entityplayer; - } - } - - return null; } public static PlayerResponse getAccount(String name) { @@ -154,4 +129,26 @@ public class Players { return null; } } + + public static void register() { + try { + String content = Requests.post("https://api.silentclient.net/account/set_online", new JSONObject().append("online", true).toString()); + + Client.logger.info("STARTING > registering-player > response: " + content); + } catch (Exception e) { + Client.logger.catching(e); + Client.logger.info("STARTING > registering-player > ERROR: " + e.getMessage()); + } + } + + public static void unregister() { + try { + String content = Requests.post("https://api.silentclient.net/account/set_online", new JSONObject().append("online", true).toString()); + + Client.logger.info("STOPPING > unregistering-player > response: " + content.toString()); + } catch (Exception e) { + Client.logger.catching(e); + Client.logger.error("STOPPING > unregistering-player > ERROR: " + e.getMessage()); + } + } } \ No newline at end of file diff --git a/src/main/java/net/silentclient/client/utils/SilentSocket.java b/src/main/java/net/silentclient/client/utils/SilentSocket.java deleted file mode 100644 index dea245b..0000000 --- a/src/main/java/net/silentclient/client/utils/SilentSocket.java +++ /dev/null @@ -1,92 +0,0 @@ -package net.silentclient.client.utils; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.socket.client.IO; -import io.socket.client.Socket; -import io.socket.emitter.Emitter.Listener; -import net.silentclient.client.Client; -import net.silentclient.client.utils.types.NotificationResponse; -import net.silentclient.client.utils.types.PlayerResponse; -import org.json.JSONException; - -import java.net.URI; -import java.net.URISyntaxException; - -public class SilentSocket { - private Socket sock; - private URI _url; - private String _token; - - private Listener connectListener; - private Listener disconectListener; - private Listener accountListener; - private Listener notificationListener; - private Listener errorListener; - - public SilentSocket(String server) throws URISyntaxException { - _url = new URI(server); - sock = IO.socket(_url); - connectListener = arg0 -> { - Client.logger.info("Connected to Silent Socket!"); - sock.emit("set_token", _token); - }; - - disconectListener = arg0 -> Client.logger.info("Disconnected from Silent Socket!"); - - notificationListener = arg0 -> { - try { - GsonBuilder builder = new GsonBuilder(); - Gson gson = builder.create(); - NotificationResponse response = gson.fromJson(arg0[0].toString(), NotificationResponse.class); - Client.logger.info("Received notification via API: " + arg0[0].toString()); - NotificationUtils.showNotification(response.getStatus(), response.getMessage()); - } catch (Exception err) { - Client.logger.catching(err); - } - }; - - accountListener = arg0 -> { - try { - GsonBuilder builder = new GsonBuilder(); - Gson gson = builder.create(); - PlayerResponse response = gson.fromJson(arg0[0].toString(), PlayerResponse.class); - if(response.getAccount() != null) { - Client.logger.info("Received account via Websocket: " + response.getAccount().getUsername()); - Players.handleAccount(response.getAccount()); - } - } catch (Exception err) { - Client.logger.catching(err); - } - }; - - errorListener = arg0 -> Client.logger.error("Silent Socket Error!"); - - sock.on(Socket.EVENT_CONNECT, connectListener) - .on(Socket.EVENT_RECONNECT, connectListener) - .on(Socket.EVENT_DISCONNECT, disconectListener) - .on(Socket.EVENT_ERROR, errorListener) - .on("account", accountListener) - .on("notification", notificationListener) - .on("update_information", arg0 -> Client.logger.info("User information updated: " + arg0[0].toString())); - } - - public Socket getSocket() { - return sock; - } - - - public void Connect(String token) throws JSONException { - _token = token; - - sock.connect(); - } - - public void Disconnect() { - sock.disconnect(); - } - - public boolean getConnected() { - return sock.connected(); - } -}