Skip to content

Events ​

All events are synchronous on the affected player's entity-owner thread. If an asynchronous completion ends after the player goes offline, the runtime records that condition and skips the event rather than firing on the wrong thread

EventTimingCancellableMutable fieldEffect
GemInlayEventAfter validation, before charging or rollingYessuccessChanceCancellation prevents the transaction
GemExtractEventAfter validation, before extraction startsYesNoneCancellation prevents charges and item changes
GemSocketOpenEventImmediately before the socket state changeYesNoneCancellation prevents socket opening
GemInlayCompletedEventAfter success actions and terminal persistent-journal completionNoNoneReports operation id, rolled success, final equipment, input consumption, socket/gem data, and reason key
GemExtractCompletedEventAfter terminal persistent-journal completionNoNoneReports operation id, final equipment, optional returned gem, socket/gem data, and return mode

Each pre-event has an operationId; inlay/extract outcomes and their completed events use the same id. Completed events cover public API, GUI, held-item action, and direct extraction-service paths. Their timing is not "as soon as the method returns the updated equipment": the transaction returns or commits first, then waits for the action stage and the persistent journal to reach a terminal state. Neither completed event implements Cancellable