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

relauncher

Библиотека перезапуска JVM для приложений на Java.

FabricNeoForgeForgeQuilt
Загрузчики
FabricNeoForgeForgeQuilt
Скачиваний на Modrinth
2,6 тыс.
Подписчиков на Modrinth
5
версии
2
Обновлён
27 апреля 202627 апр.
Опубликован
в 2026
Это библиотека — она нужна другим модам и сама ничего не добавляет в игру

Коротко о моде

Библиотека — нужна другим модам
Работает на Fabric, NeoForge, Forge и Quilt
Для Minecraft 1.6.4–26.1.2
Работает и в игре, и на сервере — ставьте, где нужен
Последняя версия — 1.1.0 от 27 апреля 2026
Лицензия MPL-2.0 — бесплатно
Где нужен
В игренеобязателенНа серверенеобязателен

Работает и в игре, и на сервере — ставьте, где нужен

Версии игры1.6.4–26.1.2
Описание переведено автоматическиПоказать оригинал (EN)

Relauncher

Библиотека перезапуска JVM для приложений на Java. Закинь один JAR в папку mods, и он должен работать от Minecraft 1.6.4 до последней версии, а также на Hytale Server как early-плагин или обычный плагин.

Что он делает

Relauncher прозрачно перезапускает процесс JVM с дополнительными аргументами ещё до загрузки игры. Это полезно для:

  • Добавления JVM-флагов — настройка GC, -XX:+AlwaysPreTouch, системные свойства и т.д., без необходимости лезть в настройки лаунчера
  • Инструментов для модпаков — другие моды могут программно запустить перезапуск после установки зависимостей или настройки окружения (javaagents, module layers, да что угодно)

Перезапуск происходит очень рано при запуске, до инициализации сколько-нибудь значимого состояния игры. Внешние лаунчеры видят один непрерывный процесс без лишних окон и осиротевших процессов.

Поддерживаемые версии

ЗагрузчикВерсии MinecraftТочка входа
Forge (LaunchWrapper)1.6.4 - 1.12.2ITweaker через манифест
Forge (ModLauncher)1.13.2+ITransformationService через SPI
NeoForge (ModLauncher)до 1.21.1ITransformationService через SPI
NeoForge (FancyModLoader)1.21.3+IModFileCandidateLocator через SPI
Fabric1.14+PreLaunchEntrypoint через fabric.mod.json
Quilt1.14+Использует PreLaunchEntrypoint от Fabric
Hytale Server (early)-ClassTransformer SPI
Hytale Server (plugin)-JavaPlugin через manifest.json

Версии Java: с 8 по 25

Платформы: Linux, Windows и macOS, как на x86_64, так и на aarch64.

Установка

  1. Скачай универсальный JAR (`relauncher-universal-.jar`)
  2. Закинь его в папку mods/
  3. Запусти игру один раз — создастся файл конфига по пути config/relauncher/config.cfg
  4. Отредактируй конфиг, добавив свои JVM-аргументы, и выставь enabled = true
  5. Перезапусти игру

Конфигурация

Файл конфига находится по пути `/config/relauncher/config.cfg`:

# Relauncher Configuration
# Extra JVM arguments to add when relaunching, one per line.
# Lines starting with # are comments, blank lines are ignored.

# Set to false to disable relaunching without removing your arguments.
enabled = true

# Add extra JVM arguments below, one per line:
-XX:+UseG1GC
-XX:+AlwaysPreTouch
-Dsome.java.property=true

Флаг enabled в конфиге управляет только аргументами самого файла конфига. Если другой мод предоставляет реализацию SPI CommandLineProvider, перезапуск произойдёт независимо от этого флага.

Как это работает

