Перейти к содержимому

Старые версии на новой 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:

  1. Laminara берёт version.json из последнего релиза lwjgl3ify — это самодостаточный манифест формата Mojang.

  2. Версия Forge берётся из рецепта, а не выбирается вами: патчи пропатчены под конкретную сборку Forge. Если вы указали loaderVersion=, команда скажет вслух, что берёт версию рецепта.

  3. Java поднимается до той, которую просит манифест (сейчас 25). Переопределить можно: java=java-runtime-delta.

  4. В mods/ кладутся два файла: сам мод lwjgl3ify-<версия>.jar и +unimixins-all-1.7.10-<версия>.jar. Второй — жёсткая зависимость, без UniMixins рецепт не стартует.

  5. Выбранная версия рецепта записывается в настройки сборки. Повторный 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 стоит у игрока, и угадывать её значит соврать модам и отчётам о падениях.