{"id":108621,"date":"2026-06-06T09:47:17","date_gmt":"2026-06-06T06:47:17","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/"},"modified":"2026-06-06T09:47:17","modified_gmt":"2026-06-06T06:47:17","slug":"namemcapi","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/","title":{"rendered":"NameMCAPI"},"content":{"rendered":"<p># NameMCAPI (EarthPol)<\/p>\n<p>NameMCAPI is a lightweight Paper\/Folia-safe plugin that exposes several of NameMC\u2019s **undocumented public API endpoints** as a shared **Bukkit service**.<\/p>\n<p>It is designed to be used by other plugins in the EarthPol ecosystem (or elsewhere) without scraping HTML or blocking the main server thread.<\/p>\n<p>All requests are asynchronous and optionally cached.<\/p>\n<p>&#8212;<\/p>\n<p>Features<\/p>\n<p>&#8211; Async, non-blocking HTTP requests<br \/>\n&#8211; Bukkit Services API integration<br \/>\n&#8211; Optional TTL-based response caching<br \/>\n&#8211; Cache bypass for \u201cfetch latest\u201d calls<br \/>\n&#8211; Paper &#038; Folia compatible<br \/>\n&#8211; Clean separation between API and implementation<\/p>\n<p>&#8212;<\/p>\n<p>Supported NameMC Endpoints<\/p>\n<p>The following NameMC endpoints are currently supported:<\/p>\n<p>&#8211; `GET \/profile\/{uuid}\/friends`<br \/>\n&#8211; `GET \/profile\/{uuid}\/friends?with={uuid}`<br \/>\n&#8211; `GET \/server\/{domain}\/likes`<br \/>\n&#8211; `GET \/server\/{domain}\/likes?profile={uuid}`<\/p>\n<p>&#8212;<\/p>\n<p>Installation<\/p>\n<p>1. Place `NameMCAPI.jar` into your `\/plugins` directory<br \/>\n2. Restart the server<br \/>\n3. The API service will register automatically<\/p>\n<p>No commands or permissions are required.<\/p>\n<p>&#8212;<\/p>\n<p>Configuration<\/p>\n<p>&#8220;`yml<br \/>\nnamemc:<br \/>\n  base-url: &#8220;https:\/\/api.namemc.com&#8221;<br \/>\n  http-timeout-ms: 6000<br \/>\n  cache-ttl-ms: 60000<br \/>\n&#8220;`<\/p>\n<p>### Configuration Options<\/p>\n<p>&#8211; `base-url`<br \/>\n  &#8211; Defaults to `https:\/\/api.namemc.com`<\/p>\n<p>&#8211; `http-timeout-ms`<br \/>\n  &#8211; HTTP request timeout in milliseconds<\/p>\n<p>&#8211; `cache-ttl-ms`<br \/>\n  &#8211; Time-to-live for cached responses<br \/>\n  &#8211; Set to `0` to disable caching entirely<\/p>\n<p>&#8212;<\/p>\n<p>Using NameMCAPI in Other Plugins<\/p>\n<p>NameMCAPI exposes a Bukkit service called `NameMCAPIService`.<\/p>\n<p>1. Obtaining the Service<\/p>\n<p>&#8220;`java<br \/>\nimport com.earthpol.namemc.api.NameMCAPIService;<br \/>\nimport org.bukkit.Bukkit;<\/p>\n<p>NameMCAPIService nameMC =<br \/>\n        Bukkit.getServicesManager().load(NameMCAPIService.class);<\/p>\n<p>if (nameMC == null) {<br \/>\n    getLogger().severe(&#8220;NameMCAPI not found! Is the plugin installed?&#8221;);<br \/>\n    return;<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>This should typically be done once in `onEnable`.<\/p>\n<p>&#8212;<\/p>\n<p>2. Fetching a Player\u2019s Friends List<\/p>\n<p>&#8220;`java<br \/>\nUUID uuid = UUID.fromString(&#8220;d550441b-5fcf-448c-a756-5fa391b89a46&#8221;);<\/p>\n<p>\/\/ false = fetch latest, true = use cache<br \/>\nnameMC.getFriends(uuid, false).thenAccept(friends -> {<br \/>\n    getLogger().info(&#8220;Friend count: &#8221; + friends.size());<br \/>\n});<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>3. Checking if Two Profiles Are Friends<\/p>\n<p>&#8220;`java<br \/>\nUUID a = UUID.fromString(&#8220;403e6cb7-a6ca-440a-8041-7fb1e579b5a5&#8221;);<br \/>\nUUID b = UUID.fromString(&#8220;ac62cc72-ce09-4fd4-9018-38b92ef4d619&#8221;);<\/p>\n<p>nameMC.areFriends(a, b, true).thenAccept(areFriends -> {<br \/>\n    if (areFriends) {<br \/>\n        getLogger().info(&#8220;They are friends on NameMC&#8221;);<br \/>\n    }<br \/>\n});<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>4. Getting Server Like Count<\/p>\n<p>&#8220;`java<br \/>\nnameMC.getServerLikes(&#8220;play.earthpol.com&#8221;, true)<br \/>\n      .thenAccept(likes -><br \/>\n          getLogger().info(&#8220;Server likes: &#8221; + likes)<br \/>\n      );<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>5. Checking if a Player Liked a Server<\/p>\n<p>&#8220;`java<br \/>\nUUID profile = UUID.fromString(&#8220;3bd5b91a-7532-4acf-bd2a-2a739206865b&#8221;);<\/p>\n<p>nameMC.hasProfileLikedServer(&#8220;play.earthpol.com&#8221;, profile, false)<br \/>\n      .thenAccept(liked -> {<br \/>\n          if (liked) {<br \/>\n              getLogger().info(&#8220;Player has liked the server&#8221;);<br \/>\n          }<br \/>\n      });<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>Threading Notes (IMPORTANT)<\/p>\n<p>All callbacks run **off the main thread**.<\/p>\n<p>If you need to interact with Bukkit objects (players, worlds, scoreboards, etc.), you must switch back to the main thread:<\/p>\n<p>&#8220;`java<br \/>\nnameMC.getFriends(uuid, true).thenAccept(friends -> {<br \/>\n    Bukkit.getScheduler().runTask(this, () -> {<br \/>\n        player.sendMessage(&#8220;You have &#8221; + friends.size() + &#8221; NameMC friends&#8221;);<br \/>\n    });<br \/>\n});<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>Maven Dependency (BitworksMC Nexus)<\/p>\n<p>NameMCAPI is published to the BitworksMC Nexus repository and can be consumed directly via Maven.<\/p>\n<p>1. Add the repository<\/p>\n<p>&#8220;`xml<br \/>\n<repositories><br \/>\n    <repository><br \/>\n        <id>bitworksmc-releases<\/id><br \/>\n        <url>https:\/\/nexus.bitworksmc.com\/repository\/maven-releases\/<\/url><br \/>\n    <\/repository><br \/>\n<\/repositories><br \/>\n&#8220;`<br \/>\n2. Add the dependency<\/p>\n<p>&#8220;`xml<br \/>\n<dependency><br \/>\n    <groupId>com.earthpol<\/groupId><br \/>\n    <artifactId>NameMCAPI<\/artifactId><br \/>\n    <version>2.0.0<\/version><br \/>\n    <scope>provided<\/scope><br \/>\n<\/dependency><br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>Design Notes<\/p>\n<p>&#8211; NameMCAPI does **not** scrape HTML<br \/>\n&#8211; Uses NameMC\u2019s publicly accessible JSON endpoints<br \/>\n&#8211; Responses and endpoints are undocumented and may change<br \/>\n&#8211; Failures are not cached<br \/>\n&#8211; Cache deduplicates in-flight requests to avoid stampedes<\/p>\n<p>&#8212;<\/p>\n<p>License \/ Disclaimer<\/p>\n<p>This project is **not affiliated with NameMC** or Mojang\/Microsoft.<\/p>\n<p>NameMC endpoints are undocumented and may change or disappear at any time.<\/p>\n<p>Use at your own risk.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>NameMCAPI is a lightweight Paper\/Folia-safe plugin that exposes several of NameMC\u2019s undocumented public API endpoints as a shared Bukkit service.<\/p>\n","protected":false},"featured_media":108622,"template":"","meta":{"_minecraft_slug":"namemcapi","_minecraft_project_id":"bIC64kUf","_minecraft_author":"GoodrichDev","_minecraft_license":"CC-BY-SA-4.0","_minecraft_downloads":14,"_minecraft_follows":0,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"namemcapi.zip","_minecraft_size_bytes":16198,"_minecraft_version_count":1,"_minecraft_updated_at":"2026-05-15T22:54:13.438237Z","_minecraft_date_created":"2026-01-31T20:56:17.668248Z","_minecraft_date_modified":"2026-01-31T02:16:37.616735Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/namemcapi","_minecraft_icon_attachment_id":108622,"_minecraft_imported_at":"2026-06-06T06:47:18+00:00","_minecraft_import_hash":"7da5cc96fdd11d5c51f410be2bb56487","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[125,873,867,92],"mod_loader":[131],"minecraft_version":[59,36,60,93,94,101,102,62,37,40,41,73,74,38,78,79,80,81,82],"class_list":["post-108621","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-folia","mod_category-library","mod_category-social","mod_category-utility","mod_loader-folia","minecraft_version-1-20","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","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>NameMCAPI - 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\/namemcapi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NameMCAPI - Minecraft\" \/>\n<meta property=\"og:description\" content=\"NameMCAPI is a lightweight Paper\/Folia-safe plugin that exposes several of NameMC\u2019s undocumented public API endpoints as a shared Bukkit service.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/\" \/>\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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/\",\"name\":\"NameMCAPI - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/namemcapi-icon-309348f97397b665b3e03409a3d274c776ede922_96.webp\",\"datePublished\":\"2026-06-06T06:47:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/namemcapi-icon-309348f97397b665b3e03409a3d274c776ede922_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/namemcapi-icon-309348f97397b665b3e03409a3d274c776ede922_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/namemcapi\\\/#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\":\"NameMCAPI\"}]},{\"@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":"NameMCAPI - 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\/namemcapi\/","og_locale":"en_US","og_type":"article","og_title":"NameMCAPI - Minecraft","og_description":"NameMCAPI is a lightweight Paper\/Folia-safe plugin that exposes several of NameMC\u2019s undocumented public API endpoints as a shared Bukkit service.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/","name":"NameMCAPI - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/namemcapi-icon-309348f97397b665b3e03409a3d274c776ede922_96.webp","datePublished":"2026-06-06T06:47:17+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/namemcapi-icon-309348f97397b665b3e03409a3d274c776ede922_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/namemcapi-icon-309348f97397b665b3e03409a3d274c776ede922_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/namemcapi\/#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":"NameMCAPI"}]},{"@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\/108621","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\/108622"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=108621"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=108621"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=108621"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=108621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}