3d429b2a86
Загрузчик игры даёт каждому моду свой class loader, поэтому моды не видят друг друга. Но у всех этих загрузчиков родитель — системный, а значит всё, что попало в его class path, доступно каждому моду. Агент подмешивает jar'ы из libs\ именно туда, поэтому библиотека одна на всех, и модам не нужно вшивать её в себя. Первый набор: - json.Json — разборщик и писатель JSON без внешних зависимостей; - config.Config — настройки мода в config\<mod>.json, битый файл не роняет игру, а откатывается на значения по умолчанию с записью в лог; - config.Home — где лежит модлоадер, чтобы мод не гадал; - config.Log — логи с именем мода. build.cmd собирает jar и сразу гоняет тесты библиотеки.
40 lines
2.0 KiB
Markdown
40 lines
2.0 KiB
Markdown
# 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();
|