{"id":60493,"date":"2026-06-03T15:38:49","date_gmt":"2026-06-03T12:38:49","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/"},"modified":"2026-06-03T15:38:49","modified_gmt":"2026-06-03T12:38:49","slug":"e-utils","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/","title":{"rendered":"E-Utils"},"content":{"rendered":"<p># EverlastingUtils<\/p>\n<p>EverlastingUtils is a powerful, server-side utility and API library for the Fabric modding toolchain. It provides a robust framework for common, yet complex, features that mod developers frequently need, allowing them to focus more on their mod&#8217;s unique content.<\/p>\n<p>> <font color=\"orange\">**For Players:** If a mod you downloaded requires &#8220;EverlastingUtils,&#8221; you just need to install this library in your `mods` folder. **You can ignore all the technical information below.**<\/font><br \/>\n><br \/>\n> <font color=\"orange\">**Legacy Versions:** If you are using older versions of mods that require this library, please download EverlastingUtils version `1.0.2`.<\/font><\/p>\n<p>### Dependencies<br \/>\n*   Fabric API<br \/>\n*   Fabric Language Kotlin<\/p>\n<p>&#8212;<\/p>\n<p>> <\/p>\n<div style=\"background-color:#400000; padding:10px; border-radius:5px; border: 1px solid #800000;\">\n> <\/p>\n<h2><font color=\"red\">Attention Developers<\/font><\/h2>\n<p>> The information from this point forward is intended for mod developers looking to use EverlastingUtils as a dependency in their own projects.<br \/>\n> <\/p><\/div>\n<p>## Core Features<\/p>\n<p>EverlastingUtils is designed to accelerate development by providing ready-to-use, high-quality systems for:<\/p>\n<p>*   **Configuration**: A type-safe, multi-file configuration system with JSONC support, live reloading, and automatic version migration.<br \/>\n*   **Task Scheduling**: A server-aware scheduler that properly handles synchronous (main thread) and asynchronous tasks, preventing common concurrency issues.<br \/>\n*   **Commands**: A fluent, Brigadier-based command builder with integrated permission handling.<br \/>\n*   **GUIs**: A simple yet powerful framework for creating interactive inventory-based GUIs, including standard and anvil types.<br \/>\n*   **Utilities**: A collection of helpers for things like MiniMessage color parsing and toggleable, per-mod debug logging.<\/p>\n<p>&#8212;<\/p>\n<p>## System Spotlights<\/p>\n<p>### Configuration System (`ConfigManager`)<\/p>\n<p>The `ConfigManager` is a sophisticated system designed to handle all aspects of configuration management with minimal boilerplate.<\/p>\n<p>**Key Functionalities:**<br \/>\n*   **Type-Safe &#038; Modern**: Uses Kotlin data classes for type-safe config access and JSONC for human-readable files with comments.<br \/>\n*   **Live Reloading**: Automatically reloads configuration files from disk when they are changed, allowing server owners to adjust settings without a restart.<br \/>\n*   **Multi-File Support**: Manages a main `config.jsonc` and any number of &#8220;secondary&#8221; configs in sub-directories, perfect for organizing complex data like Pok\u00e9mon or loot pools.<br \/>\n*   **Automatic Migration**: When you release a new version of your mod, the `ConfigManager` compares the version number in the user&#8217;s config file with your mod&#8217;s current version. If they don&#8217;t match, it automatically merges their existing settings into a new, updated config structure, preserving their changes.<br \/>\n*   **Metadata &#038; Comments**: Programmatically add header comments, footer comments, and per-field descriptions to your config files, making them self-documenting.<\/p>\n<p>**Example Usage:**<br \/>\n&#8220;`kotlin<br \/>\n\/\/ 1. Define your configuration structure<br \/>\ndata class MyConfig(<br \/>\n    override val version: String = &#8220;1.0.0&#8221;,<br \/>\n    override val configId: String = &#8220;mymod&#8221;, \/\/ Used for the config folder name<br \/>\n    var debugMode: Boolean = false,<br \/>\n    var welcomeMessage: String = &#8220;<green>Welcome to my server!&#8221;<br \/>\n) : ConfigData<\/p>\n<p>\/\/ 2. Initialize the manager in your mod&#8217;s entry point<br \/>\nval configManager = ConfigManager(<br \/>\n    currentVersion = &#8220;1.0.0&#8221;, \/\/ Your mod&#8217;s current version<br \/>\n    defaultConfig = MyConfig(),<br \/>\n    configClass = MyConfig::class,<br \/>\n    metadata = ConfigMetadata(<br \/>\n        headerComments = listOf(&#8220;Main configuration for MyMod.&#8221;),<br \/>\n        sectionComments = mapOf(&#8220;debugMode&#8221; to &#8220;Enables detailed console logging.&#8221;)<br \/>\n    )<br \/>\n)<\/p>\n<p>\/\/ 3. Access your config anywhere<br \/>\nval isDebug = configManager.getCurrentConfig().debugMode<br \/>\n&#8220;`<\/p>\n<p>### Task Scheduler (`SchedulerManager`)<\/p>\n<p>The `SchedulerManager` provides a safe and efficient way to schedule delayed or repeating tasks, built specifically for the Minecraft server environment.<\/p>\n<p>**Key Functionalities:**<br \/>\n*   **Server-Aware**: The scheduler is tied to the server lifecycle. It automatically shuts down when the server stops and recreates its thread pool on restart, preventing thread leaks and errors.<br \/>\n*   **Sync vs. Async**: Easily specify whether a task should run **synchronously** on the main server thread (necessary for almost all Minecraft API calls) or **asynchronously** on a worker thread (for heavy, non-API work like database queries).<br \/>\n*   **Efficient Threading**: Uses a shared, managed thread pool to prevent individual mods from creating excessive threads and bogging down the server.<br \/>\n*   **Tracked Tasks**: All scheduled tasks are tracked by a unique ID, allowing you to cancel them later if needed.<\/p>\n<p>**Example Usage:**<br \/>\n&#8220;`kotlin<br \/>\n\/\/ In your server-side initializer (e.g., inside ServerLifecycleEvents.SERVER_STARTED)<br \/>\nval server = &#8230; \/\/ Get the MinecraftServer instance<\/p>\n<p>\/\/ Schedule a task to run every 5 minutes on the main server thread<br \/>\nSchedulerManager.scheduleAtFixedRate(<br \/>\n    id = &#8220;mymod-broadcast-task&#8221;, \/\/ Unique ID for this task<br \/>\n    server = server,<br \/>\n    initialDelay = 0,<br \/>\n    period = 5,<br \/>\n    unit = TimeUnit.MINUTES,<br \/>\n    runAsync = false, \/\/ IMPORTANT: false runs on the main server thread<br \/>\n    task = {<br \/>\n        \/\/ This code is safe to run because runAsync is false<br \/>\n        server.playerManager.broadcast(Text.literal(&#8220;It has been 5 minutes!&#8221;), false)<br \/>\n    }<br \/>\n)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## Other Features<\/p>\n<p>### Command System (`CommandManager`)<br \/>\nA fluent builder for creating Brigadier commands with less boilerplate. It handles permission checks automatically, supporting both vanilla OP levels and the Fabric Permissions API.<\/p>\n<p>&#8220;`kotlin<br \/>\nval commandManager = CommandManager(modId = &#8220;mymod&#8221;)<\/p>\n<p>commandManager.command(&#8220;hello&#8221;, permission = &#8220;mymod.hello&#8221;) {<br \/>\n    executes { context -><br \/>\n        context.source.sendFeedback({ Text.literal(&#8220;Hello, world!&#8221;) }, false)<br \/>\n        1 \/\/ Success<br \/>\n    }<br \/>\n    subcommand(&#8220;admin&#8221;) {<br \/>\n        executes { context -> \/* &#8230; *\/ }<br \/>\n    }<br \/>\n}<br \/>\n\/\/ Don&#8217;t forget to register it!<br \/>\ncommandManager.register()<br \/>\n&#8220;`<\/p>\n<p>### GUI Framework (`CustomGui` &#038; `AnvilGuiManager`)<br \/>\nQuickly create interactive GUIs for your players with callback-based logic, dynamic updates, and full MiniMessage support for titles and lore.<\/p>\n<p>&#8220;`kotlin<br \/>\n\/\/ Example of a simple chest GUI<br \/>\nCustomGui.openGuiFormatted(<br \/>\n    player = player,<br \/>\n    title = &#8220;<gradient:gold:yellow>My Awesome GUI&#8221;,<br \/>\n    layout = listOf(<br \/>\n        CustomGui.createFormattedButton(<br \/>\n            ItemStack(Items.DIAMOND),<br \/>\n            &#8220;<blue>Click Me!&#8221;,<br \/>\n            listOf(&#8220;<gray>This is a button.&#8221;),<br \/>\n            player<br \/>\n        )<br \/>\n    ),<br \/>\n    onInteract = { context -><br \/>\n        if (context.slotIndex == 0) {<br \/>\n            player.sendMessage(Text.literal(&#8220;You clicked the button!&#8221;))<br \/>\n            CustomGui.closeGui(player)<br \/>\n        }<br \/>\n    },<br \/>\n    onClose = { \/* &#8230; *\/ }<br \/>\n)<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## For Developers: Getting Started<\/p>\n<p>To use EverlastingUtils in your project, add it to your dependencies.<\/p>\n<p>#### build.gradle.kts<br \/>\n&#8220;`kotlin<br \/>\nrepositories {<br \/>\n    \/\/ Add the repository where EverlastingUtils is hosted<br \/>\n    maven { url = &#8220;https:\/\/api.modrinth.com\/maven&#8221; }<br \/>\n}<\/p>\n<p>dependencies {<br \/>\n    \/\/ Add the library as a dependency<br \/>\n    modImplementation(&#8220;maven.modrinth:e-utils:1.1.2&#8221;) \/\/ Replace with the latest version<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>#### fabric.mod.json<br \/>\nMake sure to declare the dependency in your `fabric.mod.json` file.<br \/>\n&#8220;`json<br \/>\n&#8220;depends&#8221;: {<br \/>\n    &#8220;everlastingutils&#8221;: &#8220;>=1.1.2&#8221; \/\/ Replace with the version you are using<br \/>\n}<br \/>\n&#8220;`<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A modding utility that provides reusable components for configuration files, command systems, and user interfaces<\/p>\n","protected":false},"featured_media":60494,"template":"","meta":{"_minecraft_slug":"e-utils","_minecraft_project_id":"YG7mMy6f","_minecraft_author":"Hysocs","_minecraft_license":"LGPL-3.0-only","_minecraft_downloads":46258,"_minecraft_follows":7,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"e-utils.zip","_minecraft_size_bytes":13641444,"_minecraft_version_count":14,"_minecraft_updated_at":"2026-05-16T10:28:02.828664Z","_minecraft_date_created":"2025-02-08T23:02:52.763890Z","_minecraft_date_modified":"2025-12-21T11:39:57.139261Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/e-utils","_minecraft_icon_attachment_id":60494,"_minecraft_imported_at":"2026-06-03T12:38:50+00:00","_minecraft_import_hash":"4a9504b907202c3830f96dbfdabc524e","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[97,873,123,92],"mod_loader":[99],"minecraft_version":[118,49,51,54,59,36,60,93,94,101,102,62,37,73,74,38],"class_list":["post-60493","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-fabric","mod_category-library","mod_category-technology","mod_category-utility","mod_loader-fabric","minecraft_version-1-16","minecraft_version-1-17","minecraft_version-1-18","minecraft_version-1-19","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-2","minecraft_version-1-21-3","minecraft_version-1-21-4"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>E-Utils - 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\/e-utils\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"E-Utils - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A modding utility that provides reusable components for configuration files, command systems, and user interfaces\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/\" \/>\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\\\/e-utils\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/\",\"name\":\"E-Utils - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/e-utils-icon-fde01a42b215a2545d5ec72b293431889182cf18_96.webp\",\"datePublished\":\"2026-06-03T12:38:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/e-utils-icon-fde01a42b215a2545d5ec72b293431889182cf18_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/e-utils-icon-fde01a42b215a2545d5ec72b293431889182cf18_96.webp\",\"width\":75,\"height\":75},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/e-utils\\\/#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\":\"E-Utils\"}]},{\"@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":"E-Utils - 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\/e-utils\/","og_locale":"en_US","og_type":"article","og_title":"E-Utils - Minecraft","og_description":"A modding utility that provides reusable components for configuration files, command systems, and user interfaces","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/","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\/e-utils\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/","name":"E-Utils - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/e-utils-icon-fde01a42b215a2545d5ec72b293431889182cf18_96.webp","datePublished":"2026-06-03T12:38:49+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/e-utils-icon-fde01a42b215a2545d5ec72b293431889182cf18_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/e-utils-icon-fde01a42b215a2545d5ec72b293431889182cf18_96.webp","width":75,"height":75},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/e-utils\/#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":"E-Utils"}]},{"@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\/60493","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\/60494"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=60493"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=60493"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=60493"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=60493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}