sten.wtf / STEN Vault source

In-house snapshot of sten-vault 2.3.2. GPL-3.0-or-later. Isolated from the dashboard.

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