Skip to content

This is not the Paper API

Changing. Follow: #283, #281, #546, #321, #437

A plugin written for Paper does not run on mcrs. This page is for developers who come from Paper or Bukkit. It tells you what you do in place of writing against a plugin API, what already works and what is still missing.

mcrs has no Bukkit-like API and no facade crate, and that is a decision of the project.1 It also has no plugin loader today, so the server cannot load a jar, a wasm module or a script, and JVM code in Java or Kotlin cannot run inside it. Nobody has opened an issue about a loader or made a decision on one, so this page does not say “never”.

What you do today is write a Bevy plugin in Rust, add it next to the server plugins in your own main, and build one binary. This is closer to Minestom, where the server is a library and you write the main, than to Paper, where you get a ready server and put jars into plugins/. The direction of the project is mcrs as a library, from a proxy to a full server.2

The table lists what your code can already do, with the issue or the pull request behind each row.

Need State Where
Remove or replace a part of the server The server is a group of plugins, and you can disable its members Works#279
Add your code to every dimension or to one add_dimension_plugin and add_dimension_plugin_to Works#280
Vanilla gameplay as removable plugins Done Works#282
Intercept and cancel a chat line PlayerChatEvent, the only public cancellable event Works#636
Register your own command add_command with a typed command tree Works#579

The entry point is src/main.rs. It creates the app and adds MinecraftServerPlugins, the plugin group of the server.

Each row below has an issue, except the plugin loader.

Need State
Public cancellable events for join, leave, block break, block place and movement Partial#283
Replace the chunk source (a flat or empty world, your own generator) WIP#281
Create and remove dimensions while the server runs WIP#546
Depend on published crates (today only a git dependency) Undecided#321
Plugin loader for jars, wasm or scripts Undecided no issue, no decision
Save the world to disk WIP#78
Paper habit In mcrs
plugin.yml, jar in plugins/ No. Your code is compiled into the server binary
Static Bukkit.getServer() No, rejected in Not planned#437. A system receives its data as parameters
A stable API with versions No. You build against the public crates and plugins, and their versions are not stable
/reload and hot reload of code No. Data pack reload is planned in WIP#316
Scripting (Lua, JS) No issue, no decision

Paper and Minestom in mcrs terms has the full lookup table, and Status shows the current state of every area.

Next: From objects to data explains the three habits to change before you write code, and Rust for Java developers follows it.

  1. Not planned#437 The decision that there is no facade or API crate. ↩

  2. WIP#180 The direction of mcrs as a library, from a proxy to a full server. ↩

  3. Not planned#412 The decision to target one version at a time, with no backward compatibility. ↩

Sources and verification

Verified: 26.4-snapshot-7, 51d45c26a, 2026-11-09

Tracking: #283, #281, #546, #321, #437