Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions src/main/java/snownee/jade/util/PlayerNameLookup.java
Original file line number Diff line number Diff line change
@@ -1,43 +1,46 @@
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<UUID> FETCHING = ConcurrentHashMap.newKeySet();
private static final Set<UUID> FETCHED = ConcurrentHashMap.newKeySet();
private static final HashMap<UUID, String> 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
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()
);
Expand Down