src/main/java/wtf/sten/vault/Faces.java
package wtf.sten.vault;
import com.mojang.authlib.GameProfile;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.renderer.RenderPipelines;
import net.minecraft.client.resources.DefaultPlayerSkin;
import net.minecraft.resources.Identifier;
import net.minecraft.world.entity.player.PlayerSkin;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
public final class Faces {
private static final Map<UUID, Identifier> CACHE = new ConcurrentHashMap<>();
private Faces() {
}
public static void draw(GuiGraphicsExtractor g, Minecraft mc, UUID uuid, String name, int x, int y, int size) {
Identifier id = skin(mc, uuid, name);
if (id == null) {
g.fill(x, y, x + size, y + size, 0x335A7FFF);
return;
}
g.blit(RenderPipelines.GUI_TEXTURED, id, x, y, 8f, 8f, size, size, 8, 8, 64, 64);
g.blit(RenderPipelines.GUI_TEXTURED, id, x, y, 40f, 8f, size, size, 8, 8, 64, 64);
}
private static Identifier skin(Minecraft mc, UUID uuid, String name) {
if (uuid == null || mc == null) return DefaultPlayerSkin.getDefaultTexture();
Identifier hit = CACHE.get(uuid);
if (hit != null) return hit;
CACHE.put(uuid, DefaultPlayerSkin.get(uuid).body().texturePath());
try {
mc.getSkinManager().get(new GameProfile(uuid, name == null || name.isBlank() ? "Steve" : name))
.thenAccept(optional -> optional.ifPresent(skin -> {
Identifier path = path(skin);
if (path != null) CACHE.put(uuid, path);
}));
} catch (Exception ignored) {
}
return CACHE.get(uuid);
}
private static Identifier path(PlayerSkin skin) {
try {
if (skin == null || skin.body() == null) return null;
return skin.body().texturePath();
} catch (Exception ignored) {
return null;
}
}
}