relauncher
Библиотека перезапуска JVM для приложений на Java.
- Загрузчики
- FabricNeoForgeForgeQuilt
- Скачиваний на Modrinth
- 2,6 тыс.
- Подписчиков на Modrinth
- 5
- версии
- 2
- Обновлён
- 27 апреля 202627 апр.
- Опубликован
- в 2026
Коротко о моде
Работает и в игре, и на сервере — ставьте, где нужен
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.2 | ITweaker через манифест |
| Forge (ModLauncher) | 1.13.2+ | ITransformationService через SPI |
| NeoForge (ModLauncher) | до 1.21.1 | ITransformationService через SPI |
| NeoForge (FancyModLoader) | 1.21.3+ | IModFileCandidateLocator через SPI |
| Fabric | 1.14+ | PreLaunchEntrypoint через fabric.mod.json |
| Quilt | 1.14+ | Использует PreLaunchEntrypoint от Fabric |
| Hytale Server (early) | - | ClassTransformer SPI |
| Hytale Server (plugin) | - | JavaPlugin через manifest.json |
Версии Java: с 8 по 25
Платформы: Linux, Windows и macOS, как на x86_64, так и на aarch64.
Установка
- Скачай универсальный JAR (`relauncher-universal-.jar`)
- Закинь его в папку
mods/ - Запусти игру один раз — создастся файл конфига по пути
config/relauncher/config.cfg - Отредактируй конфиг, добавив свои JVM-аргументы, и выставь
enabled = true - Перезапусти игру
Конфигурация
Файл конфига находится по пути `/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 в порядке предпочтения:
POSIX exec (Linux / macOS) — вызывает
execvp()через нативную библиотеку на Rust, чтобы заменить текущий процесс на месте. Тот же PID, нулевые накладные расходы, самый чистый вариант перезапуска.Windows DLL — перехватывает
DllMain(DLL_PROCESS_DETACH), чтобы запустить дочерний процесс после полного завершения JVM. stdin/stdout/stderr дублируются заранее, чтобы пережить завершение. Родитель ждёт дочерний процесс и передаёт его код выхода.- Запасной вариант (чистая 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.
Лицензия
Частые вопросы
Как установить relauncher?
Установите Fabric под свою версию Minecraft, скачайте relauncher под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть relauncher?
У relauncher есть сборки для Minecraft 1.6.4–26.1.2.
Нужен ли relauncher на сервере?
Работает и в игре, и на сервере — ставьте, где нужен