EverMod is a modular framework designed to abstract version differences between Minecraft Forge environments. Its main goal is to allow mod developers to write their code once and compile it for multiple Minecraft versions without modifying the mod's source code.
EverMod simplifies mod development and maintenance by providing pre-built modules for each supported version of Minecraft, along with utilities for networking, sound handling, and position-based operations.
/EverMod/
β
βββ evermod-1.19.2/ # Implementation for Forge 1.19.2
βββ evermod-1.20.1/ # Implementation for Forge 1.20.1
βββ evermod-1.21/ # Implementation for Forge 1.21
βββ .gitattributes
βββ .gitignore
βββ README.mdEach EverMod version module contains the same API interface, but adapted to its corresponding Forge API and Minecraft internals, ensuring maximum compatibility.
EverMod supports four integration methods. While all rely on physical source injection to avoid runtime conflicts, the Multi-Version method is the official recommendation for professional cross-version development.
The most robust way to manage a single mod codebase across multiple Minecraft versions. It uses a centralized root to manage shared logic and specific "project containers" for each version.
MyMod_Root/
βββ EverMod/ # Git Submodule
βββ common/ # YOUR MOD CODE (Single source of truth)
β βββ src/main/java/ # Common logic using EverMod API
βββ projects/ # Version-specific build containers
β βββ forge-1.19.2/
β βββ forge-1.20.1/
β βββ forge-1.21/
βββ build.gradle # Global logic & task centralization
βββ settings.gradle # Subproject auto-discovery
βββ gradle.properties # Global mod metadata (ID, Name, Version)
- Single Source: Edit your mod once in
/common, and it updates for all versions. - Centralized Metadata: Change your mod version or authors in the root
gradle.propertiesonly once. - No Branching: Switch between Minecraft versions in your IDE without changing Git branches.
- Batch Compilation: Run
./gradlew buildto generate all version JARs at once.
rootProject.name = "MyPrivateMod"
include("EverMod")
include("common")
file('projects').eachDir { dir ->
if (new File(dir, 'build.gradle').exists()) {
include "projects:${dir.name}"
}
}In this recommended setup, your version-specific build.gradle (e.g., projects/forge-1.21/build.gradle) stays clean by injecting both sources:
sourceSets {
main {
java {
srcDirs = [
project(":common").file("src/main/java"),
project(":EverMod").file("evermod-${minecraft_version}/src/main/java")
]
}
resources {
srcDirs = [
project(":common").file("src/main/resources"),
"src/generated/resources"
]
}
}
}The framework lives inside a standard Forge mod folder. Best for mods that only target one specific version or developers who prefer manual branch management.
MyPrivateMod/
βββ EverMod/
β βββ evermod-1.19.2/
β βββ evermod-1.20.1/
β βββ evermod-1.21/
βββ src/main/java/
βββ build.gradle
βββ settings.gradle
rootProject.name = "MyPrivateMod"
include("EverMod")sourceSets {
main {
java {
srcDir project(":EverMod").file("evermod-${minecraft_version}/src/main/java")
}
}
}Best suited for developers working on multiple different mods simultaneously that all depend on the same local EverMod instance.
Workspace_Root/
βββ EverMod/ # Git Submodule
βββ projects/ # mods folder
β βββ MyMod1/
β βββ MyMod2/
β βββ MyMod3/
βββ settings.gradle # Subproject auto-discovery
rootProject.name = "evermod-workspace"
include("EverMod")
file('projects').eachDir { dir ->
if (new File(dir, 'build.gradle').exists()) {
include "projects:${dir.name}"
}
}sourceSets {
main {
java {
srcDir project(":EverMod").file("evermod-${minecraft_version}/src/main/java")
}
}
}A manual copy of the framework source into your package structure. Not recommended as it breaks framework update paths.
MyPrivateMod/
βββ src/main/java/
βββ com/my_mod/
βββ net/evermod/
Each EverMod module isolates all version-specific Forge logic.
Simplified packet registration using SimpleChannel, EverBuffer, and
EverContext.
Unified sound playback and synchronization across server and client.
Teleportation helpers, reach detection, and cross-version resource utilities.
EverMod is supported by two complementary repositories:
A command-line tool for managing EverMod projects.
- Create new mods using the EverMod template.
- Keep the framework and templates updated.
- Compile and package EverMod for distribution.
- Add existing mods into a workspace as Git submodules.
- Generate XML summaries for AI-assisted project documentation.
A customizable mod template that uses Jinja2 to dynamically generate base files for any Minecraft version using a JSON version database.
| Minecraft Version | Forge Version | Java Version |
|---|---|---|
| 1.19.2 | 43.5.0 | 17 |
| 1.20.1 | 47.4.10 | 17 |
| 1.21 | 51.0.33 | 21 |
All Rights Reserved. Developed by Wipodev β https://www.wipodev.com
- Main Framework: EverMod
- CLI Tool: EverMod CLI
- Template System: EverMod Template
EverMod β One codebase, multiple Minecraft versions.