RE:NODE

Minecraft11 мин чтения

Сервер NeoForge: от установки до первого старта

Пошаговая установка сервера Minecraft на NeoForge: установщик, run.sh и user_jvm_args.txt, версии Java, первый запуск, конфиги и ошибки, с которыми вы столкнётесь.

0 прочтений

Чтобы установить сервер NeoForge, скачайте установщик NeoForge для своей версии Minecraft, запустите его с --installServer в пустой папке, укажите настройки памяти в user_jvm_args.txt, примите EULA и запускайте сервер через run.sh (или run.bat в Windows), а не через java -jar. Моды кладутся в mods/, их настройки появляются в config/ и в папке serverconfig/ мира после первого запуска, и у каждого игрока должны быть те же моды тех же версий. Многих сбивает с толку то, что у современного сервера NeoForge нет единого jar-файла для запуска - лаунчером служит скрипт запуска, - а это очень важно на хостинговых панелях, построенных вокруг java -jar.

NeoForge, Forge и какая версия вам нужна#

NeoForge - форк Forge, отделившийся от него в 2023 году. Для Minecraft 1.20.1 он выпускал сборки, почти идентичные Forge, под старой нумерацией Forge. Начиная с 1.20.2 это отдельный загрузчик со своей нумерацией версий, и большинство новых модпаков линейки Forge ориентированы на NeoForge, а не на Forge.

Номер версии говорит, под какую версию Minecraft она собрана:

MinecraftВерсия NeoForgeJava
1.20.147.1.x (нумерация в стиле Forge)17
1.20.220.2.x17
1.20.420.4.x17
1.2121.0.x21
1.21.121.1.x21
1.21.421.4.x21

Начиная с 1.20.2 закономерность такая: первые два числа NeoForge - это второе и третье числа версии Minecraft, а последнее - номер сборки. На сайте NeoForge перечислены актуальные сборки для каждой версии; используйте ту, которую называет ваш модпак, или последнюю стабильную сборку для этой версии Minecraft, если собираете набор сами.

Два факта о совместимости избавят от большой путаницы:

  • Моды Forge не загружаются на NeoForge начиная с 1.20.2, если автор их не пересобрал. На 1.20.1 большинство модов Forge работает на NeoForge, поэтому многие паки для 1.20.1 до сих пор используют Forge.
  • Начиная с 1.20.5 моды NeoForge описывают себя в `META-INF/neoforge.mods.toml`, а не в mods.toml от Forge. Мод Forge, положенный на сервер NeoForge 1.21, вообще не распознаётся как мод, и это может выглядеть так, будто мод просто игнорируется.

Столбец Java не обсуждается. Сервер NeoForge 1.21 на Java 17 сразу падает с UnsupportedClassVersionError; пак для 1.20.1 на гораздо более новой Java может падать более странными способами. Полная таблица и соответствующий ей размер кучи - в статье флаги JVM и версии Java.

Запуск установщика#

Установщик - небольшой jar-файл, который скачивает ванильный сервер, библиотеки NeoForge и маппинги и записывает файлы запуска. Ему нужны Java и подключение к интернету, и запускать его следует в пустой папке.

bash
$ mkdir neoforge-server && cd neoforge-server$ curl -O https://maven.neoforged.net/releases/net/neoforged/neoforge/21.1.77/neoforge-21.1.77-installer.jar$ java -jar neoforge-21.1.77-installer.jar --installServer

Версия в этих строках - пример. Когда установка закончится, в папке будет:

ПутьЧто это
libraries/NeoForge, пропатченная игра и все нужные ей библиотеки
run.sh, run.batСкрипты запуска для Linux и Windows
user_jvm_args.txtСюда идут ваши параметры JVM - память и флаги
neoforge-...-installer.jar.logЛог установщика, пригодится, если что-то пошло не так

После успешной установки jar-файл установщика и его лог можно удалить. Не удаляйте и не переставляйте ничего в libraries/: скрипт запуска ссылается на файл внутри неё по пути.

run.sh и user_jvm_args.txt#

Откройте run.sh, и вы увидите примерно следующее:

run.sh
#!/usr/bin/env sh# Add custom JVM arguments to user_jvm_args.txt# Add custom program arguments (such as nogui) before "$@"java @user_jvm_args.txt @libraries/net/neoforged/neoforge/21.1.77/unix_args.txt "$@"

Синтаксис @file говорит Java читать аргументы из файла. user_jvm_args.txt - ваш; unix_args.txt (или win_args.txt) внутри libraries/ принадлежит NeoForge и содержит путь к модулям, главный класс и всё остальное, что нужно загрузчику. Никогда не редактируйте второй файл: он генерируется заново при обновлении NeoForge, а ошибка в нём даёт сообщения об отсутствующих модулях, которые очень трудно разобрать.

Память и флаги указываются в user_jvm_args.txt, по одному или несколько на строку. Установщик создаёт его полным комментариев, а строка памяти в нём закомментирована:

user_jvm_args.txt
# Xmx and Xms set the maximum and minimum RAM usage.-Xms6G-Xmx6G-XX:+UseG1GC-XX:+ParallelRefProcEnabled-XX:MaxGCPauseMillis=200

