{"id":160285,"date":"2026-06-09T17:49:21","date_gmt":"2026-06-09T14:49:21","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/"},"modified":"2026-06-09T17:49:21","modified_gmt":"2026-06-09T14:49:21","slug":"trueuuid","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/","title":{"rendered":"TrueUUID"},"content":{"rendered":"<p># TrueUUID<\/p>\n<p>English | \u7b80\u4f53\u4e2d\u6587<\/p>\n<p>A Forge 1.20.X mod that securely verifies premium accounts on an offline-mode server during the login phase, without sending the player&#8217;s access token to the server.<\/p>\n<p>TrueUUID lets an offline-mode server:<br \/>\n&#8211; Ask the client to perform Mojang &#8220;joinServer&#8221; locally.<br \/>\n&#8211; Verify with Mojang Session Server from the server using a nonce.<br \/>\n&#8211; If verification passes: replace the player&#8217;s UUID with the official premium UUID, fix username casing, and inject skin properties.<br \/>\n&#8211; If verification fails or times out: configurable behavior (kick on timeout by default; failover to offline mode for verification failures by default).<br \/>\n&#8211; Inform the player on join with a Title whether they are in &#8220;Online\/Premium Mode&#8221; or &#8220;Offline Mode&#8221; and send an explanatory chat message for offline fallback.<\/p>\n<p>Note: Client and server must both install this mod. The server must run in offline mode.<\/p>\n<p>## Why<\/p>\n<p>&#8211; Privacy-preserving: the player&#8217;s access token never leaves the client. The client calls `joinServer(profile, token, nonce)` locally.<br \/>\n&#8211; Better identity integrity: even in offline mode, verified players keep their official UUID and skins.<br \/>\n&#8211; Clear UX: show Title messages for premium vs offline mode, plus a chat hint when falling back to offline.<\/p>\n<p>## How it works<\/p>\n<p>1. Server is in offline mode. During login (HELLO), the server sends a custom login query with a nonce (transactionId + identifier `trueuuid:auth` + data).<br \/>\n2. The modded client intercepts this query, reads the nonce, and locally calls `MinecraftSessionService.joinServer(profile, token, nonce)` (token never sent to the server).<br \/>\n3. The client replies with a boolean ack (no sensitive data).<br \/>\n4. The server calls Mojang Session Server `\/hasJoined?username={name}&#038;serverId={nonce}[&#038;ip={ip}]`.<br \/>\n5. If success:<br \/>\n   &#8211; Replace the pending login `GameProfile` with premium UUID and the name returned from Mojang (ensuring correct casing).<br \/>\n   &#8211; Inject skin properties (textures) with signature into the `GameProfile` property map.<br \/>\n   &#8211; After join, force-refresh player info so skins update.<br \/>\n   &#8211; Show a green Title &#8220;Premium Mode&#8221;.<br \/>\n6. If failure:<br \/>\n   &#8211; Behavior is configurable. By default:<br \/>\n     &#8211; Timeout: kick with configurable message.<br \/>\n     &#8211; Any verification failure (ack=false \/ hasJoined failed \/ server error): fall back to vanilla offline flow (no UUID replacement), then:<br \/>\n       &#8211; Show a red Title &#8220;Offline Mode&#8221; with a short subtitle.<br \/>\n       &#8211; Send a chat message explaining that the session failed and it might be due to network issues.<\/p>\n<p>## Requirements<\/p>\n<p>&#8211; Minecraft: 1.20.X<br \/>\n&#8211; Forge: 47.x (e.g., 47.4.8)<br \/>\n&#8211; Java: 17<br \/>\n&#8211; Client and server must both install this mod.<br \/>\n&#8211; Server property: `online-mode=false`<\/p>\n<p>## Installation<\/p>\n<p>&#8211; Server:<br \/>\n  &#8211; Set `online-mode=false` in `server.properties`.<br \/>\n  &#8211; Place the built JAR in `mods\/`.<br \/>\n&#8211; Client:<br \/>\n  &#8211; Place the same JAR in `mods\/`.<\/p>\n<p>Tip: If the client does not have this mod, the server will not receive a valid response to the custom login query. Depending on configuration, the server may kick or fall back to offline mode.<\/p>\n<p>## Configuration<\/p>\n<p>After the first run, a config file is generated:<br \/>\n&#8211; `config\/trueuuid-common.toml`<\/p>\n<p>Keys and defaults (reflecting the recommended behavior):<br \/>\n&#8211; `auth.timeoutMs = 10000`<br \/>\n  &#8211; Login-phase wait time (milliseconds) for the client&#8217;s reply.<br \/>\n&#8211; `auth.allowOfflineOnTimeout = false`<br \/>\n  &#8211; false: kick on timeout (default)<br \/>\n  &#8211; true: allow offline fallback if timeout occurs<br \/>\n&#8211; `auth.allowOfflineOnFailure = true`<br \/>\n  &#8211; true: allow offline fallback on any verification failure (default)<br \/>\n  &#8211; false: disconnect on failure<br \/>\n&#8211; `auth.timeoutKickMessage = &#8220;\u767b\u5f55\u8d85\u65f6\uff0c\u672a\u5b8c\u6210\u6b63\u7248\u6821\u9a8c&#8221;`<br \/>\n  &#8211; Kick reason shown on timeout.<br \/>\n&#8211; `auth.offlineFallbackMessage = &#8220;\u6ce8\u610f\uff1a\u4f60\u5f53\u524d\u4ee5\u79bb\u7ebf\u6a21\u5f0f\u8fdb\u5165\u670d\u52a1\u5668\uff1b\u5982\u679c\u4f60\u662f\u6b63\u7248\u8d26\u53f7\uff0c\u53ef\u80fd\u662f\u7f51\u7edc\u539f\u56e0\u5bfc\u81f4\u65e0\u6cd5\u6210\u529f\u9274\u6743\u3002&#8221;`<br \/>\n  &#8211; Chat message shown to the player if they were allowed in via offline fallback.<br \/>\n&#8211; `auth.offlineShortSubtitle = &#8220;\u9274\u6743\u5931\u8d25\uff1a\u79bb\u7ebf\u6a21\u5f0f&#8221;`<br \/>\n  &#8211; Short subtitle for the Title when in offline mode.<br \/>\n&#8211; `auth.onlineShortSubtitle = &#8220;\u5df2\u901a\u8fc7\u6b63\u7248\u6821\u9a8c&#8221;`<br \/>\n  &#8211; Short subtitle for the Title when in premium mode.<\/p>\n<p>Notes:<br \/>\n&#8211; The &#8220;Title&#8221; uses short subtitles to avoid overflowing the screen.<br \/>\n&#8211; The long explanatory message is sent via chat when offline fallback happens.<\/p>\n<p>## Compatibility and notes<\/p>\n<p>&#8211; Proxies (Bungee\/Velocity): The server optionally includes the client IP in the Mojang `\/hasJoined` call when available. If you&#8217;re behind a proxy that hides the real IP, verification still works because `ip` is optional for Mojang&#8217;s endpoint.<br \/>\n&#8211; Skins: Skin properties are injected during login. The server broadcasts a player info refresh after join to force client-side skin updates.<br \/>\n&#8211; If the client is unmodded: it will not respond with the expected payload. Depending on config, the server will either kick or allow offline fallback.<\/p>\n<p>## Privacy<\/p>\n<p>&#8211; The player&#8217;s access token is never sent to your server. The token is used locally on the client to call `joinServer`.<br \/>\n&#8211; The server only receives a boolean ack and then itself contacts Mojang&#8217;s session server to verify the nonce.<\/p>\n<p>## License<\/p>\n<p>&#8211; GNU LGPL 3.0 (see `gradle.properties` \/ project license)<\/p>\n<p>## Credits<\/p>\n<p>&#8211; Mojang authlib and session API.<br \/>\n&#8211; Sponge Mixin.<br \/>\n&#8211; ForgeGradle.<\/p>\n<p>&#8212;<br \/>\nMaintained by: @YuWan-030<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A Forge 1.20.X mod that securely verifies premium accounts on an offline-mode server during the login phase, without sending the player&#8217;s access token to the server.<\/p>\n","protected":false},"featured_media":160286,"template":"","meta":{"_minecraft_slug":"trueuuid","_minecraft_project_id":"fMgRLYNA","_minecraft_author":"YuWan030","_minecraft_license":"LGPL-3.0-only","_minecraft_downloads":11818,"_minecraft_follows":10,"_minecraft_client_side":"required","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"trueuuid.zip","_minecraft_size_bytes":198700,"_minecraft_version_count":5,"_minecraft_updated_at":"2026-05-16T02:53:58.815392Z","_minecraft_date_created":"2025-09-08T00:32:51.213342Z","_minecraft_date_modified":"2025-11-28T08:10:38.785763Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/trueuuid","_minecraft_icon_attachment_id":160286,"_minecraft_imported_at":"2026-06-09T14:49:21+00:00","_minecraft_import_hash":"6e56106048c12b0466de08e9a710720a","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[104,158],"mod_loader":[106,160],"minecraft_version":[36,60,93,94,101,102,37],"class_list":["post-160285","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-forge","mod_category-neoforge","mod_loader-forge","mod_loader-neoforge","minecraft_version-1-20-1","minecraft_version-1-20-2","minecraft_version-1-20-3","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-6","minecraft_version-1-21-1"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TrueUUID - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TrueUUID - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A Forge 1.20.X mod that securely verifies premium accounts on an offline-mode server during the login phase, without sending the player&#039;s access token to the server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/\",\"name\":\"TrueUUID - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/trueuuid-icon-33110d1f0f67457b917c07bf5bbe0ef66405b144_96.webp\",\"datePublished\":\"2026-06-09T14:49:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/trueuuid-icon-33110d1f0f67457b917c07bf5bbe0ef66405b144_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/trueuuid-icon-33110d1f0f67457b917c07bf5bbe0ef66405b144_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/trueuuid\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"TrueUUID\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TrueUUID - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/","og_locale":"en_US","og_type":"article","og_title":"TrueUUID - Minecraft","og_description":"A Forge 1.20.X mod that securely verifies premium accounts on an offline-mode server during the login phase, without sending the player's access token to the server.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/","name":"TrueUUID - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/trueuuid-icon-33110d1f0f67457b917c07bf5bbe0ef66405b144_96.webp","datePublished":"2026-06-09T14:49:21+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/trueuuid-icon-33110d1f0f67457b917c07bf5bbe0ef66405b144_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/trueuuid-icon-33110d1f0f67457b917c07bf5bbe0ef66405b144_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/trueuuid\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"TrueUUID"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/160285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/160286"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=160285"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=160285"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=160285"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=160285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}