Tags
Creators
Details
Licensed GPL-3.0-only
Published 5 months ago
Updated 2 months ago
All versions
1.4.0
Release
Emaki Level 1.4.03 months ago 25
Compatibility
Minecraft: Java Edition
26.2
26.1.2
26.1
1.21.8–1.21.11
Platforms
Folia
Paper
Purpur
Required content
Unavailable version
Changes
Added
- Asynchronous mutation entry points for exp and level changes in the public API, each returning a future with an operation result and reporting unavailability cleanly when the API is not installed.
- Transactional level-up cost charging: if currency or material deduction partially fails, the already-deducted part is rolled back, with a dedicated failure reason for compensation failure.
- Player data readiness protection: a new failure reason and message reject writes while data is loading or read-only, instead of writing corrupt data.
- New placeholders exposed through the CoreLib placeholder system:
level,exp,total/totalexp/total_exp,required/requiredexp/required_exp,progress,progresspercent/progress_percent. - Config precheck messages at file and directory level: missing required file, path not a file, unreadable file, missing required directory, path not a directory, unreadable directory.
Changed
- Descriptor migrated to
paper-plugin.ymlwith structured dependencies (EmakiCoreLib required; MythicMobs / EmakiAttribute / EmakiCooking / EmakiForge / PlaceholderAPI optional). Permission keys and defaults are unchanged;/emakilevel(aliaseselv,elevel) registers in code with aliases preserved. - Default GUI files (
gui/level_gui.yml,gui/top_gui.yml) use the nesteditem.source+item.componentsform. Slot layout and all placeholders are unchanged and the old form is still parsed. - Leaderboard rebuilds are now asynchronous, so player join/quit no longer triggers a full main-thread table scan.
- Player data loading moved to a generation-aware asynchronous session model.
- Message prefix switched to a new brand gradient.
api-versionraised from1.21to1.21.8and the build base moved from spigot-api to paper-api;folia-supported: trueand the Java 25 target are unchanged.
Fixed
- Level-up cost charging could consume resources without granting the level: currency and material deductions were applied without checking their results and without rollback, so a player could lose currency when materials were insufficient, or the reverse. Charging is now transactional with rollback.
Removed
- PlaceholderAPI placeholder resolution is now cache-only. An uncached player's placeholder previously loaded synchronously and returned a value; it now returns an empty string. Online players are cached on join, but any display that relies on placeholders for offline or not-yet-cached players must be re-checked.
- The browser-based Web Console layer, including
web-console.yml, the config and CSS web extensions, and theweb-console/frontend project with its level curve preview. - The internal level curve preview service is removed with it. It only served that browser preview and had no config key or command, so there is no equivalent owner-facing loss; curves are still driven by level type configuration.
Notes
- Requires EmakiCoreLib 4.6.0.
config.ymlhas no key additions or removals, so existing config works as-is, and the player level data file structure is unchanged, so no migration is required. After upgrading, re-check any placeholder-driven display, especially for offline players, and confirm you have a replacement for anything previously done through the Web Console.
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:Iw3zKgdR:oRldL6qa"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Iw3zKgdR:oRldL6qa"
}