Задавайте -Xmx ниже лимита памяти машины или контейнера, а не равным ему. Java использует память и вне кучи - metaspace, стеки потоков, нативные буферы, - и серверы с модами расходуют её больше, чем vanilla, из-за огромного числа классов. Для контейнера с лимитом 8 ГБ куча примерно в 6.5 ГБ - разумный потолок. Если куча заполнит весь контейнер, процесс будет убит извне вообще без краш-репорта.

Добавьте nogui как аргумент программы, чтобы сервер не пытался открыть окно состояния: либо передайте его скрипту (./run.sh nogui), либо допишите перед "$@" в самом скрипте.

Первый запуск#

Первый запуск - самый медленный за всю жизнь сервера NeoForge, и он делает три вещи, о которых нужно знать.

  1. Он останавливается на EULA. Сервер создаёт eula.txt с eula=false и завершается. Измените значение на eula=true и запустите снова. Эта строка - ваше согласие с EULA Mojang, и именно поэтому ни один установщик не может выставить её за вас, не спросив.
  2. Он генерирует конфиги. Каждый мод записывает свои настройки по умолчанию. Общие и стартовые настройки попадают в config/; настройки, которыми сервер управляет для конкретного мира, хранятся в папке самого мира, в world/serverconfig/, и создаются вместе с миром.
  3. Он генерирует мир. Мир с модами генерации создаётся гораздо медленнее ванильного. Генерация чанков спавна на большом паке может занять несколько минут.
code
[main/INFO] [net.neoforged.fml.loading.moddiscovery...]: Found 142 mods[Server thread/INFO] [minecraft/MinecraftServer]: Preparing level "world"[Server thread/INFO] [minecraft/MinecraftServer]: Done (94.512s)! For help, type "help"

Важна строка Done. Пока она не появилась, сервер всё ещё загружается, сколько бы это ни длилось.

Откуда берутся конфиги для каждого мира, решают две папки:

  • `defaultconfigs/` в корне сервера содержит шаблоны. Когда создаётся новый мир, любой найденный здесь серверный конфиг копируется в serverconfig/ мира вместо встроенного значения мода по умолчанию. Модпаки используют это, чтобы поставлять свои настроенные параметры.
  • `world/serverconfig/` содержит рабочие копии для этого мира. Для существующего мира редактируйте их, остановив сервер. Правка defaultconfigs/ ничего не меняет в уже существующем мире.

Именно это разделение порождает классическую жалобу «я изменил конфиг, и ничего не произошло»: отредактирован был шаблон, а мир уже использовал свою копию.

Моды и что должно совпадать на клиенте#

Моды кладутся в mods/ в виде jar-файлов. NeoForge читает их все при запуске, проверяет объявленные зависимости и отказывается стартовать, если какой-то не хватает или версия вне диапазона, называя мод и версию, которую он ожидал. Обычно это сообщение понятно; прочитайте его, прежде чем искать в интернете.

Второе правило касается игроков. Любой мод, который добавляет блоки, предметы, сущности, измерения или рецепты, должен быть установлен и на клиенте, той же версии. Игрокам лучше получать пак через лаунчер, который ставит ровно то, что есть на сервере, - CurseForge, Modrinth, Prism Launcher или пак, который предоставляет сам сервер. Как превратить опубликованный пак в сервер, рассказано в статье серверы модпаков с CurseForge и Modrinth.

Моды, которых не должно быть на сервере, - клиентские: рендеры, загрузчики шейдеров, миникарты, которые только рисуют, моды HUD и меню. На NeoForge клиентский мод на сервере обычно роняет запуск с сообщением вроде такого:

code
java.lang.RuntimeException: Attempted to load class net/minecraft/client/...for invalid dist DEDICATED_SERVER

Стектрейс под этой строкой называет виновный мод. Удалите его из папки mods/ сервера, а не из паков игроков. Более подробное руководство по чтению таких отчётов - в статье сервер с модами без крашей.

Запуск на хостинговой панели#

На собственной машине с Linux вы запускаете ./run.sh nogui внутри screen, tmux или сервиса systemd - и готово. С хостинговыми панелями иначе. Большинство запускает сервер командой, которая ожидает один jar-файл, - что-то вроде java -Xmx... -jar server.jar, - а у современного сервера NeoForge такого jar-файла нет.

Есть два чистых пути:

  • Команда запуска, которая вызывает файлы аргументов. Если команду запуска можно задать как java @user_jvm_args.txt @libraries/net/neoforged/neoforge/<version>/unix_args.txt nogui, сервер запустится ровно так, как его запустил бы run.sh. Не забывайте менять версию в этом пути при каждом обновлении NeoForge.
  • Jar-файл стартера сервера. Свежие установщики NeoForge умеют класть небольшой jar-файл стартера для хостингов, которые могут выполнять только java -jar; он читает те же файлы аргументов и запускает сервер за вас. Запустите установщик с --help, чтобы узнать, есть ли такая опция в вашей версии и как она называется.

