Tags
Creators
Details
Licensed GPL-3.0-only
Published 7 months ago
Updated 2 months ago
All versions
2.0.0
Release
EmakiAttribute 2.0.07 months ago 13
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Paper
Purpur
Changes
EmakiAttribute Changelog
[2.0.0] - 2026-04-04
Added
Asynchronous Reload Process
- Added
reloadPluginStateAsync(...), allowing the attribute system reload to be executed asynchronously in stages. - Progress messages such as "reading language & configs / loading attribute definitions / refreshing cache" are continuously reported during the reload.
- Added reload mutex protection; executing
/emakiattribute reloadrepeatedly will now directly prompt "A reload task is already in progress." - When a command fails, the root cause error is reported back to the executor, facilitating troubleshooting of configuration or resource issues.
Asynchronous Damage Resolution Pipeline
- Added
AsyncDamageEngine, migrating EA damage resolution to the CoreLib asynchronous scheduler. - Melee, projectile, and environmental damage now uniformly follow the "async resolution + main thread finalization + application on the next tick" pipeline.
- The damage event
EmakiAttributeDamageEventis still triggered on the main thread, ensuring safe compatibility for existing listeners.
Changed
Lifecycle & Thread Safety
- Added
AttributeLifecycleCoordinatorfor orchestrating the staged logic of the reload process. DirectoryLoadernow supports asynchronous loading with progress callbacks.AttributeRegistry,DamageTypeRegistry,DefaultProfileRegistry,AttributeBalanceRegistry, andLanguageLoaderhave been enhanced with synchronization protection to accommodate asynchronous read/write scenarios.
Damage Calculation Structure Refactoring
DamageCalculationServicehas been refactored to split damage resolution into "preparation phase / result finalization phase," reducing code duplication between synchronous and asynchronous implementations.- The same instance of damage will reuse unified type resolution, random seed, and event finalization logic.
- If asynchronous settlement fails, the root cause is logged, aiding in problem diagnosis when used with combat debugging output.
Configuration & Resource Upgrades
- Reloading configuration will now automatically merge new entries for
allowed_damage_causes, reducing the manual patching effort during configuration upgrades. - Added new language keys:
command.reload.in_progress,command.reload.started,command.reload.failed. - Removed the example file
attributes/test_attribute.yml. - Optimized the format of the built-in description text in
attribute_balance.yml, unifying the default descriptive style.
Upgrade Notes
- Requires
EmakiCoreLib 2.0.0or higher. /emakiattribute reloadhas been changed to an asynchronous process. Operational scripts should no longer assume that command return implies all data has finished reloading.- External plugins that only listen for
EmakiAttributeDamageEventtypically require no changes; the event is still fired on the main thread.
Known Issues
- None
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:ZzBwu6WX:JHab0dpv"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:ZzBwu6WX:JHab0dpv"
}

