A modding utility that provides reusable components for configuration files, command systems, and user interfaces
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's unique content.
For Players: If a mod you downloaded requires "EverlastingUtils," you just need to install this library in your
modsfolder. You can ignore all the technical information below.Legacy Versions: If you are using older versions of mods that require this library, please download EverlastingUtils version
1.0.2.
Attention Developers
The information from this point forward is intended for mod developers looking to use EverlastingUtils as a dependency in their own projects.
EverlastingUtils is designed to accelerate development by providing ready-to-use, high-quality systems for:
ConfigManager)The ConfigManager is a sophisticated system designed to handle all aspects of configuration management with minimal boilerplate.
Key Functionalities:
config.jsonc and any number of "secondary" configs in sub-directories, perfect for organizing complex data like Pokémon or loot pools.ConfigManager compares the version number in the user's config file with your mod's current version. If they don't match, it automatically merges their existing settings into a new, updated config structure, preserving their changes.Example Usage:
// 1. Define your configuration structure
data class MyConfig(
override val version: String = "1.0.0",
override val configId: String = "mymod", // Used for the config folder name
var debugMode: Boolean = false,
var welcomeMessage: String = "<green>Welcome to my server!"
) : ConfigData
// 2. Initialize the manager in your mod's entry point
val configManager = ConfigManager(
currentVersion = "1.0.0", // Your mod's current version
defaultConfig = MyConfig(),
configClass = MyConfig::class,
metadata = ConfigMetadata(
headerComments = listOf("Main configuration for MyMod."),
sectionComments = mapOf("debugMode" to "Enables detailed console logging.")
)
)
// 3. Access your config anywhere
val isDebug = configManager.getCurrentConfig().debugMode
SchedulerManager)The SchedulerManager provides a safe and efficient way to schedule delayed or repeating tasks, built specifically for the Minecraft server environment.
Key Functionalities:
Example Usage:
// In your server-side initializer (e.g., inside ServerLifecycleEvents.SERVER_STARTED)
val server = ... // Get the MinecraftServer instance
// Schedule a task to run every 5 minutes on the main server thread
SchedulerManager.scheduleAtFixedRate(
id = "mymod-broadcast-task", // Unique ID for this task
server = server,
initialDelay = 0,
period = 5,
unit = TimeUnit.MINUTES,
runAsync = false, // IMPORTANT: false runs on the main server thread
task = {
// This code is safe to run because runAsync is false
server.playerManager.broadcast(Text.literal("It has been 5 minutes!"), false)
}
)
CommandManager)A fluent builder for creating Brigadier commands with less boilerplate. It handles permission checks automatically, supporting both vanilla OP levels and the Fabric Permissions API.
val commandManager = CommandManager(modId = "mymod")
commandManager.command("hello", permission = "mymod.hello") {
executes { context ->
context.source.sendFeedback({ Text.literal("Hello, world!") }, false)
1 // Success
}
subcommand("admin") {
executes { context -> /* ... */ }
}
}
// Don't forget to register it!
commandManager.register()
CustomGui & AnvilGuiManager)Quickly create interactive GUIs for your players with callback-based logic, dynamic updates, and full MiniMessage support for titles and lore.
// Example of a simple chest GUI
CustomGui.openGuiFormatted(
player = player,
title = "<gradient:gold:yellow>My Awesome GUI",
layout = listOf(
CustomGui.createFormattedButton(
ItemStack(Items.DIAMOND),
"<blue>Click Me!",
listOf("<gray>This is a button."),
player
)
),
onInteract = { context ->
if (context.slotIndex == 0) {
player.sendMessage(Text.literal("You clicked the button!"))
CustomGui.closeGui(player)
}
},
onClose = { /* ... */ }
)
To use EverlastingUtils in your project, add it to your dependencies.
repositories {
// Add the repository where EverlastingUtils is hosted
maven { url = "https://api.modrinth.com/maven" }
}
dependencies {
// Add the library as a dependency
modImplementation("maven.modrinth:e-utils:1.1.2") // Replace with the latest version
}
Make sure to declare the dependency in your fabric.mod.json file.
"depends": {
"everlastingutils": ">=1.1.2" // Replace with the version you are using
}