Что бы вы ни выбрали, задавайте память ровно в одном месте. Если панель передаёт свой -Xmx, а в user_jvm_args.txt есть другой, Java возьмёт тот, что идёт в командной строке последним, и вы потратите вечер, выясняя, почему у кучи не тот размер.

В RE:NODE линейка Minecraft устанавливается с Paper и подходящей версией Java, поэтому NeoForge вы настраиваете сами: загрузите установленную папку архивом через файловый менеджер (он распаковывает архивы на месте) или по SFTP, проверьте версию Java и jar-файл во вкладке Startup и запустите. Белого списка разрешённых модов нет, как нет и установщика модпаков в один клик. Плюс самостоятельной установки в том, что вы точно знаете, какая сборка NeoForge и какие моды стоят на сервере.

Настройки, которые стоит изменить на сервере с модами#

Несколько ванильных настроек в server.properties на NeoForge важнее, чем на Paper:

server.properties
view-distance=8simulation-distance=6max-tick-time=60000allow-flight=true

Почему каждая из них:

  • `view-distance` и `simulation-distance` умножают число загруженных чанков, а чанки с модами тяжелее. Начните ниже, чем на vanilla, и поднимайте, только если у MSPT есть запас.
  • `max-tick-time` - это watchdog: если один тик длится дольше указанного числа миллисекунд, сервер намеренно роняет сам себя. По умолчанию 60000. Большие паки иногда срабатывают на нём во время генерации мира или крупного сохранения. -1 полностью отключает watchdog, и тогда настоящие зависания остаются незамеченными; лучше поднять значение, чем отключать.
  • `allow-flight=true` обычное дело на серверах с модами, потому что джетпаки, кольца полёта и предметы творческого полёта для ванильной проверки на полёт выглядят точь-в-точь как полёт, и она кикает игрока.

Сгенерируйте мир заранее, до того как в нём начнут играть. Моды генерации мира делают генерацию чанков в разы дороже, а генерация ландшафта во время игры - источник большинства «случайных» скачков лагов на сервере с модами. Chunky работает на NeoForge; порядок действий - в статье граница мира и предгенерация.

Обновление NeoForge и поддержание работы#

Чтобы обновить NeoForge в пределах той же версии Minecraft, запустите более новый установщик в той же папке. Он запишет новые библиотеки и обновит скрипты; mods/, config/, мир и user_jvm_args.txt останутся нетронутыми. Если команда запуска в панели указывает на путь с версией внутри libraries/, обновите и этот путь.

Безопасный порядок:

  1. Остановите сервер и снимите бэкап мира, mods/, config/ и defaultconfigs/ вместе. Мир, восстановленный рядом с модами не тех версий, - это не восстановление.
  2. Запишите версии, на которых вы сейчас: Minecraft, NeoForge, пак и Java.
  3. Установите новую сборку NeoForge, запустите сервер, когда никого нет онлайн, и прочитайте лог с самого начала.
  4. Зайдите и проверьте места, где люди строились, прежде чем объявлять об обновлении.

Смена версии Minecraft - совсем другая работа: каждый мод нужно заменить его сборкой для новой версии, и многих ещё не будет. Относитесь к этому как к новому серверу, которому достался мир, и сначала прочитайте статью обновление версии Minecraft.

Слоты для бэкапов входят в каждый тариф Minecraft от RE:NODE, хранятся вне машины, которую защищают, и один из них можно заблокировать от ротации, пока вы тестируете обновление. Восстановление - одна кнопка, и это как раз подходящее количество усилий, чтобы откатить неудачное обновление модов.

FAQ#

Почему после установки NeoForge нет jar-файла сервера?

С тех пор как загрузчики линейки Forge перешли на систему модулей, установщик создаёт дерево libraries/ и скрипты запуска вместо одного исполняемого jar-файла. Скрипты передают Java два файла аргументов, и именно это запускает сервер. Используйте скрипты, эквивалентную команду запуска или jar-файл стартера сервера.

Можно ли ставить моды Forge на сервер NeoForge?

На 1.20.1 в основном да, потому что NeoForge для этой версии очень близок к Forge. Начиная с 1.20.2 - нет: загрузчики разошлись, и моду нужна сборка под NeoForge. Начиная с 1.20.5 NeoForge даже не распознаёт мод Forge как мод.

Сколько памяти нужно серверу NeoForge?

Лёгкому паку на 50-100 модов для небольшой компании обычно хватает 4-6 ГБ кучи. Большим паку «всё в одном» на несколько сотен модов часто нужно 8 ГБ и больше. Подробности - в статье сколько RAM нужно серверу Minecraft; всегда оставляйте запас между кучей и лимитом контейнера.

Могут ли игроки с vanilla зайти на сервер NeoForge?

Только если каждый мод на сервере серверный и ничего не требует на клиенте. Как только мод добавляет контент, ванильным клиентам отказывают. На практике на сервере NeoForge играют с соответствующим модпаком.

Где менять настройки мода для моего мира?

В world/serverconfig/ для настроек, которыми управляет сервер, и в config/ для общих - при остановленном сервере. Файлы в defaultconfigs/ применяются только при создании нового мира.


Комментарии

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

0/2000