1.0.0
Compatibility
Changes
Changelog
1.0.0
first one. this is the framework Embellish runs on, it doesnt do anything by itself.
whats in it:
one event bus for client side effects, plus a tick and a frame callback so animation runs at frame rate instead of stuttering along at 20hz.
one particle budget shared by everything. theres a per tick ceiling, it scales effects down by distance, and if frame times go past 22ms it thins everything out on its own and opens back up when things settle. features cant collectively tank your frames because they all draw from the same pot.
a surface material table so effects can ask what youre standing on without every feature writing its own block list.
render hooks for first person hand transforms, third person body animation, ground decals, world space text and the HUD. these are the parts that move every Minecraft version, and keeping them in one place is most of why this mod exists as a separate thing.
config and a settings screen you get for free. register a feature, it shows up, it persists, done.
crash isolation. if a feature throws it gets switched off for the session and the client keeps going. same for the renderers.
hook probing. on startup it checks the methods it injects into still exist. anything whose hook is gone gets turned off with a reason instead of sitting there enabled and doing nothing, and the mixins are optional so a Minecraft update cant stop the game launching.
versions
26.2, 26.1.2, 1.21.1 and 1.20.1. fabric, forge and neoforge depending on which.
for addons
implement EmbellishModule, register your features, call EmbellishApi.registerModule from your mod constructor. your features get the budget, the config, the screen and the crash isolation without asking.
MIT, do what you like with it.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:6xNLGQ1L:Fhp8VE1D"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:6xNLGQ1L:Fhp8VE1D"
}

