{"id":48039,"date":"2026-06-02T14:43:57","date_gmt":"2026-06-02T11:43:57","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/"},"modified":"2026-06-02T14:43:57","modified_gmt":"2026-06-02T11:43:57","slug":"craftpresence","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/","title":{"rendered":"CraftPresence"},"content":{"rendered":"<p># CraftPresence<\/p>\n<p>Completely customize the way others see you play Minecraft via Discord&#8217;s Rich Presence API &#038; the DiscordIPC API<br \/>\nby jagrosh!<\/p>\n<p>![License: MIT](https:\/\/opensource.org\/licenses\/MIT)<br \/>\n![Crowdin](https:\/\/crowdin.com\/project\/craftpresence)<br \/>\n![Codacy Badge](https:\/\/app.codacy.com\/gl\/CDAGaming\/CraftPresence\/dashboard?utm_source=gl&#038;utm_medium=referral&#038;utm_content=&#038;utm_campaign=Badge_grade)<br \/>\n![Pipeline Status](https:\/\/gitlab.com\/CDAGaming\/CraftPresence\/commits\/master)<\/p>\n<p>![CurseForge-Downloads](https:\/\/www.curseforge.com\/minecraft\/mc-mods\/craftpresence)<br \/>\n![CurseForge-Availability](https:\/\/www.curseforge.com\/minecraft\/mc-mods\/craftpresence)<\/p>\n<p>![Modrinth-Downloads](https:\/\/modrinth.com\/mod\/craftpresence)<br \/>\n![Modrinth-Availability](https:\/\/modrinth.com\/mod\/craftpresence)<\/p>\n<p>## General Notes<\/p>\n<p>* Beginning in v2.5.0, UniLib is now a **required** dependency<br \/>\n    * UniLib is a new library mod I have created to abstract common API functions for more general use cases as well as<br \/>\n      future projects<br \/>\n    * The mod can be downloaded here<br \/>\n    * This mod **will crash** if UniLib is not found or if using an incompatible version<br \/>\n* This mod identifies as a **Client Side-only** mod<br \/>\n    * This means it **will not run** on the Server&#8217;s side.<br \/>\n    * Fabric and Quilt mod loaders will simply ignore the<br \/>\n      mod, while other mod loaders may crash.<br \/>\n* Some versions of the mod for Minecraft 1.14.x and above require<br \/>\n  the Fabric API<br \/>\n  and the Fabric mod loader<br \/>\n* Some versions of the mod for Minecraft 1.13.x require<br \/>\n  the Rift API<br \/>\n  and the Rift mod loader<br \/>\n* Some versions of the mod for Minecraft 1.1.0 and below<br \/>\n  require Risugami&#8217;s ModLoader<\/p>\n<p>## Features<\/p>\n<p>In addition to having the ability to change your discord status from &#8220;Playing Minecraft&#8221;,<br \/>\nThis mod offers plenty of customization options to specify entirely how others see you play.<br \/>\nFrom having your current biome show up, to which dimension your in, as well as which server you&#8217;re in, and more.<br \/>\nThe customization possibilities are limitless, with the only real limit being how creative you customize your display.<\/p>\n<p>### Launcher and Pack Integration Support<\/p>\n<p>CraftPresence will detect whether your Launch Directory contains:<\/p>\n<p>* A ATLauncher Instance (instance.json)<br \/>\n* A valid Twitch\/Overwolf\/Curse\/GDLauncher Manifest (manifest.json, minecraftinstance.json)<br \/>\n* A MCUpdater Instance (instance.json)<br \/>\n* A Modrinth Instance (profile.json)<br \/>\n* A MultiMC Instance (instance.cfg)<br \/>\n* A Technic installedPacks File (installedPacks)<\/p>\n<p>If using any of these launchers, note the following:<\/p>\n<p>* Prior to v1.6.0, it&#8217;ll put the packs name in your display as well as show its icon (when not in a<br \/>\n  server)<br \/>\n* From v1.6.0 until v2.0.0, it&#8217;ll instead parse the Pack&#8217;s name into the `&#038;PACK&#038;` placeholder, that you can configure<br \/>\n  for<br \/>\n  usage in the RPC<br \/>\n* In v2.0, the pack&#8217;s info is instead parsed into the `pack.name` and `pack.icon` placeholders, that you can configure<br \/>\n  for<br \/>\n  usage in the RPC<\/p>\n<p>As an example, this is how the mod will convert a pack&#8217;s name to an iconKey:<\/p>\n<p>Example: `All the Mods 7` would parse as `allthemods7`<\/p>\n<p>Note: MultiMC natively has an Icon Key Property that is used instead of converting from the Pack&#8217;s Display Name<\/p>\n<p>## Commands<\/p>\n<p>CraftPresence currently offers the following Commands:<\/p>\n<p>Keep in mind the following:<\/p>\n<p>* Commands must be prefixed by either `\/craftpresence` or `\/cp`<br \/>\n* In v1.5.0 and above, these commands are only usable via the Commands Gui, found within the Config Gui<\/p>\n<p>___<\/p>\n<p>* `\/cp compile &#8220;[expr]&#8221;` &#8211; Test the output of a placeholder expression, via Starscript<br \/>\n* `\/cp search (type:typeName, [searchTerm], all)` &#8211; Search for valid placeholders available to use with Rich Presence<br \/>\n* `\/cp reload` &#8211; Reloads mod data<br \/>\n* `\/cp request` &#8211; View Join Request Info<br \/>\n* `\/cp export` &#8211; View export commands for mod data<br \/>\n* `\/cp view` &#8211; Help command to display the commands available to view and control a variety of display data<br \/>\n    * `\/cp view placeholders` &#8211; Displays all available placeholders for use in the RPC<br \/>\n    * `\/cp view currentData` &#8211; Displays your Current RPC Data, in text form<br \/>\n    * `\/cp view assets (custom | all)` &#8211; Displays all asset icon keys available to you<br \/>\n    * `\/cp view dimensions` &#8211; Displays all Dimension Names available for use, requires `Show Current Dimension` to be<br \/>\n      enabled<br \/>\n    * `\/cp view biomes` &#8211; Displays all Biome Names available for use, requires `Show Current Biome` to be enabled<br \/>\n    * `\/cp view servers` &#8211; Displays all Server Addresses available for use, requires `Show Game State` to be enabled<br \/>\n    * `\/cp view screens` &#8211; Displays all Gui Names available for use, if Per-Gui is enabled<br \/>\n    * `\/cp view items` &#8211; Displays all Item Names available for use, if Per-Item is enabled<br \/>\n    * `\/cp view entities` &#8211; Displays all Entity Names available for use, if Per-Entity is enabled<br \/>\n* `\/cp reboot` &#8211; Reboots the RPC<br \/>\n* `\/cp shutdown` &#8211; Shutdown the RPC (Can be turned on from `\/cp reboot`)<br \/>\n* `\/cp (help | ?)` &#8211; Help Command to display the above commands and these explanations<\/p>\n<p>## KeyBinds<\/p>\n<p>CraftPresence currently contains the following KeyBinds:<\/p>\n<p>Notes:<\/p>\n<p>* In v1.5.5 up to v1.8.0, KeyBinds are now customized in the Accessibility Settings in the Config Gui, and not the<br \/>\n  normal controls menu<br \/>\n* In v1.8.0 and above, KeyBinds can now be customized in either the dedicated menu in the Config Gui or the normal<br \/>\n  control menu on applicable versions<\/p>\n<p>___<\/p>\n<p>* `Open Config Gui` &#8211; KeyBind to open the CraftPresence Config Gui (Default: GRAVE\/TILDE Key)<\/p>\n<p>## About Placeholders and Functions<\/p>\n<p>In some configuration areas, CraftPresence provides some placeholders and functions to make things easier:<\/p>\n<p>Keep in mind the following:<\/p>\n<p>* In v2.0.0, placeholders have been rewritten to be compatible<br \/>\n  with Starscript<br \/>\n    * The older list of this section can be<br \/>\n      viewed here)<br \/>\n    * All Placeholders, functions, and code expressions must be surrounded with curly brackets (Example: `{foo.bar}`)<br \/>\n    * In the event that you need to combine a placeholder with other data in a function argument, use the `getResult`<br \/>\n      function<br \/>\n    * Additional functions and standard variables are available<br \/>\n      within StandardLib<\/p>\n<p>___<\/p>\n<p>### Placeholder List<\/p>\n<p>The following placeholders are available for use anywhere in CraftPresence:<\/p>\n<p>* General Placeholders:<br \/>\n    * `general.brand` &#8211; The Minecraft branding label<br \/>\n    * `general.icon` &#8211; The default display icon<br \/>\n    * `general.mods` &#8211; The amount of mods currently in your mods folder<br \/>\n    * `general.title` &#8211; The Minecraft title label<br \/>\n    * `general.version` &#8211; The Minecraft version label<br \/>\n    * `general.protocol` &#8211; The Minecraft version protocol label<br \/>\n* Menu Event Placeholders (Loading and Main Menu):<br \/>\n    * `menu.message` &#8211; The main menu&#8217;s display data, while applicable<br \/>\n    * `menu.icon` &#8211; The main menu&#8217;s display icon, while applicable<br \/>\n* Pack Placeholders:<br \/>\n    * `pack.name` &#8211; The currently detected pack&#8217;s name<br \/>\n    * `pack.icon` &#8211; The currently detected pack&#8217;s icon<br \/>\n    * `pack.type` &#8211; The currently detected pack&#8217;s type<br \/>\n* Player Placeholders:<br \/>\n    * `player.name` &#8211; Your username<br \/>\n    * `player.uuid.short` &#8211; Your UUID (Trimmed Format)<br \/>\n    * `player.uuid.full` &#8211; Your UUID (Full Format, if valid UUID)<br \/>\n    * `player.icon` &#8211; Your player head icon, while applicable<br \/>\n    * `player.position.x` &#8211; Your current in-game X position<br \/>\n    * `player.position.y` &#8211; Your current in-game Y position<br \/>\n    * `player.position.z` &#8211; Your current in-game Z position<br \/>\n    * `player.health.current` &#8211; Your current in-game health<br \/>\n    * `player.health.max` &#8211; Your current in-game maximum health<br \/>\n    * `player.mode` &#8211; Your current game mode<br \/>\n* Gui Placeholders:<br \/>\n    * `screen.message` &#8211; The current Gui Screen&#8217;s display data, while applicable<br \/>\n    * `screen.name` &#8211; The current Gui Screen name<br \/>\n    * `screen.icon` &#8211; The current Gui Screen icon<br \/>\n    * `screen.default.icon` &#8211; The default Gui Screen icon<br \/>\n* Biome Placeholders:<br \/>\n    * `biome.message` &#8211; The current biome&#8217;s display data, while in-game<br \/>\n    * `biome.name` &#8211; The current biome name<br \/>\n    * `biome.identifier` &#8211; The current biome identifier<br \/>\n    * `biome.icon` &#8211; The current biome icon<br \/>\n    * `biome.default.icon` &#8211; The default biome icon<br \/>\n* Dimension Placeholders:<br \/>\n    * `dimension.message` &#8211; The current dimension&#8217;s display data, while in-game<br \/>\n    * `dimension.name` &#8211; The current dimension name<br \/>\n    * `dimension.identifier` &#8211; The current dimension identifier<br \/>\n    * `dimension.icon` &#8211; The current dimension icon<br \/>\n    * `dimension.default.icon` &#8211; The default dimension icon<br \/>\n* Entity Placeholders:<br \/>\n    * `entity.default.icon` &#8211; The default entity icon<br \/>\n    * `entity.target.message` &#8211; The currently targeted entity&#8217;s display data, while applicable<br \/>\n    * `entity.target.name` &#8211; The currently targeted entity&#8217;s name<br \/>\n    * `entity.target.icon` &#8211; The currently targeted entity&#8217;s icon<br \/>\n    * `entity.riding.message` &#8211; The currently riding entity&#8217;s display data, while applicable<br \/>\n    * `entity.riding.name` &#8211; The currently riding entity&#8217;s name<br \/>\n    * `entity.riding.icon` &#8211; The currently riding entity&#8217;s icon<br \/>\n* World Placeholders:<br \/>\n    * `world.difficulty` &#8211; The current world&#8217;s difficulty<br \/>\n    * `world.weather.name` &#8211; The current world&#8217;s weather name<br \/>\n    * `world.name` &#8211; The name of the current world<br \/>\n    * `world.type` &#8211; The current world type<br \/>\n    * `world.time.format_24` &#8211; The current world&#8217;s in-game time (24-hour format)<br \/>\n    * `world.time.format_12` &#8211; The current world&#8217;s in-game time (12-hour format)<br \/>\n    * `world.time.day` &#8211; The current world&#8217;s in-game day count<br \/>\n* Server Placeholders:<br \/>\n    * `server.message` &#8211; The current server&#8217;s display data, while in-game<br \/>\n    * `server.icon` &#8211; The current server icon<br \/>\n    * `server.default.icon` &#8211; The default server icon<br \/>\n    * `server.players.current` &#8211; The server&#8217;s current player count<br \/>\n    * `server.players.max` &#8211; The server&#8217;s maximum player count<br \/>\n    * `server.address.full` &#8211; (MP) The raw current server address<br \/>\n    * `server.address.short` &#8211; (MP) The formatted current server address<br \/>\n    * `server.name` &#8211; (MP) The current server name<br \/>\n    * `server.motd.raw` &#8211; (MP) The current raw server motd<br \/>\n    * `server.minigame` &#8211; (Realm) The current realm minigame name<br \/>\n    * `server.type` &#8211; (Realm) The current realm world type<br \/>\n* Item Placeholders:<br \/>\n    * `item.message.default` &#8211; The default item display data, while applicable<br \/>\n    * `item.message.holding` &#8211; The held item(s) display data, while applicable<br \/>\n    * `item.message.equipped` &#8211; The equipped item(s) display data, while applicable<br \/>\n    * `item.[slotId].name` &#8211; Current `slotId` item name<br \/>\n    * `item.[slotId].message` &#8211; Current `slotId` item message<br \/>\n* Integration &#8211; Replay Mod:<br \/>\n    * `replaymod.time.current` &#8211; When in the Video Renderer, retrieves the `renderTimeTaken` field<br \/>\n    * `replaymod.time.remaining` &#8211; When in the Video Renderer, retrieves the `renderTimeLeft` field<br \/>\n* Extra Placeholders (Advanced Usage):<br \/>\n    * `_general.instance` &#8211; The `Minecraft` Instance<br \/>\n    * `_general.player` &#8211; The `Minecraft` Player Instance<br \/>\n    * `_general.world` &#8211; The `Minecraft` World Instance<br \/>\n    * `_config.instance` &#8211; The Mod Config Instance<br \/>\n    * `_[moduleName].instance` &#8211; An instance of one of the modules CraftPresence has<br \/>\n        * Module Order: `biome, dimension, entity, item, screen, server, <...>`<br \/>\n    * `data.biome.instance` &#8211; An instance of the player&#8217;s current biome<br \/>\n    * `data.biome.class` &#8211; The class object for the player&#8217;s current biome<br \/>\n    * `data.dimension.instance` &#8211; An instance of the player&#8217;s current dimension<br \/>\n    * `data.dimension.class` &#8211; The class object for the player&#8217;s current dimension<br \/>\n    * `data.entity.target.instance` &#8211; An instance of the currently targeted entity<br \/>\n    * `data.entity.target.class` &#8211; The class object for the currently targeted entity<br \/>\n    * `data.entity.riding.instance` &#8211; An instance of the currently riding entity<br \/>\n    * `data.entity.riding.class` &#8211; The class object for the currently riding entity<br \/>\n    * `data.item.[slotId].instance` &#8211; An instance of the current `slotId`<br \/>\n    * `data.item.[slotId].class` &#8211; The class object for the current `slotId`<br \/>\n    * `data.screen.instance` &#8211; An instance of the current Gui Screen<br \/>\n    * `data.server.motd.line_[number]` &#8211; Retrieves a specific line of `server.motd.raw`<br \/>\n    * `data.[moduleName].time` &#8211; The timestamp at which a module has changed its primary state<br \/>\n        * Use `data.general.time` for the current RPC Starting Timestamp<\/p>\n<p>### Function List<\/p>\n<p>The following functions are available for use anywhere in CraftPresence:<\/p>\n<p>* `asIcon(input, whitespaceIndex ?: &#8221;)` &#8211; Converts a String into a Valid and Acceptable Icon Format<br \/>\n* `asIdentifier(target, formatToId ?: false, avoid ?: false)` &#8211; Converts an Identifier into a properly formatted and<br \/>\n  interpretable Name<br \/>\n* `asProperWord(input, avoid ?: false, skipSymbolReplacement ?: false, caseCheckTimes ?: -1)` &#8211; Converts input into a<br \/>\n  Properly Readable String<br \/>\n* `capitalizeWords(input, timesToCheck ?: -1)` &#8211; Capitalizes the words within a specified string<br \/>\n* `clampDouble(num, min, max)` &#8211; Clamps the Specified Number between a minimum and maximum limit<br \/>\n* `clampFloat(num, min, max)` &#8211; Clamps the Specified Number between a minimum and maximum limit<br \/>\n* `clampInt(num, min, max)` &#8211; Clamps the Specified Number between a minimum and maximum limit<br \/>\n* `clampLong(num, min, max)` &#8211; Clamps the Specified Number between a minimum and maximum limit<br \/>\n* `convertTime(input, originalPattern, newPattern)` &#8211; Convert the specified string into the specified date format, if<br \/>\n  able<br \/>\n* `convertTimeFormat(dateString, fromFormat, toFormat)` &#8211; Convert a Date String from one format to another format<br \/>\n* `convertTimeZone(dateString, fromFormat, fromTimeZone, toTimeZone)` &#8211; Convert a Date String from one timezone to<br \/>\n  another timezone<br \/>\n* `dateToEpochMilli(dateString, format, timeZone ?: null)` &#8211; Convert Date String to Epoch Timestamp in milliseconds<br \/>\n* `dateToEpochSecond(dateString, format, timeZone ?: null)` &#8211; Convert Date String to Epoch Timestamp in seconds<br \/>\n* `epochMilliToDate(epochMilli, format, timeZone ?: null)` &#8211; Convert Epoch Timestamp to Date String in the given format<br \/>\n  and<br \/>\n  timezone<br \/>\n* `epochSecondToDate(epochSecond, format, timeZone ?: null)` &#8211; Convert Epoch Timestamp to Date String in the given<br \/>\n  format and<br \/>\n  timezone<br \/>\n* `executeMethod(classToAccess=Object|String|Class, instance=Object, methodName=String, <parameterType, parameter>&#8230;)` &#8211;<br \/>\n  Invokes the specified Method in the Target Class via Reflection<br \/>\n* `format(input=String, args=Object&#8230;)` &#8211; Returns a formatted string using the specified format string and arguments<br \/>\n* `formatAddress(input, returnPort ?: false)` &#8211; Formats an IP Address based on Input<br \/>\n* `getArrayElement(content=Array, index)` &#8211; Retrieves the array element from the specified content, or null if unable<br \/>\n* `getAsset(input)` &#8211; Retrieves the Specified DiscordAsset data from an Icon Key, if present<br \/>\n* `getAssetId(input)` &#8211; Retrieves the Parsed Icon ID from the specified key, if present<br \/>\n* `getAssetKey(input)` &#8211; Retrieves the Parsed Icon Key from the specified key, if present<br \/>\n* `getAssetType(input)` &#8211; Retrieves the Parsed Image Type from the specified key, if present<br \/>\n* `getAssetUrl(input)` &#8211; Retrieves the Parsed Image Url from the specified key, if present<br \/>\n* `getClass(reference=Object|String)` &#8211; Attempt to retrieve a class object, via the string path or object reference<br \/>\n* `getComponent(data=DataComponentHolder, path=String)` &#8211; (MC 1.20.5+) Attempt to retrieve the Component Data with the<br \/>\n  specified path<br \/>\n* `getCurrentTime()` &#8211; Retrieve the current time, as an Instant<br \/>\n* `getElapsedMillis()` &#8211; Retrieve the elapsed time, in milliseconds<br \/>\n* `getElapsedNanos()` &#8211; Retrieve the elapsed time, in nanoseconds<br \/>\n* `getElapsedSeconds()` &#8211; Retrieve the elapsed time, in seconds<br \/>\n* `getField(classToAccess=Object|String|Class, instance=Object, fieldName=String&#8230;)` &#8211; Retrieves the<br \/>\n  Specified Field(s) via Reflection<br \/>\n* `getFields(classObj=Object|String|Class)` &#8211; Retrieve the available field names for a class object<br \/>\n* `getFirst(args)` &#8211; Retrieve the first non-null string from the specified arguments, or return null<br \/>\n* `getJsonElement(url|jsonString, path=Object&#8230;)` &#8211; Retrieves the json element from the specified content, or null if<br \/>\n  unable<br \/>\n* `getMethods(classObj=Object|String|Class)` &#8211; Retrieve the available method names for a class object<br \/>\n* `getNamespace(input)` &#8211; Retrieve the namespace portion of an Identifier-Style Object<br \/>\n* `getNbt(data=Entity|ItemStack, path=String&#8230;)` &#8211; Attempt to retrieve the NBT Tag with the specified path<br \/>\n* `getOrDefault(target, alternative ?: &#8221;)` &#8211; Retrieve the primary value if non-empty; Otherwise, use the secondary<br \/>\n  value<br \/>\n* `getPath(input)` &#8211; Retrieve the path portion of an Identifier-Style Object<br \/>\n* `getResult(input)` &#8211; Perform recursive conversion on the specified input<br \/>\n* `hasField(classObj=Object|String|Class, fieldName)` &#8211; Retrieves whether the specified class contains the specified<br \/>\n  field name<br \/>\n* `isColor(input)` &#8211; Determines whether an inputted String classifies as a valid Color Code<br \/>\n* `isCustomAsset(input)` &#8211; Determines if the Specified Icon Key is present under the Custom Assets List<br \/>\n* `isUuid(input)` &#8211; Checks via Regex whether the specified String classifies as a valid Uuid<br \/>\n* `isValidAsset(input)` &#8211; Determines if the Specified Icon Key is present under the Current Client ID<br \/>\n* `isValidId(input)` &#8211; Determines if the specified Client ID is valid<br \/>\n* `isWithinValue(value, min, max, contains_min ?: false, contains_max ?: false, check_sanity ?: true)` &#8211; Determines<br \/>\n  whether the specified value is within the specified range<br \/>\n* `length(input)` &#8211; Returns the length of the specified string<br \/>\n* `lerpDouble(num, min, max)` &#8211; Linearly Interpolate between the specified values<br \/>\n* `lerpFloat(num, min, max)` &#8211; Linearly Interpolate between the specified values<br \/>\n* `mcTranslate(input=String, args=Object&#8230;)` &#8211; Translates an Unlocalized String, based on the game translations<br \/>\n  retrieved for<br \/>\n  the current language<br \/>\n* `minify(input, length)` &#8211; Reduces the Length of a String to the Specified Length<br \/>\n* `nullOrEmpty(input, allowWhitespace ?: false)` &#8211; Determines whether a String classifies as NULL or EMPTY<br \/>\n* `randomAsset()` &#8211; Attempts to retrieve a Random Icon Key from the available assets<br \/>\n* `randomString(args)` &#8211; Retrieves a random element from the specified arguments, as a string<br \/>\n* `removeRepeatWords(input)` &#8211; Removes Duplicated Words within an inputted String<br \/>\n* `roundDouble(num, places ?: 0)` &#8211; Rounds a Double to the defined decimal place, if possible<br \/>\n* `snapToStep(num, valueStep)` &#8211; Rounds the Specified Value to the nearest value, using the Step Rate Value<br \/>\n* `split(input, regex, limit ?: 0)` &#8211; Splits this string around matches of the given regular expression<br \/>\n* `stripAllFormatting(input)` &#8211; Strips Color and Formatting Codes from the inputted String<br \/>\n* `stripColors(input)` &#8211; Strips Color Codes from the inputted String<br \/>\n* `stripFormatting(input)` &#8211; Strips Formatting Codes from the inputted String<br \/>\n* `timeFromEpochMilli(epochMilli)` &#8211; Retrieve a Time Instant from the specified epoch time<br \/>\n* `timeFromEpochSecond(epochSecond)` &#8211; Retrieve a Time Instant from the specified epoch time<br \/>\n* `timeFromString(dateString, fromFormat, fromTimeZone ?: null)` &#8211; Format a Date String from one timezone and format<br \/>\n  into a valid Instant instance<br \/>\n* `timeToEpochMilli(data)` &#8211; Gets the number of milliseconds from the Java Epoch, derived from specified args<br \/>\n* `timeToEpochSecond(data)` &#8211; Gets the number of seconds from the Java Epoch, derived from specified args<br \/>\n* `timeToString(date, toFormat, toTimeZone ?: null)` &#8211; Format a Date String using the specified timezone and format.<br \/>\n* `toCamelCase(input)` &#8211; Converts a String into a Valid and Acceptable Camel-Case Format<br \/>\n* `translate(input=String, args=Object&#8230;)` &#8211; Translates an Unlocalized String, based on the mod translations retrieved<br \/>\n  for<br \/>\n  the current language<\/p>\n<p>## Disclaimers &#038; Additional Info<\/p>\n<p>### Minecraft Issues + Additional Build Info<\/p>\n<p>Despite best efforts, issues can occur due to the state of the Minecraft Codebase.<\/p>\n<p>These issues can hinder certain portions of the backend in addition to cause certain parts of the mod to not work.<\/p>\n<p>With this in mind, please note the following:<\/p>\n<p>* **Minecraft 1.16 and above**<br \/>\n    * As more parts of the game become data-driven, some modded data is no longer able to be automatically retrieved<br \/>\n      without first being in the world.<br \/>\n    * So far, Biome and Dimension Modules are effected by this change and only display default data, with extra data<br \/>\n      needing to be discovered first.<br \/>\n* **Minecraft 1.15 and below**<br \/>\n    * `MC-112292`: When interacting with the `RenderUtils#drawItemStack` method, used in the v2 Item Renderer, blocks<br \/>\n      using certain renderers may fail to display properly.<br \/>\n    * Additionally, on 1.15.x exclusively, z-level issues may occur on Screens using this method<br \/>\n* **Minecraft a1.1.2_01 and below**<br \/>\n    * On these versions, the Biome and Dimension Modules are **stubbed** with default data, due to the logic for these<br \/>\n      methods being missing (Having been initially implemented in Alpha 1.2.6)<br \/>\n* **Miscellaneous Issues**<br \/>\n    * Due to obfuscation issues in earlier versions of Minecraft, incorrect data may appear when using certain parts of<br \/>\n      the mod.<br \/>\n        * In this case, the Biome and Dimension Modules may fail to auto-detect some necessary information<br \/>\n        * As a fallback, the mod is also designed to add selectable Module Data when said biome\/dimension is first<br \/>\n          discovered.<br \/>\n        * The &#8220;Add New&#8221; option found in some of the module lists can also be used to work around this issue.<\/p>\n<p>Additionally, some settings or API calls may perform differently under certain MC versions.<\/p>\n<p>### Icon Requesting<\/p>\n<p>Not seeing an Icon you like or have a suggestion for an Icon to add\/modify on the default Client ID?<\/p>\n<p>If so, you can make a request on my Issue Tracker, with the<br \/>\nfollowing requirements:<\/p>\n<p>* If adding an Icon from a dimension, specify the Mod&#8217;s link that the dimension derives from<br \/>\n    * This is because specific Icon IDs must be used, which can be found by the mod or from checking your Logs\/Chat<br \/>\n      after entering the dimension as CraftPresence will tell you the ID expected<br \/>\n* An Icon of size between `512&#215;512` and `1024&#215;1024` to be used (Either minimum or recommended size for best quality)<br \/>\n    * Icons between these sizes can be used, but may not give a great final quality<br \/>\n* If requesting an icon to be modified or removed from the Default Client ID, please specify a reason why<br \/>\n    * Mostly just so it can be logged why it was changed for future reference<\/p>\n<p>Additionally, you can also create your own Set of Icons by<br \/>\nfollowing this guide<\/p>\n<p>### Support<\/p>\n<p>Need some assistance with one of my mods or wish to provide feedback?<\/p>\n<p>I can be contacted via the following methods:<\/p>\n<p>* [Email](mailto:cstack2011@yahoo.com)<br \/>\n* CurseForge<br \/>\n* Discord :: ![Discord Chat](https:\/\/discord.com\/invite\/BdKkbpP)<\/p>\n<p>Additionally, codebase documentation for this mod is<br \/>\navailable here with further guides available<br \/>\non the wiki<\/p>\n<p>#### Licensing<\/p>\n<p>This Mod is under the MIT License as well as the Apache 2.0 License<\/p>\n<p>This project currently makes usage of the following dependencies internally:<\/p>\n<p>* Starscript<br \/>\n  by MeteorDevelopment<br \/>\n* DiscordIPC API by jagrosh<br \/>\n* UniLib by CDAGaming<\/p>\n<p>#### Discord Terms of Service<\/p>\n<p>As with other RPC Mods, this Mod uses your in-game data to send display information to a 3rd party service (In this<br \/>\nCase, Discord).<\/p>\n<p>The terms of service relating to Creating a Discord ID for icons can be<br \/>\nfound here<\/p>\n<p>The terms of service for using Discord as a service can additionally be located here<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Completely Customize the way others see you play in Discord!<\/p>\n","protected":false},"featured_media":48040,"template":"","meta":{"_minecraft_slug":"craftpresence","_minecraft_project_id":"DFqQfIBR","_minecraft_author":"CDAGaming","_minecraft_license":"MIT","_minecraft_downloads":9981747,"_minecraft_follows":863,"_minecraft_client_side":"required","_minecraft_server_side":"unsupported","_minecraft_storage_type":"zip","_minecraft_archive_name":"craftpresence.zip","_minecraft_size_bytes":951191296,"_minecraft_version_count":506,"_minecraft_updated_at":"2026-05-15T19:50:03.287163Z","_minecraft_date_created":"2022-08-08T16:27:11.909915Z","_minecraft_date_modified":"2026-04-10T07:22:15.203052Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/craftpresence","_minecraft_icon_attachment_id":48040,"_minecraft_imported_at":"2026-06-02T11:43:58+00:00","_minecraft_import_hash":"e46fb3a95b3e1aaa01e27b62e7f8c475","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[97,104,873,996,158,98,1018,92],"mod_loader":[99,106,997,160,100,1019],"minecraft_version":[850,851,341,360,385,449,110,111,112,113,114,115,116,117,118,119,120,46,47,48,49,50,51,52,53,54,55,56,57,58,685,687,688,689,849,59,699,700,702,703,704,705,706,36,707,60,712,714,715,93,727,94,101,141,142,143,144,145,102,62,95,96,154,108,37,40,41,809,73,71,72,749,750,74,38,752,754,78,767,770,79,780,781,782,783,784,80,81,82,796,800,853,858,166,12,21,31,864,669,670,672,673,682,692,693,694,695,696,697,698,708,709,710,711,720,721,722,733,738,739,740,742,743,138,139,140,148,150,151,152,153,63,64,65,66,67,68,69,70,75,76,77,757,761,762,764,766,772,773,774,775,776,777,778,779,788,162,789,791,792,794,795,802,803,804,805,806,807,83,831,816,817,163,913,916,930,935,938,940,942,944,951,954,956],"class_list":["post-48039","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-fabric","mod_category-forge","mod_category-library","mod_category-modloader","mod_category-neoforge","mod_category-quilt","mod_category-rift","mod_category-utility","mod_loader-fabric","mod_loader-forge","mod_loader-modloader","mod_loader-neoforge","mod_loader-quilt","mod_loader-rift","minecraft_version-1-0","minecraft_version-1-1","minecraft_version-1-10-2","minecraft_version-1-11-2","minecraft_version-1-12-2","minecraft_version-1-13-2","minecraft_version-1-14","minecraft_version-1-14-1","minecraft_version-1-14-2","minecraft_version-1-14-3","minecraft_version-1-14-4","minecraft_version-1-15","minecraft_version-1-15-1","minecraft_version-1-15-2","minecraft_version-1-16","minecraft_version-1-16-1","minecraft_version-1-16-2","minecraft_version-1-16-3","minecraft_version-1-16-4","minecraft_version-1-16-5","minecraft_version-1-17","minecraft_version-1-17-1","minecraft_version-1-18","minecraft_version-1-18-1","minecraft_version-1-18-2","minecraft_version-1-19","minecraft_version-1-19-1","minecraft_version-1-19-2","minecraft_version-1-19-3","minecraft_version-1-19-4","minecraft_version-1-19-4-pre1","minecraft_version-1-19-4-pre3","minecraft_version-1-19-4-pre4","minecraft_version-1-19-4-rc1","minecraft_version-1-2-5","minecraft_version-1-20","minecraft_version-1-20-pre1","minecraft_version-1-20-pre2","minecraft_version-1-20-pre4","minecraft_version-1-20-pre5","minecraft_version-1-20-pre6","minecraft_version-1-20-pre7","minecraft_version-1-20-rc1","minecraft_version-1-20-1","minecraft_version-1-20-1-rc1","minecraft_version-1-20-2","minecraft_version-1-20-2-pre1","minecraft_version-1-20-2-pre3","minecraft_version-1-20-2-pre4","minecraft_version-1-20-3","minecraft_version-1-20-3-pre2","minecraft_version-1-20-4","minecraft_version-1-20-5","minecraft_version-1-20-5-pre1","minecraft_version-1-20-5-pre2","minecraft_version-1-20-5-pre3","minecraft_version-1-20-5-pre4","minecraft_version-1-20-5-rc1","minecraft_version-1-20-6","minecraft_version-1-21","minecraft_version-1-21-pre1","minecraft_version-1-21-pre2","minecraft_version-1-21-pre3","minecraft_version-1-21-rc1","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-11-pre2","minecraft_version-1-21-2","minecraft_version-1-21-2-pre1","minecraft_version-1-21-2-pre2","minecraft_version-1-21-2-rc1","minecraft_version-1-21-2-rc2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-4-pre2","minecraft_version-1-21-4-rc1","minecraft_version-1-21-5","minecraft_version-1-21-5-pre1","minecraft_version-1-21-5-rc1","minecraft_version-1-21-6","minecraft_version-1-21-6-pre1","minecraft_version-1-21-6-pre2","minecraft_version-1-21-6-pre3","minecraft_version-1-21-6-pre4","minecraft_version-1-21-6-rc1","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-1-21-9-pre1","minecraft_version-1-21-9-rc1","minecraft_version-1-3-2","minecraft_version-1-4-7","minecraft_version-1-5-2","minecraft_version-1-6-4","minecraft_version-1-7-10","minecraft_version-1-8-9","minecraft_version-1-9-4","minecraft_version-22w42a","minecraft_version-22w43a","minecraft_version-22w45a","minecraft_version-22w46a","minecraft_version-23w05a","minecraft_version-23w12a","minecraft_version-23w13a","minecraft_version-23w13a_or_b","minecraft_version-23w14a","minecraft_version-23w16a","minecraft_version-23w17a","minecraft_version-23w18a","minecraft_version-23w31a","minecraft_version-23w32a","minecraft_version-23w33a","minecraft_version-23w35a","minecraft_version-23w42a","minecraft_version-23w43a","minecraft_version-23w43b","minecraft_version-23w51b","minecraft_version-24w05b","minecraft_version-24w06a","minecraft_version-24w07a","minecraft_version-24w10a","minecraft_version-24w11a","minecraft_version-24w12a","minecraft_version-24w13a","minecraft_version-24w14a","minecraft_version-24w18a","minecraft_version-24w19b","minecraft_version-24w20a","minecraft_version-24w21a","minecraft_version-24w21b","minecraft_version-24w33a","minecraft_version-24w34a","minecraft_version-24w35a","minecraft_version-24w36a","minecraft_version-24w37a","minecraft_version-24w38a","minecraft_version-24w39a","minecraft_version-24w40a","minecraft_version-24w44a","minecraft_version-24w45a","minecraft_version-24w46a","minecraft_version-25w02a","minecraft_version-25w06a","minecraft_version-25w07a","minecraft_version-25w09a","minecraft_version-25w10a","minecraft_version-25w14craftmine","minecraft_version-25w15a","minecraft_version-25w16a","minecraft_version-25w17a","minecraft_version-25w18a","minecraft_version-25w19a","minecraft_version-25w20a","minecraft_version-25w21a","minecraft_version-25w31a","minecraft_version-25w32a","minecraft_version-25w33a","minecraft_version-25w34b","minecraft_version-25w35a","minecraft_version-25w36b","minecraft_version-25w37a","minecraft_version-25w41a","minecraft_version-25w42a","minecraft_version-25w43a","minecraft_version-25w44a","minecraft_version-25w45a","minecraft_version-25w46a","minecraft_version-26-1","minecraft_version-26-1-rc-2","minecraft_version-26-1-snapshot-1","minecraft_version-26-1-snapshot-2","minecraft_version-26-1-2","minecraft_version-a1-0-17_04","minecraft_version-a1-1-2_01","minecraft_version-a1-2-6","minecraft_version-b1-1_02","minecraft_version-b1-2_02","minecraft_version-b1-3_01","minecraft_version-b1-4_01","minecraft_version-b1-5_01","minecraft_version-b1-6-6","minecraft_version-b1-7-3","minecraft_version-b1-8-1"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CraftPresence - 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\/craftpresence\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CraftPresence - Minecraft\" \/>\n<meta property=\"og:description\" content=\"Completely Customize the way others see you play in Discord!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/\" \/>\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=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/\",\"name\":\"CraftPresence - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/craftpresence-icon-16d9958b2b764a82185ad53db94ea0f37d5a80d7_96.webp\",\"datePublished\":\"2026-06-02T11:43:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/craftpresence-icon-16d9958b2b764a82185ad53db94ea0f37d5a80d7_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/craftpresence-icon-16d9958b2b764a82185ad53db94ea0f37d5a80d7_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/craftpresence\\\/#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\":\"CraftPresence\"}]},{\"@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":"CraftPresence - 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\/craftpresence\/","og_locale":"en_US","og_type":"article","og_title":"CraftPresence - Minecraft","og_description":"Completely Customize the way others see you play in Discord!","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/","name":"CraftPresence - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/craftpresence-icon-16d9958b2b764a82185ad53db94ea0f37d5a80d7_96.webp","datePublished":"2026-06-02T11:43:57+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/craftpresence-icon-16d9958b2b764a82185ad53db94ea0f37d5a80d7_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/craftpresence-icon-16d9958b2b764a82185ad53db94ea0f37d5a80d7_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/craftpresence\/#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":"CraftPresence"}]},{"@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\/48039","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\/48040"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=48039"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=48039"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=48039"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=48039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}