From 1796124bc149c165934b14f2dc296459950b9c15 Mon Sep 17 00:00:00 2001 From: mathiascode Date: Sat, 28 Sep 2019 21:22:18 +0300 Subject: [PATCH] Optimize skin requests --- pom.xml | 13 +-- src/main/java/pw/kaboom/extras/Main.java | 2 + .../kaboom/extras/commands/CommandSkin.java | 76 ++++++++------- .../extras/commands/CommandUsername.java | 94 ++++++++++--------- .../modules/player/PlayerConnection.java | 60 ++++++------ 5 files changed, 121 insertions(+), 124 deletions(-) diff --git a/pom.xml b/pom.xml index 468fdc8..c2c6ca8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,8 +4,8 @@ Extras master - 1.7 - 1.7 + 11 + 11 @@ -15,11 +15,6 @@ paper-api 1.13.2-R0.1-SNAPSHOT - - com.comphenix.protocol - ProtocolLib - 4.4.0 - @@ -27,10 +22,6 @@ papermc https://papermc.io/repo/repository/maven-public/ - - dmulloy2-repo - http://repo.dmulloy2.net/nexus/repository/public/ - diff --git a/src/main/java/pw/kaboom/extras/Main.java b/src/main/java/pw/kaboom/extras/Main.java index 0099486..0c78c2b 100644 --- a/src/main/java/pw/kaboom/extras/Main.java +++ b/src/main/java/pw/kaboom/extras/Main.java @@ -13,6 +13,8 @@ import com.destroystokyo.paper.profile.PlayerProfile; public class Main extends JavaPlugin { static int fallingBlockCount; + static HashSet skinInProgress = new HashSet<>(); + static HashSet usernameInProgress = new HashSet<>(); static HashMap commandMillisList = new HashMap<>(); static HashMap interactMillisList = new HashMap<>(); static HashSet consoleCommandBlacklist = new HashSet<>(); diff --git a/src/main/java/pw/kaboom/extras/commands/CommandSkin.java b/src/main/java/pw/kaboom/extras/commands/CommandSkin.java index e826384..072597f 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandSkin.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandSkin.java @@ -1,9 +1,11 @@ package pw.kaboom.extras; import java.io.InputStreamReader; -import java.net.URL; - -import javax.net.ssl.HttpsURLConnection; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpResponse.BodyHandlers; +import java.net.URI; import org.bukkit.ChatColor; @@ -33,43 +35,45 @@ class CommandSkin implements CommandExecutor { if (args.length == 0) { player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); - } else { - final String name = args[0]; - new BukkitRunnable() { - public void run() { + } else if (!Main.skinInProgress.contains(player.getUniqueId())) { + Main.skinInProgress.add(player.getUniqueId()); + + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://api.ashcon.app/mojang/v2/user/" + args[0])) + .build(); + client.sendAsync(request, BodyHandlers.ofInputStream()) + .thenAccept(response -> { + if (response.statusCode() == 200) { + final InputStreamReader skinStream = new InputStreamReader(response.body()); + final JsonObject responseJson = new JsonParser().parse(skinStream).getAsJsonObject(); + final JsonObject rawSkin = responseJson.getAsJsonObject("textures").getAsJsonObject("raw"); + final String texture = rawSkin.get("value").getAsString(); + final String signature = rawSkin.get("signature").getAsString(); try { - final URL skinUrl = new URL("https://api.ashcon.app/mojang/v2/user/" + name); - final HttpsURLConnection skinConnection = (HttpsURLConnection) skinUrl.openConnection(); - skinConnection.setConnectTimeout(0); - skinConnection.setDefaultUseCaches(false); - skinConnection.setUseCaches(false); - - if (skinConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) { - final InputStreamReader skinStream = new InputStreamReader(skinConnection.getInputStream()); - final JsonObject response = new JsonParser().parse(skinStream).getAsJsonObject(); - final JsonObject rawSkin = response.getAsJsonObject("textures").getAsJsonObject("raw"); - final String texture = rawSkin.get("value").getAsString(); - final String signature = rawSkin.get("signature").getAsString(); - skinStream.close(); - - final PlayerProfile textureProfile = player.getPlayerProfile(); - textureProfile.setProperty(new ProfileProperty("textures", texture, signature)); - - player.sendMessage("Successfully set your skin to " + name + "'s"); - new BukkitRunnable() { - public void run() { - player.setPlayerProfile(textureProfile); - } - }.runTask(JavaPlugin.getPlugin(Main.class)); - } else { - player.sendMessage("A player with that username doesn't exist"); - } - - skinConnection.disconnect(); + skinStream.close(); } catch (Exception exception) { + System.out.println(exception); } + + final PlayerProfile profile = player.getPlayerProfile(); + profile.setProperty(new ProfileProperty("textures", texture, signature)); + + player.sendMessage("Successfully set your skin to " + args[0] + "'s"); + + new BukkitRunnable() { + public void run() { + player.setPlayerProfile(profile); + Main.skinInProgress.remove(player.getUniqueId()); + } + }.runTask(JavaPlugin.getPlugin(Main.class)); + } else { + player.sendMessage("A player with that username doesn't exist"); + Main.skinInProgress.remove(player.getUniqueId()); } - }.runTaskAsynchronously(JavaPlugin.getPlugin(Main.class)); + }); + } else { + player.sendMessage("You are already applying a skin. Please wait a few seconds."); } } return true; diff --git a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java index 9b891c5..3035ced 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java @@ -1,9 +1,11 @@ package pw.kaboom.extras; import java.io.InputStreamReader; -import java.net.URL; - -import javax.net.ssl.HttpsURLConnection; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpResponse.BodyHandlers; +import java.net.URI; import org.bukkit.ChatColor; @@ -33,53 +35,53 @@ class CommandUsername implements CommandExecutor { if (args.length == 0) { player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); - } else { - final String[] name = args; - - new BukkitRunnable() { - public void run() { + } else if (!Main.usernameInProgress.contains(player.getUniqueId())) { + Main.usernameInProgress.add(player.getUniqueId()); + + final String nameColor = ChatColor.translateAlternateColorCodes('&', String.join(" ", args)); + final String nameShort = nameColor.substring(0, Math.min(16, nameColor.length())); + + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://api.ashcon.app/mojang/v2/user/" + nameShort)) + .build(); + client.sendAsync(request, BodyHandlers.ofInputStream()) + .thenAccept(response -> { + String texture = ""; + String signature = ""; + + if (response.statusCode() == 200) { + final InputStreamReader skinStream = new InputStreamReader(response.body()); + final JsonObject responseJson = new JsonParser().parse(skinStream).getAsJsonObject(); + final JsonObject rawSkin = responseJson.getAsJsonObject("textures").getAsJsonObject("raw"); + texture = rawSkin.get("value").getAsString(); + signature = rawSkin.get("signature").getAsString(); try { - String texture = ""; - String signature = ""; - - final String nameColor = ChatColor.translateAlternateColorCodes('&', String.join(" ", name)); - final String nameShort = nameColor.substring(0, Math.min(16, nameColor.length())); - - final URL skinUrl = new URL("https://api.ashcon.app/mojang/v2/user/" + nameShort); - final HttpsURLConnection skinConnection = (HttpsURLConnection) skinUrl.openConnection(); - skinConnection.setConnectTimeout(0); - skinConnection.setDefaultUseCaches(false); - skinConnection.setUseCaches(false); - - if (skinConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) { - final InputStreamReader skinStream = new InputStreamReader(skinConnection.getInputStream()); - final JsonObject response = new JsonParser().parse(skinStream).getAsJsonObject(); - final JsonObject rawSkin = response.getAsJsonObject("textures").getAsJsonObject("raw"); - texture = rawSkin.get("value").getAsString(); - signature = rawSkin.get("signature").getAsString(); - skinStream.close(); - } - - skinConnection.disconnect(); - - final PlayerProfile profile = player.getPlayerProfile(); - profile.setName(nameShort); - - if (!("".equals(texture)) && - !("".equals(signature))) { - profile.setProperty(new ProfileProperty("textures", texture, signature)); - } - - player.sendMessage("Successfully set your username to \"" + nameShort + "\""); - new BukkitRunnable() { - public void run() { - player.setPlayerProfile(profile); - } - }.runTask(JavaPlugin.getPlugin(Main.class)); + skinStream.close(); } catch (Exception exception) { + System.out.println(exception); } } - }.runTaskAsynchronously(JavaPlugin.getPlugin(Main.class)); + + final PlayerProfile profile = player.getPlayerProfile(); + profile.setName(nameShort); + + if (!("".equals(texture)) && + !("".equals(signature))) { + profile.setProperty(new ProfileProperty("textures", texture, signature)); + } + + player.sendMessage("Successfully set your username to \"" + nameShort + "\""); + + new BukkitRunnable() { + public void run() { + player.setPlayerProfile(profile); + Main.usernameInProgress.remove(player.getUniqueId()); + } + }.runTask(JavaPlugin.getPlugin(Main.class)); + }); + } else { + player.sendMessage("Your username is already being changed. Please wait a few seconds."); } } return true; diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java index 7c5202f..8111c48 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java @@ -1,11 +1,13 @@ package pw.kaboom.extras; import java.io.InputStreamReader; -import java.net.URL; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpResponse.BodyHandlers; +import java.net.URI; import java.util.UUID; -import javax.net.ssl.HttpsURLConnection; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; @@ -123,37 +125,33 @@ class PlayerConnection implements Listener { event.allow(); player.setOp(true); - new BukkitRunnable() { - public void run() { + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://api.ashcon.app/mojang/v2/user/" + player.getName())) + .build(); + client.sendAsync(request, BodyHandlers.ofInputStream()) + .thenAccept(response -> { + if (response.statusCode() == 200) { + final InputStreamReader skinStream = new InputStreamReader(response.body()); + final JsonObject responseJson = new JsonParser().parse(skinStream).getAsJsonObject(); + final JsonObject rawSkin = responseJson.getAsJsonObject("textures").getAsJsonObject("raw"); + final String texture = rawSkin.get("value").getAsString(); + final String signature = rawSkin.get("signature").getAsString(); try { - final URL skinUrl = new URL("https://api.ashcon.app/mojang/v2/user/" + player.getName()); - final HttpsURLConnection skinConnection = (HttpsURLConnection) skinUrl.openConnection(); - skinConnection.setConnectTimeout(0); - skinConnection.setDefaultUseCaches(false); - skinConnection.setUseCaches(false); - - if (skinConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) { - final InputStreamReader skinStream = new InputStreamReader(skinConnection.getInputStream()); - final JsonObject response = new JsonParser().parse(skinStream).getAsJsonObject(); - final JsonObject rawSkin = response.getAsJsonObject("textures").getAsJsonObject("raw"); - final String texture = rawSkin.get("value").getAsString(); - final String signature = rawSkin.get("signature").getAsString(); - skinStream.close(); - - final PlayerProfile textureProfile = player.getPlayerProfile(); - textureProfile.setProperty(new ProfileProperty("textures", texture, signature)); - - new BukkitRunnable() { - public void run() { - player.setPlayerProfile(textureProfile); - } - }.runTask(JavaPlugin.getPlugin(Main.class)); - } - - skinConnection.disconnect(); + skinStream.close(); } catch (Exception exception) { + System.out.println(exception); } + + final PlayerProfile profile = player.getPlayerProfile(); + profile.setProperty(new ProfileProperty("textures", texture, signature)); + + new BukkitRunnable() { + public void run() { + player.setPlayerProfile(profile); + } + }.runTask(JavaPlugin.getPlugin(Main.class)); } - }.runTaskAsynchronously(JavaPlugin.getPlugin(Main.class)); + }); } }