Сервер Minecraft на Rust.
Плагины Paper работают без переписывания.
Движок, сеть, генерация и свет — на Rust, без GC-пауз. Настоящий paper-api.jar живёт в JVM внутри процесса сервера. Всё в одном бинарнике: данные игры и API плагинов уже внутри.
chunkwake setup --dir ./serverWindows x86_64 · Linux x86_64 (musl) · Java 25+ только для плагинов
Один стенд. Два сервера.
Не синтетика: одинаковый мир, одинаковые боты и одинаковые сценарии. Переключайте замеры и смотрите, где именно появляется разница.
Обычные плагины Paper на многопоточном ядре.
Chunkwake запускает плагины Paper и при этом строит движок вокруг Rust и tokio.
| Ядро | Плагины Paper/Folia | Многопоточность |
|---|---|---|
| Paper | Обычные плагины | Один главный поток |
| Folia | Только folia-supported | Регионы |
| Chunkwakethis | Paper и Folia API | По этапам |
Граница совместимости — плагины, которые лезут во внутренности NMS и CraftBukkit. Ванильные классы лежат в classpath, часть таких плагинов работает; полностью это не обещается.
Мир, механики и плагины уже работают.
Генерация мира, редстоун, мобы, инвентарь и плагины уже реализованы. Построчная матрица со статусами — в документации.
Мир
- Ванильная генерация оверворлда
- Нижний мир и Край
- Anvil в обе стороны
- Свет, спавн, граница мира
- Деревни и структуры
Механики
- Редстоун и поршни
- Жидкости, огонь, случайные тики
- Мобы, снаряды, опыт
- Печи, наковальня, станции
- Таблички и книги
Плагины
- Настоящий paper-api.jar
- События в порядке Paper
- Планировщики Folia
- Maven libraries, loader/bootstrapper
- NMS-классы в classpath
Эксплуатация
- Один бинарник
- setup, doctor, config set
- Резервные копии и откат
- Встроенный дашборд метрик
- Ванильные команды
Плагины собираются и работают как на Paper.
В classpath лежит официальный paper-api.jar. Реализовано поведение API, поэтому код собирается и работает как на Paper.
- Bukkit и Paper события в порядке Paper, с отменой и подменой данных.
- GlobalRegionScheduler, RegionScheduler, AsyncScheduler и EntityScheduler для всех плагинов.
- plugin.yml и paper-plugin.yml, libraries из Maven, loader и bootstrapper.
- PDC, Metadatable, реестры, теги, атрибуты и каналы плагинов.
Плагинам нужна Java 25+. Сервер найдёт её по java-path, CHUNKWAKE_JAVA или PATH.
public final class HelloPlugin extends JavaPlugin {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new Listener() {
@EventHandler(priority = EventPriority.NORMAL)
public void onJoin(PlayerJoinEvent event) {
event.getPlayer().sendMessage("chunkwake is awake");
}
}, this);
}
}class HelloPlugin : JavaPlugin() {
override fun onEnable() {
server.pluginManager.registerEvents(object : Listener() {
@EventHandler(priority = EventPriority.NORMAL)
fun onJoin(event: PlayerJoinEvent) {
event.player.sendMessage("chunkwake is awake")
}
}, this)
}
}name: HelloPlugin
version: 1.0.0
main: dev.chunkwake.hello.HelloPlugin
api-version: "26.3"Ядро на Rust, плагины в JVM.
Ядро и мир живут в Rust. Плагины — в настоящей JVM рядом, через JNI-мост. Если на событие нет слушателей, Rust его никуда не отправляет.
crates/
├── protocol пакеты 26.3, NBT, текстовые компоненты
├── net соединения, игра, команды, события
├── worldgen шум, биомы, поверхности, структуры
├── world чанки, палитры, Anvil, свет
├── bridge JVM через JNI, встроенный API
├── server бинарник: CLI, setup, консоль, бэкапы
├── metrics метрики и дашборд
└── lab сравнение с ванилью и бенчмарки
java/
├── api-impl Bukkit / Paper / Folia поверх Rust
└── test-plugin живые проверки событийЧто запланировано.
Этих возможностей пока нет в релизе. Описание — в ARCHITECTURE.md.
Параллельный тик с Paper-семантикой
Плагины видят один главный поток, а исполняются параллельно.
Динамические острова вместо регионов
Мир делится по нагрузке, а не по фиксированной сетке Folia.
Мир как журнал событий
Откат и повтор изменений вместо резервных копий целиком.
Мост на FFM с общей памятью
Следующее поколение границы между Rust и JVM.
Попробуй на своём сервере.
Сборка релиза появится здесь, как только выйдет первый тег. Пока — из исходников за пару минут.
chunkwake setup --dir ./server