Migrated ownership of files to the Riprod namespace. hexvane:AbilityAPI and the
com.hexvane.abilityapi API classes are kept as a compatibility layer, so existing integrations do
not need rebuilding. Remove any older AbilityAPI jar before installing, and note that command
permission nodes are now riprod.effectly.command.ability.*.
player_abilities.json is gone. Player abilities are now a persistent ECS component on the
player entity (Effectly:Roster), written into the engine's own player document at
run/universe/players/.json. Existing grants are not migrated and must be re-issued.
In exchange, ability data is universe-global, survives world transfers, and is preserved if
Effectly is uninstalled and later reinstalled.
mining_fortune_blocks.json is no longer read. The block list moved to MiningFortuneBlocks
in Server/Configs/Effectly.json. A warning is logged at startup if the old file is still present.
AbilityService.setAbility / removeAbility are applied on the next world tick, not
synchronously. Reading state back within the same tick will still see the old value.
second_chance cooldown no longer counts down while the player is offline. It is now a
persisted delta-time counter, so it survives relogs and restarts but pauses while away.
AbilityConditionSpec changed from a record to a final class so it could carry a codec. Its
public surface - both constructors, type(), param(), zoneIds(), allowedZoneIds() and all six
TYPE_* constants - is unchanged and source-compatible.
DamageCause is a tree, so resistance_elemental
reduces Fire and resistance_physical reduces Slashing. The most specific active resistance
wins rather than stacking