Миграция с Paper и Folia
Как перенести мир, плагины и настройки на Chunkwake и как откатиться.
Chunkwake запускает обычные плагины Paper и Folia, читает и пишет миры Anvil в обе стороны и использует тот же server.properties. Но это не замена одного файла: ядро другое, часть настроек Paper не импортируется, а NMS-плагины нужно проверять отдельно.
Сначала — копия. Не мигрируйте рабочий сервер без резервной копии и тестового клона. Chunkwake находится в ранней стадии, и фич-матрица честно показывает, что ещё не готово.
Что переносится
- Мир Anvil. Обычные
.mca-регионы,level.dat, данные игроков. Chunkwake читает и пишет миры, которые понимает ваниль, в обе стороны. - Плагины.
plugins/*.jar,plugin.ymlиpaper-plugin.yml,libraries:из Maven,loaderиbootstrapper. - События и планировщики. Bukkit/Paper события в порядке Paper,
GlobalRegionScheduler,RegionScheduler,AsyncSchedulerиEntitySchedulerдля всех плагинов. server.properties. Поддерживаемые ключи читаются оттуда же; часть настроек мира и игры пока сохраняется, но не применяется.- Команды и права. Ванильное дерево команд,
ops.json, консоль и права плагинов.
Что не переносится автоматически
| Что | Что делать |
|---|---|
config/paper-global.yml, config/paper-world-defaults.yml, spigot.yml, bukkit.yml | Не читаются. Переносите только поддерживаемые значения в server.properties и через chunkwake config set |
Плагины, лезущие в NMS, CraftBukkit, Netty или ServerLevel | Проверять по одному. Ванильные классы есть в classpath, но полная совместимость не обещается |
| Legacy/BungeeCord forwarding | Не реализован. Нужен Velocity в режиме modern |
| Кастомные патчи ядра и форки Paper | Аналогов нет; ищите поведение в API или в фич-матрице |
| Внешние базы плагинов | Копируются отдельно, Chunkwake их не трогает |
Чеклист миграции
Отмечайте выполненные пункты. Состояние хранится локально в браузере и никуда не отправляется. Пункты повторяют порядок миграции ниже.
Подготовка
Перенос
Проверка
Откат
Отметки хранятся только в этом браузере, в localStorage.
Порядок миграции
1. Проверьте плагины и фичи
Откройте фич-матрицу и список плагинов. Строки «частично» и «нет» показывают, что ещё не готово для рабочего сервера.
Особенно проверьте:
- плагины с NMS/CraftBukkit;
- плагины, которые предполагают один глобальный поток;
- плагины с собственным планировщиком и региональными допущениями;
- плагины, которые читают конфиги Paper напрямую;
- мультимир и кастомные измерения.
2. Сделайте полную копию
Остановите Paper/Folia и скопируйте весь каталог сервера, а не только мир:
server/
├── world/
├── world_nether/
├── world_the_end/
├── plugins/ # jar'ы и папки с данными плагинов
├── server.properties
├── ops.json
├── whitelist.json
├── banned-ips.json
├── banned-players.json
└── config/ # Paper-конфиги: сохранить, но не ждать импортаДополнительно можно снять бэкап средствами Chunkwake уже после первого запуска:
chunkwake backup create --dir /srv/chunkwake
chunkwake backup verify <id> --dir /srv/chunkwakeБэкап делается только при остановленном сервере.
3. Поставьте Chunkwake рядом
Не удаляйте Paper-инсталляцию. Поставьте Chunkwake в отдельный каталог и оставьте старый сервер на месте — это ваш план отката.
mkdir /srv/chunkwake
chunkwake setup --dir /srv/chunkwakeГотового релиза пока нет: соберите бинарник из исходников или возьмите артефакт CI.
git clone https://github.com/chunkwake/core.git
cd core
cargo build --release -p chunkwake-serverДля плагинов нужна Java 25+. Сервер ищет её через java-path, CHUNKWAKE_JAVA или PATH.
4. Перенесите мир
Скопируйте каталоги миров и level.dat в каталог Chunkwake. Имена должны совпадать с level-name в server.properties.
cp -a /srv/paper/world /srv/chunkwake/
cp -a /srv/paper/world_nether /srv/chunkwake/
cp -a /srv/paper/world_the_end /srv/chunkwake/Chunkwake читает .mca с gzip, zlib, без сжатия и lz4, включая внешние c.X.Z.mcc для больших чанков. Запись тоже совместима с ванилью.
Не запускайте два сервера на одном каталоге мира одновременно.
5. Перенесите плагины
Скопируйте plugins/ целиком, включая папки с конфигами и базами. Проверьте, что для плагинов есть Java 25+.
cp -a /srv/paper/plugins /srv/chunkwake/Плагины с folia-supported: true не нужно включать отдельно: планировщики Folia доступны всем. Обычные Paper-плагины при этом не отключаются.
6. Перенесите настройки
server.properties можно скопировать как есть, но не все ключи применяются. Сверьте сеть, порт, MOTD, online-mode, level-name, сид, сжатие и пути к Java:
chunkwake config show --dir /srv/chunkwake
chunkwake config set server-port 25565 --dir /srv/chunkwake
chunkwake doctor --dir /srv/chunkwakeЕсли сервер стоит за Velocity, включите только modern forwarding:
online-mode=false
velocity-enabled=true
velocity-secret=<секрет из forwarding.secret>Legacy/BungeeCord forwarding не поддерживается. Backend-порт должен быть доступен только прокси.
7. Запустите и проверьте
chunkwake doctor --dir /srv/chunkwake
chunkwake --dir /srv/chunkwakeПервый запуск распаковывает данные игры (≈27 МБ) и API плагинов (≈37 МБ). Дальше старт быстрый.
Проверьте по списку:
- сервер виден в списке и принимает вход;
- мир, инвентари, координаты и данные игроков на месте;
- нет ошибок загрузки чанков и света;
- работают основные команды и права;
- плагины включились, события стреляют, задачи планировщиков выполняются;
- PDC, реестры, теги и атрибуты читаются;
- работает вход через Velocity, если он используется;
- TPS и MSPT не деградировали под вашей нагрузкой.
Если плагин падает, отключите его и повторите. Не переносите все плагины в рабочую среду одновременно.
8. Оставьте путь назад
Не удаляйте Paper-инсталляцию и бэкапы, пока Chunkwake не отработает хотя бы несколько дней под реальной нагрузкой.
Откат:
- Остановите Chunkwake командой
stop. - Верните Paper-каталог и его
server.properties. - Запустите Paper на том же мире.
- Если мир уже изменён Chunkwake, восстановите копию, снятую до миграции.
Docker: itzg/minecraft-server
Образ itzg/minecraft-server:java25 умеет запускать кастомный сервер через TYPE=CUSTOM, но по умолчанию запускает его как Java-jar. Chunkwake — нативный бинарник, поэтому образу нужно явно включить native-режим:
services:
chunkwake:
image: itzg/minecraft-server:java25
tty: true
stdin_open: true
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: "CUSTOM"
FAMILY: "NATIVE"
CUSTOM_SERVER: "/data/chunkwake"
ENABLE_RCON: "false"
volumes:
- ./data:/data- Соберите Linux-бинарник и положите его в
./data/chunkwake. - Сделайте файл исполняемым:
chmod +x data/chunkwake. - Запустите
docker compose up -dи смотритеdocker compose logs -f.
CUSTOM_SERVER может быть URL на сам бинарник. Ссылку на .tar.gz не используйте: образ скачает архив и попробует запустить его как файл.
Почему так:
TYPE=CUSTOMвключает ветку кастомного сервера;FAMILY=NATIVEзаставляетstart-finalExecзапускать файл напрямую, а не черезjava -jar;ENABLE_RCON=false— RCON в Chunkwake пока нет;java25в образе нужен для плагинов, ядро работает без JVM;EULA=TRUEтребует сам образ.
Оговорки:
FAMILY=NATIVE— внутренняя ветка образа для нативных серверов (так работает Pumpkin). После обновления образа проверьте запуск.- Файл должен быть доступен пользователю контейнера (UID 1000) и исполняемым.
- Образ создаёт
server.propertiesиeula.txt; Chunkwake читает поддерживаемые ключи. - Не запускайте два сервера на одном
/data.
Folia: что меняется
В Folia обычные плагины отключаются и требуют folia-supported. В Chunkwake:
GlobalRegionScheduler,RegionScheduler,AsyncSchedulerиEntitySchedulerдоступны всем;- обычные плагины продолжают работать;
- региональная модель Folia не навязывается плагинам, которые её не ждут.
Но код, который полагается на «один главный поток на весь мир» или на порядок выполнения между регионами, всё равно нужно проверять.
Ожидания по производительности
На стенде проекта Chunkwake запускается за 0.6–0.9 с против 6.6–11.4 с у ванили, вход 20 ботов даёт p95 11–26 мс против 845–860 мс, а пик памяти — 182–236 МиБ против 845–929 МиБ. Подробности и оговорки — в бенчмарке и docs/perf.md.
Скорость не отменяет проверку поведения: если плагин видит другой порядок событий, это баг, а не оптимизация.
Если что-то пошло не так
chunkwake doctor --dir ...— конфигурация, порт, Java, целостность мира.logs/latest.log— обычный лог,logs/chunkwake.<дата>.log— суточные файлы.chunkwake backup rollback --dir ...— вернуть состояние после прерванного восстановления.- Issues — приложите версию, плагин, шаги и поведение ванили.