3d429b2a86
Загрузчик игры даёт каждому моду свой class loader, поэтому моды не видят друг друга. Но у всех этих загрузчиков родитель — системный, а значит всё, что попало в его class path, доступно каждому моду. Агент подмешивает jar'ы из libs\ именно туда, поэтому библиотека одна на всех, и модам не нужно вшивать её в себя. Первый набор: - json.Json — разборщик и писатель JSON без внешних зависимостей; - config.Config — настройки мода в config\<mod>.json, битый файл не роняет игру, а откатывается на значения по умолчанию с записью в лог; - config.Home — где лежит модлоадер, чтобы мод не гадал; - config.Log — логи с именем мода. build.cmd собирает jar и сразу гоняет тесты библиотеки.
2.0 KiB
2.0 KiB
rsxm-lib
Общая библиотека для модов RustexRemake. Лежит в libs\ рядом с mods\, и
агент подмешивает её в системный class path при старте — поэтому моды видят её
без дублирования: один jar, одна копия в памяти.
Загрузчик игры даёт каждому моду свой class loader, и напрямую моды друг друга не видят. Но у всех этих загрузчиков родитель — системный, а значит всё, что в нём, доступно каждому. На этом и построена библиотека.
Что внутри
net.rsxm.lib.json.Json— маленький разборщик и писатель JSON. Без внешних зависимостей: мод — это jar, который друг бросил в папку, тащить туда ещё и библиотеку незачем.net.rsxm.lib.config.Config— настройки мода вconfig\<mod>.json. Значения по умолчанию задаёт сам мод, битый файл не роняет игру, а заменяется дефолтами с записью в лог.net.rsxm.lib.config.Home— где вообще лежит модлоадер, чтобы мод не гадал.net.rsxm.lib.config.Log— логирование с именем мода.
Сборка
build.cmd
Нужен только JDK. Скрипт собирает dist\rsxm-lib.jar и сразу прогоняет тесты
JSON и конфигов.
Использование
Компилируйте мод против rsx-api.jar и rsxm-lib.jar, но не кладите
rsxm-lib.jar внутрь мода — он и так на class path:
javac -cp "rsx-api.jar;rsxm-lib.jar" ...
Config cfg = Config.of("hud");
boolean show = cfg.bool("show", true);
cfg.set("x", 8);
cfg.save();