diff --git a/src/main/java/snownee/jade/util/PlayerNameLookup.java b/src/main/java/snownee/jade/util/PlayerNameLookup.java index 819a5d16..42d430c7 100644 --- a/src/main/java/snownee/jade/util/PlayerNameLookup.java +++ b/src/main/java/snownee/jade/util/PlayerNameLookup.java @@ -1,26 +1,29 @@ package snownee.jade.util; +import java.util.HashMap; import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; +import com.mojang.authlib.GameProfile; + import org.jetbrains.annotations.Nullable; import net.minecraft.server.Services; -import net.minecraft.server.players.NameAndId; import net.minecraft.util.Util; public class PlayerNameLookup { private static final Set FETCHING = ConcurrentHashMap.newKeySet(); - private static final Set FETCHED = ConcurrentHashMap.newKeySet(); + private static final HashMap FETCHED = new HashMap<>(); + private static final GameProfile DUMMY_PROFILE = new GameProfile(UUID.randomUUID(), "???"); public static boolean isFetching(UUID uuid) { return FETCHING.contains(uuid); } public static boolean isFetched(UUID uuid) { - return FETCHED.contains(uuid); + return FETCHED.containsKey(uuid); } @Nullable @@ -28,16 +31,16 @@ public static String get(@Nullable UUID uuid, Services services) { if (uuid == null) { return null; } - if (FETCHED.contains(uuid)) { - return services.nameToIdCache().get(uuid).map(NameAndId::name).orElse("???"); + if (FETCHED.containsKey(uuid)) { + return FETCHED.get(uuid); } if (!FETCHING.add(uuid)) { return null; } CompletableFuture.runAsync( () -> { - services.profileResolver().fetchById(uuid); - FETCHED.add(uuid); + GameProfile profile = services.profileResolver().fetchById(uuid).orElse(DUMMY_PROFILE); + FETCHED.put(uuid, profile.name()); FETCHING.remove(uuid); }, Util.backgroundExecutor() );