# ICutsceneManager
> Manages cutscene playback for players running the Lectern client.
`gg.lode.lecternapi.api.manager.ICutsceneManager`
---
## Signature
```java
public interface ICutsceneManager
```
---
## Overview
ICutsceneManager provides control over scripted cutscene sequences. Cutscenes can include camera movement along paths, HUD overlays, screen effects, audio, and server-side callbacks at specific points in time.
Use the [[Cutscene]] builder to create cutscene definitions, then play them via this manager.
---
## Methods
### play
```java
void play(Player player, Cutscene cutscene)
```
Starts playing a cutscene for the target player. If a cutscene is already playing, it is stopped first.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
| `cutscene` | `Cutscene` | The cutscene definition to play. |
---
### playFile
```java
void playFile(Player player, String fileName)
```
Plays a cutscene from a JSON file stored in the Lectern plugin's `cutscenes/` folder. The `.json` extension is appended automatically if missing.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
| `fileName` | `String` | The JSON file name (e.g. `"intro.json"`). |
**Throws:** `IllegalArgumentException` if the file does not exist or cannot be parsed.
---
### pause
```java
void pause(Player player)
```
Pauses the currently playing cutscene. The cutscene remains at its current tick and can be resumed.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
---
### resume
```java
void resume(Player player)
```
Resumes a paused cutscene from where it left off.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
---
### stop
```java
void stop(Player player)
```
Stops the currently playing cutscene and clears all cutscene state.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
---
### seekTo
```java
void seekTo(Player player, int tick)
```
Jumps the cutscene to a specific tick. Can be used during playback or while paused.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
| `tick` | `int` | The tick to seek to. |
---
### isPlaying
```java
boolean isPlaying(Player player)
```
Checks if a cutscene is currently playing (not paused) for the target player.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
**Returns:** `true` if a cutscene is actively playing.
---
### getActiveCutsceneId
```java
@Nullable String getActiveCutsceneId(Player player)
```
Gets the ID of the currently active cutscene, if any.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
**Returns:** The cutscene ID, or `null` if no cutscene is active.
---
## Example
```java
ILecternAPI api = LecternAPI.getApi();
Player player = /* ... */;
Cutscene intro = Cutscene.builder("intro")
.at(0)
.letterbox(true)
.hideHud(true)
.setCamera(100, 70, 200, 0, -10, 0)
.cameraPath(path -> path
.waypoint(Vec.of(100, 70, 200), 0, -10, 0, 0)
.waypoint(Vec.of(120, 75, 220), 15, -5, 0, 60)
.interpolation(CameraInterpolation.CATMULL_ROM))
.then(20)
.showText("title", "<gold>Welcome</gold>", MenuTransform.at(0, 0).centered(), 3.0f)
.then(60)
.hideText("title")
.callback(() -> player.sendMessage("Intro complete!"))
.then(20)
.letterbox(false)
.hideHud(false)
.releaseCamera()
.onComplete(() -> player.teleport(spawnLocation))
.build();
api.getCutsceneManager().play(player, intro);
```
---
## Related Pages
- [[ILecternAPI]] — Access via `getCutsceneManager()`
- [[Cutscene]] — Cutscene builder and definition
- [[CutsceneCallbackEvent]] — Server-side callback event
- [[CutsceneCompleteEvent]] — Cutscene completion event