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 reload repeatedly 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 EmakiAttributeDamageEvent is still triggered on the main thread, ensuring safe compatibility for existing listeners.
Changed Lifecycle & Thread Safety
Added AttributeLifecycleCoordinator for orchestrating the staged logic of the reload process.
DirectoryLoader now supports asynchronous loading with progress callbacks.
AttributeRegistry, DamageTypeRegistry, DefaultProfileRegistry, AttributeBalanceRegistry, and LanguageLoader have been enhanced with synchronization protection to accommodate asynchronous read/write scenarios.
Damage Calculation Structure Refactoring
DamageCalculationService has 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.0 or higher.
/emakiattribute reload has 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 EmakiAttributeDamageEvent typically require no changes; the event is still fired on the main thread.