Старые версии на новой Java
Minecraft 1.7.10 вышел под Java 6 и LWJGL 2, 1.12.2 — под Java 8. На современной Java они не запускаются: нет классов, которые убрали из JDK, а LWJGL 2 не собирается под новые драйверы. При этом именно на этих версиях держится половина крупных сборок модов.
Обойти это умеют два проекта, и Laminara умеет ставить оба одной командой.
Рецепт — это готовый манифест версии
compat=<рецепт> подменяет манифест версии, по которому собирается клиент. Рецепт приносит с собой
всё: свой список библиотек (LWJGL 3 вместо LWJGL 2), свою версию Forge, свой главный класс, свои
аргументы JVM и свою версию Java. Laminara собирает такой манифест ровно тем же кодом, что и
ванильный, — отдельной ветки под совместимость в сборщике нет.
laminara-server exec "install старьё 1.7.10 compat=lwjgl3ify"Какие рецепты подходят версии, показывает loaders:
laminara-server exec "loaders 1.7.10"lwjgl3ify — для 1.7.10
lwjgl3ify от GTNewHorizons переводит 1.7.10 на LWJGL 3
и Java 25. Что происходит при compat=lwjgl3ify:
-
Laminara берёт
version.jsonиз последнего релиза lwjgl3ify — это самодостаточный манифест формата Mojang. -
Версия Forge берётся из рецепта, а не выбирается вами: патчи пропатчены под конкретную сборку Forge. Если вы указали
loaderVersion=, команда скажет вслух, что берёт версию рецепта. -
Java поднимается до той, которую просит манифест (сейчас 25). Переопределить можно:
java=java-runtime-delta. -
В
mods/кладутся два файла: сам модlwjgl3ify-<версия>.jarи+unimixins-all-1.7.10-<версия>.jar. Второй — жёсткая зависимость, без UniMixins рецепт не стартует. -
Выбранная версия рецепта записывается в настройки сборки. Повторный
installсоберёт ту же версию, даже если вы снова напишетеcompat=lwjgl3ifyбез номера. Обновление — отдельное действие:compat=lwjgl3ify:3.0.34илиcompat=lwjgl3ify:последняя. Если с прошлой сборки вышла версия новее,installнапомнит об этом и подскажет, как её взять. При смене версии команда говорит об этом вслух, а мод прошлой версии убирается изmods/, чтобы рядом не лежали два.
Cleanroom — для 1.12.2
Cleanroom — форк Forge 1.12.2, который работает на современной Java. Он подключён не рецептом, а обычным загрузчиком:
laminara-server exec "install сборка 1.12.2 loader=cleanroom"Java поднимается до 25 автоматически. Cleanroom выпускается только с пометкой alpha — команда
скажет об этом при сборке, но соберёт.
Обратите внимание: это загрузчик, а не рецепт. compat=cleanroom не сработает — нужно
loader=cleanroom; команда так и подскажет, если перепутать.
Отказаться от рецепта
Версия рецепта хранится в настройках сборки, поэтому один раз собранная по рецепту сборка остаётся такой и дальше. Чтобы пересобрать её без рецепта:
laminara-server exec "install старьё 1.7.10 loader=forge compat=нет"Файлы, которые клал рецепт, при этом убираются из сборки — команда называет каждый. Всё, что вы
положили в mods/ сами, остаётся на месте.
Что при этом попадает в профиль запуска
Аргументы JVM рецепта (--add-opens, -Djava.system.class.loader и ещё десятки) уезжают в
laminara.profile.json и подписываются в манифест вместе с остальной сборкой. Лаунчер добавляет
их к своим, поэтому подменить их с машины игрока нельзя — они приходят из проверенного манифеста.
Аргументы, которые лаунчер подставляет сам (-cp, -Djava.library.path, имя игрока, токен
доступа), из рецепта отбрасываются — иначе они попали бы в командную строку дважды.
Отбрасываются и аргументы, которые манифест включает по версии операционной системы игрока
(Mojang так подсовывает -Dos.name=Windows 10): на сервере во время сборки неизвестно, какая
версия Windows стоит у игрока, и угадывать её значит соврать модам и отчётам о падениях.