Relauncher пробует три стратегии перезапуска JVM в порядке предпочтения:

  1. POSIX exec (Linux / macOS) — вызывает execvp() через нативную библиотеку на Rust, чтобы заменить текущий процесс на месте. Тот же PID, нулевые накладные расходы, самый чистый вариант перезапуска.

  2. Windows DLL — перехватывает DllMain(DLL_PROCESS_DETACH), чтобы запустить дочерний процесс после полного завершения JVM. stdin/stdout/stderr дублируются заранее, чтобы пережить завершение. Родитель ждёт дочерний процесс и передаёт его код выхода.

  3. Запасной вариант (чистая Java) — запускает дочерний процесс с унаследованным вводом-выводом, ждёт его завершения, затем останавливается. Работает везде, но исходный процесс остаётся висеть на протяжении всей игровой сессии.

Совместимость с лаунчерами

ЛаунчерСтатус
VanillaПолностью поддерживается
PrismLauncherПолностью поддерживается (обходной путь через системные свойства)
CurseForgeПолностью поддерживается (делегирует в vanilla)
ModrinthПолностью поддерживается (обходной путь через обёртку theseus)
ATLauncherПолностью поддерживается
MultiMCНе поддерживается — полагается на stdin-протокол, который невозможно воспроизвести после перезапуска. В лог пишется предупреждение, а перезапуск пропускается. Подумайте о смене лаунчера или о ручном применении аргументов.

Для разработчиков модов

Зависимость API

Добавьте relauncher-core как зависимость только для компиляции — универсальный JAR будет присутствовать во время выполнения:

dependencies {
    compileOnly 'com.juanmuscaria:relauncher-core:<version>'
}

Программный перезапуск

Если вашему моду нужно перезапустить JVM (например, после установки javaagent), вызовите Relauncher.relaunch() напрямую:

import com.juanmuscaria.relauncher.Relauncher;
import com.juanmuscaria.relauncher.RelaunchResult;

List<String> extraArgs = Arrays.asList("-Dfoo=bar", "-XX:+AlwaysPreTouch");
RelaunchResult result = Relauncher.relaunch(extraArgs);

// If we get here, the relaunch didn't happen
if (result.isFailed()) {
    logger.error("Relaunch failed: " + result.reason());
} else if (result.isSkipped()) {
    logger.warn("Relaunch skipped: " + result.reason());
}

SPI-провайдер

Вы также можете внедрять аргументы JVM без прямого вызова API — просто реализуйте CommandLineProvider и зарегистрируйте его через ServiceLoader. Relauncher сам сканирует папку mods на наличие service-файлов, так что ваш мод даже не обязан быть в classpath.

import com.juanmuscaria.relauncher.CommandLineProvider;

public class MyProvider implements CommandLineProvider {
    @Override
    public List<String> extraJvmArguments() {
        return Collections.singletonList("-Dmy.mod.installed=true");
    }

    @Override
    public int priority() {
        return 0; // lower = runs first
    }
}

Зарегистрируйте его в META-INF/services/com.juanmuscaria.relauncher.CommandLineProvider:

com.example.mymod.MyProvider

Проверка состояния перезапуска

Relauncher.isRelaunched()  // true if we're inside a relaunched JVM
Relauncher.getDepth()      // 0 = original, 1 = first relaunch, etc.

Отладка

Добавьте -Drelauncher.debug=true в аргументы JVM вашего лаунчера. Это логирует полное извлечение командной строки, сборку аргументов и процесс выбора стратегии. Полезно, чтобы понять, почему перезапуск работает не так, как вы ожидаете.

Сборка из исходников

./gradlew build                           # Полная сборка
./build-natives.sh                        # Кросс-компиляция нативных библиотек

Понадобится Java 17+ (используется как toolchain; результат всё равно нацелен на Java 8) и Gradle 9. Для кросс-компиляции нативных библиотек на Rust также нужны cross, cargo-xwin и cargo-zigbuild, а также тулчейн Zig.

Лицензия

Mozilla Public License 2.0

Частые вопросы

Как установить relauncher?

Установите Fabric под свою версию Minecraft, скачайте relauncher под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть relauncher?

У relauncher есть сборки для Minecraft 1.6.4–26.1.2.

Нужен ли relauncher на сервере?

Работает и в игре, и на сервере — ставьте, где нужен

Лицензия и источник
Mozilla Public License 2.0можно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее