Streamline Developer Framework
Streamline provides a robust API for developers to build custom modules. Modules are PF4J plugins that run unchanged on every platform Streamline supports. Below are the dependency coordinates you need to get started.
Adding the Dependency
The API is published to the Streamline Maven repository on CodeMC. Use the version matching the StreamlineCore you target (currently 2.6.0.0).
Maven
Repository:
xml
<repositories>
<repository>
<id>streamline-essentials</id>
<url>https://repo.codemc.io/repository/streamline-essentials/</url>
</repository>
</repositories>Dependencies:
xml
<dependencies>
<!-- Main API -->
<dependency>
<groupId>gg.drak</groupId>
<artifactId>StreamlineCore-API</artifactId>
<version>2.6.0.0</version>
<scope>provided</scope>
</dependency>
<!-- Backend API (Bukkit only) -->
<dependency>
<groupId>gg.drak</groupId>
<artifactId>StreamlineCore-BAPI</artifactId>
<version>2.6.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>Gradle
Repository:
groovy
repositories {
maven { url = "https://repo.codemc.io/repository/streamline-essentials/" }
}Dependencies:
groovy
dependencies {
compileOnly("gg.drak:StreamlineCore-API:2.6.0.0") // Main API
compileOnly("gg.drak:StreamlineCore-BAPI:2.6.0.0") // Backend API (Bukkit only)
}API vs BAPI
- API — The main Streamline API, required for all modules. It runs on every platform: Bukkit, BungeeCord, Velocity, Fabric, Forge, and NeoForge.
- BAPI — The Backend API, needed only when your module uses Bukkit-specific code. It includes the API.
Platform Notes
- Permissions — Check and change permissions through
net.streamline.api.permissions.Permissions, never through the LuckPerms API directly. LuckPerms is optional, and a module that importsnet.luckperms.*fails withNoClassDefFoundErroron servers without it. - Default permissions — Nodes every player should have go through
DefaultPermissions.grantByDefault(...). Bukkit registers them as default-true, and mod loaders grant them unless LuckPerms sets an explicit value. Undeclared nodes are operator-only on Bukkit and mod loaders. - Gameplay —
Singularity.gameplay()returns anIGameplayHandlerfor in-game actions (teleporting, safe/random locations, healing, flight, inventories, world spawn) on backend servers. It is empty on proxies. Worlds are identified by name on Bukkit and by dimension id (for exampleminecraft:the_nether) on mod loaders. - Events —
CosmicDeathEventfires on backend servers when a player dies.CosmicCommandPreprocessEventfires before a player's command runs and can be cancelled; it is not fired on Fabric. - Clickable chat —
ClickableMessagebuilds a chat line from segments with hover text and click actions (run a command, suggest text, open a URL). The console and platforms without chat components receive the plain text.