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 skips the event rather than firing on the wrong thread.
| Event | Timing | Cancellable | Mutable field | Effect |
|---|---|---|---|---|
GemInlayEvent | After validation, before charging or rolling | Yes | successChance | Cancellation prevents the transaction. |
GemExtractEvent | After validation, before extraction starts | Yes | None | Cancellation prevents charges and item changes. |
GemSocketOpenEvent | Immediately before the socket state change | Yes | None | Cancellation prevents socket opening. |
GemInlayCompletedEvent | After success actions and terminal persistent-journal completion | No | None | Reports operation id, rolled success, final equipment, input consumption, socket/gem data, and reason key. |
GemExtractCompletedEvent | After terminal persistent-journal completion | No | None | Reports 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. They do not mean merely that a pending commit began.