Skip to content

Events

The event bus is a typed pub/sub system. All events are immutable Java records implementing the Event marker interface.

Subscribing

java
NarrativeCraftAPI.getInstance().getEventBus()
    .register(DialogStartEvent.class, event -> { ... });

To unsubscribe, keep a reference to the listener and pass it to unregister.

java
EventListener<DialogStartEvent> listener = event -> { ... };
eventBus.register(DialogStartEvent.class, listener);
// later
eventBus.unregister(DialogStartEvent.class, listener);

Events reference

Session lifecycle

EventFieldsFired when
PlayerSessionStartEventIPlayerSession sessionA player session starts
PlayerSessionEndEventIPlayerSession sessionA player session ends
StoryStartEventIPlayerSession sessionA story begins
StoryEndEventIPlayerSession sessionA story ends
SceneEndEventIPlayerSession session, IScene sceneA scene ends
ChapterSceneStartEventIPlayerSession session, IChapter chapter, IScene sceneA scene starts inside a chapter
ChapterSceneChangeEventIPlayerSession session, IChapter chapter, IScene sceneScene changes within a chapter

Characters

EventFieldsFired when
CharacterSpawnEventICharacterStory character, IScene sceneA character spawns
CharacterDespawnEventICharacterStory character, IScene sceneA character despawns

Cutscenes

EventFieldsFired when
CutsceneStartEventIPlayerSession session, ICutscene cutsceneA cutscene starts
CutsceneEndEventIPlayerSession session, ICutscene cutsceneA cutscene ends

Dialogs

EventFieldsFired when
DialogStartEventIPlayerSession session, String speakerName, String textA dialog line starts
DialogEndEventIPlayerSession sessionA dialog line ends
DialogChoiceEventIPlayerSession session, List<String> choices, int selectedIndexA choice is made

Interactions

EventFieldsFired when
InteractionTriggerEventIPlayerSession session, IInteraction interactionAn interaction triggers
InteractionZoneEnterEventServerPlayer player, IInteractionZone zonePlayer enters a zone
InteractionZoneLeaveEventServerPlayer player, IInteractionZone zonePlayer leaves a zone

Ink actions

EventFieldsFired when
InkActionStopEventIPlayerSession session, String actionKeywordAn Ink action stops
InkTagProcessedEventIPlayerSession session, String keyword, String rawTagAn Ink tag is processed

Recording

EventFieldsFired when
RecordingStartEventServerPlayer player, IRecording recordingRecording starts
RecordingStopEventServerPlayer player, IRecording recordingRecording stops
RecordingSaveEventServerPlayer player, IRecording recording, String recordingNameRecording is saved

Playback

EventFieldsFired when
PlaybackStartEventIPlaybackSession playbackPlayback starts
PlaybackEndEventIPlaybackSession playbackPlayback ends
PlaybackPauseEventIPlaybackSession playbackPlayback pauses
PlaybackResumeEventIPlaybackSession playbackPlayback resumes