Events
All events fire synchronously on the player's owner thread. Persistence may finish asynchronously after post events.
| Event | Timing | Cancellable | Mutable field | Cancellation/effect |
|---|---|---|---|---|
PlayerExpGainEvent | Before experience is written | Yes | amount | Cancellation or amount <= 0 prevents the gain; replacement amount is quota-checked again. |
PlayerPreLevelUpEvent | After non-mutating checks, immediately before level-up mutation | Yes | None | Prevents the level-up mutation. |
PlayerLevelUpEvent | After a successful level gain | No | None | Reports old/new level and cause. |
PlayerLevelChangeEvent | After a level-changing operation commits | No | None | Reports old/new level, operation type, and direction. |
PlayerMaxLevelReachedEvent | When the maximum level is reached | No | None | Reports type, max level, and cause. |
Post events are informational and cannot cancel persistence or revert the committed in-memory change. Asynchronous catalog loading itself does not publish these mutation events.