From e20467b7afd324fe2bce3ff140add414117f8546 Mon Sep 17 00:00:00 2001
From: OptimisticDev <173472493+OptimisticDeving@users.noreply.github.com>
Date: Thu, 1 Aug 2024 08:37:13 +0000
Subject: [PATCH] Add more detailed error messages to /skin and a timeout of 15
 seconds (#357)

---
 .../modules/player/skin/SkinManager.java      | 23 +++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/main/java/pw/kaboom/extras/modules/player/skin/SkinManager.java b/src/main/java/pw/kaboom/extras/modules/player/skin/SkinManager.java
index 51d271b..299b34d 100644
--- a/src/main/java/pw/kaboom/extras/modules/player/skin/SkinManager.java
+++ b/src/main/java/pw/kaboom/extras/modules/player/skin/SkinManager.java
@@ -1,6 +1,7 @@
 package pw.kaboom.extras.modules.player.skin;
 
 import com.google.gson.Gson;
+import java.lang.InterruptedException;
 import java.net.URI;
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
@@ -10,8 +11,12 @@ import java.util.List;
 import java.util.UUID;
 
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
 
 import org.bukkit.Bukkit;
 import org.bukkit.entity.Player;
@@ -58,8 +63,22 @@ public final class SkinManager {
             final SkinData skinData;
 
             try {
-                skinData = getSkinData(name).get();
-            } catch (Exception e) {
+                skinData = getSkinData(name).get(15, TimeUnit.SECONDS);
+            } catch (InterruptedException e) {
+                if (!shouldSendMessage) {
+                    return;
+                }
+
+                player.sendMessage(Component.text("Skin fetching was interrupted"));
+                return;
+            } catch (TimeoutException e) {
+                if (!shouldSendMessage) {
+                    return;
+                }
+
+                player.sendMessage(Component.text("Took too long to fetch skin"));
+                return;
+            } catch (ExecutionException | CompletionException e) {
                 if(!shouldSendMessage) {
                     return;
                 }