Мир, открытый более новой версией, конвертируется, и конвертация необратима. Этот единственный факт определяет всю процедуру: бэкап, сделанный перед обновлением, - не мера предосторожности, а единственный путь назад. Всё остальное - порядок шагов, тестовая копия, плагины, которые вы проверяете первыми, - нужно для того, чтобы возвращаться вам никогда не пришлось.
Краткая версия для тех, кто это уже делал: проверьте, какая версия Java нужна целевому релизу, проверьте, что для каждого плагина есть сборка под него, сделайте и скачайте бэкап, сначала обновите копию, запустите новый jar с переименованной папкой плагинов и без игроков онлайн, прочитайте консоль, затем возвращайте плагины по несколько штук. Длинная версия объясняет, зачем нужен каждый из этих шагов и что он ловит.
Меняются сразу три вещи#
«Обновление сервера» - это на самом деле три отдельных обновления, которые запускаются одним нажатием и ломаются по-разному.
Формат мира. Каждый чанк и каждая сущность хранятся с версией данных. Когда более новый сервер загружает более старый чанк, он пропускает его через цепочку конвертеров - DataFixer - и записывает обратно в новом формате. Это происходит лениво: чанк конвертируется, когда игрок в него заходит, поэтому мир может неделями оставаться конвертированным наполовину. В level.dat записана версия, которой мир открывали в последний раз, и именно это значение более старый jar откажется принимать или обработает неправильно.
Серверное ПО. Vanilla, Paper, Fabric и остальные выпускают собственную сборку под каждый релиз, и первые сборки после релиза Minecraft экспериментальные не зря. Paper, в частности, помечает ранние сборки под новую версию как не рекомендуемые для продакшена, и эта пометка честная - падения на первой неделе настоящие.
API плагинов или модов. Здесь почти вся боль. Плагин, написанный только под Bukkit API, обычно переживает небольшое повышение версии без изменений. Плагин, который лезет во внутренности сервера, - а это большинство античитов, большинство протокольных плагинов и всё, что добавляет кастомные предметы или сущности, - ломается на каждой версии без исключения, пока автор не выпустит новую сборку.
К этому добавляется четвёртая вещь, которая вообще не является изменением Minecraft, но ломает запуск не хуже: версия Java.
Какая версия Java нужна каждому релизу#
| Minecraft | Требуемая Java |
|---|---|
| 1.8 - 1.16.5 | Java 8 (11 тоже работает в большинстве сборок) |
| 1.17.x | Java 16 минимум |
| 1.18 - 1.20.4 | Java 17 минимум |
| 1.20.5 и новее | Java 21 минимум |
Сбой громкий и однозначный: UnsupportedClassVersionError ... has been compiled by a more recent version of the Java Runtime. Если вы видите эту строку при запуске, с вашим миром и плагинами всё в порядке; просто в контейнере стоит Java старее, чем нужна jar-файлу. В панели это переменная на вкладке Startup, а не пакет, который надо устанавливать. На RE:NODE яйцо Minecraft запускает Paper уже с подходящей версией Java, так что частый случай закрыт, но проверьте её перед прыжком через одну из границ в этой таблице.
Запуск на более новой Java, чем требуется, обычно нормален и часто лучше. Запуск на более новой Java, чем ожидают ваши плагины, иногда нет, так что если после повышения Java один плагин не загружается, а сервер в остальном здоров, проверьте это первым делом. Размер heap и флаги сборщика мусора тоже меняются с версией Java - в статье флаги JVM и версии Java разобрано, какие флаги ещё имеют смысл на 17 и 21.
Обновление по порядку#
- Прочитайте примечания к релизу серверного ПО, а не только игры. В примечаниях Paper перечислены миграции конфигурации и удалённые API, а именно там живёт большинство сюрпризов.
- Составьте список плагинов и проверьте каждый. Команда
versionв консоли печатает сборку сервера;pluginsперечисляет загруженное. Откройте страницу каждого плагина и убедитесь, что для вашей целевой версии есть сборка. Запишите список - этот шаг решает, состоится ли обновление вообще. - Объявите окно. Десяти минут обычно хватает; назовите час, чтобы не спешить.
- Остановите сервер корректно.
save-all flush, дождитесь завершения, затемstop. Никогда не обновляйте мир, который был убит, а не остановлен. - Сделайте бэкап и скачайте его. Не «создайте бэкап», а именно скачайте файл и убедитесь, что архив открывается. Бэкап, который никто не восстанавливал, - это гипотеза. Двадцать минут на проверку восстановления до того, как оно понадобится окупаются с первого раза.
- Если есть хоть какая-то возможность, сначала обновите копию. Второй небольшой сервер с копией мира и плагинов за двадцать минут скажет вам то, что продакшен сказал бы при публике. Как сделать это недорого, рассказано в статье staging и production на одном аккаунте.
- Смените версию и запустите без плагинов. Переименуйте
pluginsвplugins.offи запустите. Вы проверяете ровно одно: что мир конвертируется и сервер доходит до «Done». - Читайте консоль во время конвертации. Большой мир занимает минуты, а конвертация чанков упирается в CPU. Навык, нужный на этом шаге, описан в статье как читать консоль.
- Возвращайте плагины партиями. Сначала основные - права, защита, экономика, - затем остальные группами по три-четыре, с перезапуском между ними. Когда что-то сломается, вы будете знать, какая партия виновата.
- Проверьте тихие вещи. Права по-прежнему действуют, дома работают, журнал блоков отвечает на запросы, кастомные рецепты крафтятся, магазины принимают деньги.
- Объявите об этом потом, когда убедитесь, что всё сработало. Не раньше.
Никто ещё не пожалел о лишнем бэкапе перед обновлением.
Конвертация всего мира сразу#
Поскольку конвертация ленивая, первые недели после обновления её цена размазывается по каждой сессии, и игрок, исследующий старую местность, платит за неё подлагиванием. Можно сделать всё заранее. Остановите сервер и запустите его один раз с ванильным флагом обновления:
$ java -Xms4G -Xmx4G -jar server.jar --forceUpgrade --noguiСервер обходит каждый файл региона, конвертирует каждый чанк, печатает процент и завершается. Добавьте --eraseCache, чтобы заодно выбросить кэшированное освещение и карты высот; это исправляет артефакты освещения, которые иногда переживают большой скачок версий, ценой более долгого прогона.
Два предупреждения. Именно в этот момент мир без границы становится дорогим: мир в 40 GB с чанками, в которые никто не заходил с 2023 года, конвертируется часами, и вы ничего от этого не выигрываете. Дешевле сначала задать границу и почистить - см. границы мира и предгенерация. А на Paper долгая конвертация может сработать watchdog, который ищет тик, так и не завершившийся; если в панели во время конвертации виден цикл перезапусков, запустите с флагом один раз и дайте процессу завершиться, а не оставляйте обычную команду запуска.
Что ломается и как узнать об этом заранее#
Проверяйте это именно для целевой версии, а не по признаку «недавно обновлялось»:
- Всё на уровне протокола. Протокольные библиотеки приходится пересобирать под каждую версию, и они нередко последний кусок головоломки, который появляется. Зависящие от них плагины остаются сломанными, пока их нет.
- Античит. Он по замыслу читает движение и внутренности, поэтому по замыслу привязан к версии.
- Плагины кастомных предметов и кастомных сущностей. Они записывают данные в предметы и блоки; несовпадение не просто приводит к тому, что плагин не загрузится, - оно может испортить записанное им.
- Плагины редактирования мира и карт. Обычно всё в порядке, но они трогают внутренности чанков, поэтому тестируйте на одноразовом регионе, а не на спавне.
- Всё заброшенное. Посмотрите дату последнего релиза раньше, чем список версий.
В jar-файле у plugin.yml есть строка api-version. Плагин, который ничего не объявляет, считается устаревшим, из эпохи до 1.13, и современные сборки Paper громко на такие жалуются и могут вовсе отказаться их загружать. Если в 2026 году у плагина всё ещё нет api-version, считайте это ответом на вопрос, поддерживается ли он.
Переход Paper на маппинги Mojang в 1.20.5 добавил автоматический ремаппер для старых плагинов, который тихо устранил целый класс сбоев вида «этот плагин собран под неверные маппинги». Это не магия - плагин, вызывающий метод, которого больше нет, всё равно падает, - но теперь «собран под 1.20.4» смертельно реже, чем раньше.
Рано или поздно один плагин удержит весь сервер на старой версии. Это реальный выбор, а не поражение: либо функция настолько важна, что стоит остаться там, где вы есть, либо нет, и вы её убираете. Не работает вариант «обновиться всё равно и надеяться». Именно поэтому в статье плагины, которые стоит ставить предпочтение отдано хорошо поддерживаемым, а что делать, когда обновление мода всё ломает - это модовый аналог всей этой статьи.
Датапаки, ресурспаки и тихие поломки#
Датапаки объявляют, для какой версии они написаны, и это число меняется почти в каждом релизе:
{ "pack": { "pack_format": 41, "description": "Vanilla tweaks" }}41 выше - пример, а не значение для копирования: у каждого релиза свой номер, и пак с неверным помечается как несовместимый. Проверьте командой datapack list после обновления; всё, что оказалось в списке отключённых, нужно скачать заново или исправить в pack.mcmeta. Кастомные функции тоже могут ломаться из-за изменений синтаксиса, которые дают ошибки при загрузке, а не молчание. Порядок и отладка описаны в статье руководство по датапакам.
Ресурспаки проще, но ловят людей так же. resource-pack, resource-pack-sha1 и require-resource-pack в server.properties указывают на файл; если вы заново экспортировали пак под новую версию и не обновили хеш, клиенты его отклонят, и вы получите волну недоумённых сообщений. Обновляйте файл и хеш вместе.
В самом server.properties между версиями появляются новые ключи - simulation-distance пришёл в 1.18, enforce-secure-profile - в 1.19, - и сервер при первом запуске записывает любой недостающий ключ со значением по умолчанию. Сохраните копию старого файла и сравните её с новым после обновления. Всё, что появилось, - новое значение по умолчанию, которое вы не выбирали. Каждый ключ объяснён в статье server.properties простыми словами.
Как пустить старые клиенты#
Три плагина решают проблему «половина игроков не обновилась», и полезно знать, какой из них какой:
| Плагин | Направление |
|---|---|
| ViaVersion | Более новые клиенты заходят на более старый сервер |
| ViaBackwards | Более старые клиенты заходят на более новый сервер |
| ViaRewind | Очень старые клиенты, эпохи 1.8 и 1.7 |
Это слои трансляции, а не машины времени. Клиент 1.8 на современном сервере не увидит блоков, которых не было в 1.8, а всё, что опирается на новые типы пакетов, будет вести себя для него странно. Они отлично подходят для двухнедельного переходного периода и плохи как постоянная архитектура. Если ваше сообщество действительно разделилось по версиям надолго, честный ответ - прокси перед бэкендами под каждую версию; его форма объяснена в статье что делает reverse proxy.
Откат#
Надёжный откат один, и это бэкап. Восстановите папку мира и папку плагинов вместе из копии, сделанной на шаге 5, верните старый jar и запустите. Вы потеряете всё, что было сыграно после бэкапа, поэтому окно важно и поэтому бэкап делают непосредственно перед обновлением, а не «вчера вечером».
Не работает наведение старого jar на конвертированный мир. В зависимости от версии он откажется запускаться либо запустится и тихо отбросит те части каждого чанка, которых не понимает, а это хуже. Относитесь к конвертированному миру как к двери в один конец, а к бэкапу - как к двери обратно.
Вторая половина хорошего отката - быстро понять, что он нужен. Держите архив старого мира, пока новая версия не переживёт загруженный вечер, а не до тех пор, пока закончилось обновление. Более длинный разбор - в статье бэкапы, которые действительно восстанавливаются; короткий: важна та копия, которую вы скачали и которая лежит не на той машине, которую защищает.
Разбор сообщений, которые вы действительно увидите#
`UnsupportedClassVersionError` - версия Java старее, чем нужна jar-файлу. См. таблицу выше.
`NoSuchMethodError` или `NoClassDefFoundError` в трассировке плагина - плагин собран под другую версию сервера. Вы это не исправите; замените его или подождите.
«Could not load 'plugins/Something.jar'» и следом InvalidPluginException - обычно не хватает зависимости, потому что вы вернули плагины в неверном порядке. Перезапустите с присутствующей зависимостью.
«Outdated server!» или «Outdated client!» в списке мультиплеера - несовпадение протокола, и версия, названная в сообщении, - та, под которую нужно подстроиться. «Outdated server» значит, что сервер отстаёт от клиента игрока.
«Failed to check session lock for world» - мир открыт другим процессом, либо предыдущий процесс умер, не освободив его. Убедитесь, что на эту папку указывает только один сервер, затем перезапустите.
Границы чанков с видимым обрывом - ожидаемо после изменения генерации ландшафта, например повышения высоты в 1.18. Новые чанки генерируются по новым правилам рядом со старыми. Смешивание сглаживает это, но не стирает; единственное лекарство - предгенерировать нужную область до изменения или принять это как пейзаж.
Мобы перестали появляться в старых чанках - обычно из-за изменений биомов или правил спавна, иногда из-за simulation-distance, пришедшего новым значением по умолчанию ниже вашего прежнего эффективного радиуса.
FAQ#
Можно ли вернуться к более старой версии Minecraft после обновления?
С тем же миром - нет. Конвертация необратима, а более старый сервер, получив конвертированный мир, либо отказывается его принимать, либо тихо теряет данные. Возврат означает восстановление бэкапа, сделанного перед обновлением, и потерю всего, что было сыграно после него.
Обязательно ли вообще обновляться?
Нет. Сервер может оставаться на старом релизе неограниченно долго, и многие так и живут, потому что их держит один плагин или одна сборка модов. Цена в том, что игрокам на новых клиентах нужен ViaVersion, чтобы зайти, исправления безопасности перестают приходить, а чем дальше вы отстаёте, тем больше будет итоговый скачок.
Сколько времени занимает конвертация мира?
Лениво вы её не замечаете как единое событие. Всё сразу через --forceUpgrade - закладывайте минуты для небольшого мира с границей и часы для десятков гигабайт. Предсказывает время размер папки мира, и это хороший аргумент в пользу границы с самого начала.
Стоит ли обновляться в день релиза?
Нет. Дождитесь, пока ваше серверное ПО опубликует сборку, которую оно готово назвать стабильной для этой версии, и пока обновятся плагины, без которых вы не можете жить. Обычно двух недель хватает, и это ничего вам не стоит.
Нужно ли обновлять плагины и сервер одновременно?
Сначала обновите сервер, отложив папку плагинов в сторону, убедитесь, что мир конвертируется, затем возвращайте плагины партиями. Если делать оба шага сразу, у любого сбоя будет две возможные причины, и вы потратите вечер на то, чтобы их различить.
Сохранятся ли инвентари и постройки игроков?
Да - данные игроков и мир конвертируются вперёд, и эта часть на практике надёжна. Не сохранятся данные, записанные плагином, который вы потом убрали, потому что для новой версии у него не было сборки; они остаются в файлах мира непрочитанными и невидимыми.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.