Files
rsxm-example/README.md
T
SashegDev bfda50ae61 Эталонный мод RustexModding
Собран так, чтобы его читал человек, который пишет первый мод. Показывает
apiVersion, конфиги из rsxm-lib, события, everyTicks, типизированные обёртки
Rsx.Player и Rsx.World, onError и onUnload.

Ни одного обфусцированного имени: мод спрашивает логическими именами, бриф
переводит их в имена текущей сборки. Ни рефлексии, ни чтения файлов игры -
всё это либо не нужно, либо делает бриф.

Компилируется против rsx-api.jar и rsxm-lib.jar, но не содержит ни одного:
библиотека лежит в libs\ и подмешивается в системный class path при старте.
Проверяется просто - если в jar мода нет net/rsxm/, он собран правильно.
2026-10-17 02:55:29 +03:00

49 lines
3.0 KiB
Markdown

# rsxm-example
Эталонный мод RustexModding. Собери его, положи в `%LOCALAPPDATA%\rsx-mod\mods`
и посмотри лог — он рассчитан на то, чтобы его читал человек, который пишет
первый мод.
build.cmd
Нужен только JDK. Скрипт собирает `build\mods\rsxm-example.jar` и кладёт его в
папку модов; если путь другой, переопредели:
set MODS_DIR=D:\path\to\mods && build.cmd
## Что показывает мод
* `apiVersion()` — версия API, под которую написан мод;
* `Config` из rsxm-lib — настройки в `config\example.json`, значения по
умолчанию задаёт сам мод;
* события `playerJoin`, `playerLeave`, `worldChange`;
* `everyTicks` — периодичность по игровым тикам;
* типизированные обёртки `Rsx.Player` и `Rsx.World`;
* `onError` — что мод делает, когда задача упала;
* `onUnload` — что мод делает на выходе.
## Чего здесь нет - и почему
Ни одного обфусцированного имени: ни класса, ни поля, ни метода. Мод
спрашивает логическими именами, бриф переводит их в имена текущей сборки.
Поэтому мод собирается один раз и переживает очередную реобфускацию игры.
Нет рефлексии, нет чтения файлов игры, нет работы с class loader-ами. Всё
это либо не нужно, либо делает бриф: `Rsx.get()`, `Rsx.call()` и
`Rsx.field()` существуют для редких случаев, когда профиль ещё не знает
член, и пользоваться ими стоит в последнюю очередь.
## Зависимости
Компилируется против двух jar, но не содержит ни одного из них:
* `libs\rsx-api.jar` - API, идёт в составе модлоадера;
* `libs\rsxm-lib.jar` - общая библиотека, лежит в `%LOCALAPPDATA%\rsx-mod\libs`
и подмешивается в системный class path при старте игры.
Загрузчик игры даёт каждому моду свой class loader, поэтому моды не видят друг
друга напрямую - но у всех этих загрузчиков родитель системный, а значит всё,
что в нём, доступно каждому. Поэтому библиотека одна на всех, и вшивать её в
мод не нужно. Проверяется это просто: если в jar мода нет `net/rsxm/`, значит
он собрался правильно.