# IRecordingManager Interface for controlling player recordings. Start and stop per-tick capture of player state, with support for rolling buffer mode and recording session metadata on stop. --- ## Source ```java package gg.lode.recap.api.recording; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; import java.util.Collection; public interface IRecordingManager { boolean startRecording(Player player, String name); boolean startRecording(Player player, boolean persist); boolean startRecording(Player player, boolean persist, int maxSeconds); boolean startRecording(Player player, String name, boolean persist); boolean startRecording(Player player, String name, boolean persist, int maxSeconds); @Nullable IRecordingSession stopRecording(Player player); @Nullable IRecordingSession stopRecording(Player player, String name); boolean cancelRecording(Player player); boolean isRecording(Player player); Collection<String> getRecordingNames(); boolean deleteRecording(String name); int clearAllRecordings(); int clearAllRecordings(String regex); } ``` --- ## Methods ### Starting Recordings | Method | Description | |---|---| | `startRecording(Player, String)` | Begin per-tick recording in persist mode. Returns `false` if the player is already recording or the name is taken. | | `startRecording(Player, boolean)` | Auto-generated name. `persist=true` for full recording, `false` for 30-second rolling buffer. | | `startRecording(Player, boolean, int)` | Auto-generated name with custom rolling buffer duration in seconds. | | `startRecording(Player, String, boolean)` | Named recording with persist flag. | | `startRecording(Player, String, boolean, int)` | Named recording with persist flag and custom buffer duration. | ### Stopping Recordings | Method | Description | |---|---| | `stopRecording(Player)` | Stop and save. Returns `IRecordingSession` with metadata, or `null` if not recording / save failed. | | `stopRecording(Player, String)` | Stop, rename, and save. Returns `null` if the name is already taken. Useful with auto-named rolling buffers. | | `cancelRecording(Player)` | Discard recording without saving. Returns `false` if the player wasn't recording. | ### Managing Recordings | Method | Description | |---|---| | `isRecording(Player)` | Check if a player is currently being recorded. | | `getRecordingNames()` | List all saved recording names on disk. | | `deleteRecording(String)` | Delete a recording file by name. | | `clearAllRecordings()` | Delete all saved recordings. Returns count deleted. | | `clearAllRecordings(String)` | Delete recordings matching a regex pattern. Returns count deleted. | --- ## Rolling Buffer Mode When `persist` is `false`, recordings operate in rolling buffer mode — only the last N seconds of frames are kept in memory. Older frames are discarded as new ones are captured. ```java // Record everyone on join — 30 second rolling buffer, auto-generated name manager.startRecording(player, false); // Incident detected — save with a meaningful name IRecordingSession session = manager.stopRecording(player, "combatlog-" + player.getName()); // Normal quit — discard without saving manager.cancelRecording(player); ``` --- ## Related Pages - [[Recap/API/IRecordingSession]] — recording metadata returned on stop - [[Recap/API/RecapAPI]] — accessor class - [[Recap/API/ISceneManager]] — scene and playback management - [[Recap/Developers/Overview]] — usage examples