From 38d46dccf80e80de53e75fec3cff762b526da66c Mon Sep 17 00:00:00 2001
From: Martin <Martin.Olischlaeger@icloud.com>
Date: Mon, 17 Apr 2023 17:59:29 +0200
Subject: [PATCH] Added skin support with caching

---
 .../eu/mhsl/craftattack/worldmuseum/Main.java |  3 ++-
 .../worldmuseum/skins/SkinCache.java          | 21 +++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100755 src/main/java/eu/mhsl/craftattack/worldmuseum/skins/SkinCache.java

diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java
index 65a7ff7..855489e 100755
--- a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java
@@ -4,6 +4,7 @@ import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand;
 import eu.mhsl.craftattack.worldmuseum.commands.GcCommand;
 import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
 import eu.mhsl.craftattack.worldmuseum.listener.*;
+import eu.mhsl.craftattack.worldmuseum.skins.SkinCache;
 import eu.mhsl.craftattack.worldmuseum.util.Config;
 import eu.mhsl.craftattack.worldmuseum.worlds.World;
 import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
@@ -61,7 +62,7 @@ public class Main {
 
         globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
             final Player player = event.getPlayer();
-            player.setSkin(PlayerSkin.fromUsername(player.getUsername()));
+            SkinCache.setSkin(player);
             event.setSpawningInstance(startworld);
 
             player.setRespawnPoint(startworld.getSpawn());
diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/skins/SkinCache.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/skins/SkinCache.java
new file mode 100755
index 0000000..fc6c84c
--- /dev/null
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/skins/SkinCache.java
@@ -0,0 +1,21 @@
+package eu.mhsl.craftattack.worldmuseum.skins;
+
+import net.minestom.server.MinecraftServer;
+import net.minestom.server.entity.Player;
+import net.minestom.server.entity.PlayerSkin;
+import net.minestom.server.timer.ExecutionType;
+import net.minestom.server.timer.TaskSchedule;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SkinCache {
+    private static final Map<String, PlayerSkin> skins = new HashMap<>();
+
+    public static void setSkin(Player p) {
+        MinecraftServer.getSchedulerManager().scheduleTask(() -> {
+            p.setSkin(skins.computeIfAbsent(p.getUsername(), PlayerSkin::fromUsername));
+            System.out.println("Es sind jetzt " + skins.size() + " Skins im Cache.");
+        }, TaskSchedule.immediate(), TaskSchedule.stop(), ExecutionType.ASYNC);
+    }
+}