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); + } +}