using System.Security.Cryptography; using System.Text; namespace Pilz.Gaming.Minecraft; public static class Utils { public static string GetUUID(string value) { using var md5 = MD5.Create(); //extracted from the java code: //new GameProfile(UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)), name)); byte[] data = md5.ComputeHash(Encoding.ASCII.GetBytes(value)); //set the version to 3 -> Name based md5 hash data[6] = Convert.ToByte(data[6] & 0x0f | 0x30); //IETF variant data[8] = Convert.ToByte(data[8] & 0x3f | 0x80); //example: 069a79f4-44e9-4726-a5be-fca90e38aaf5 var striped = Convert.ToHexString(data); var components = new string[] { striped[..].Remove(8), striped[8..].Remove(4), striped[12..].Remove(4), striped[16..].Remove(4), striped[20..] }; return string.Join('-', components).ToLower(); } public static string GetPlayerUUID(string username, bool offlineMode) { using var md5 = MD5.Create(); if (!offlineMode) throw new NotSupportedException("Getting player's online UUID via the Mojang API is not supported at this time."); return GetUUID("OfflinePlayer:" + username); } }