Skip to content

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 imports net.luckperms.* fails with NoClassDefFoundError on 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 an IGameplayHandler for 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 example minecraft:the_nether) on mod loaders.
  • Events — CosmicDeathEvent fires on backend servers when a player dies. CosmicCommandPreprocessEvent fires before a player's command runs and can be cancelled; it is not fired on Fabric.
  • Clickable chat — ClickableMessage builds 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.