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/, значит он собрался правильно.

S
Description
Пример мода на rsxm-lib
Readme 30 KiB
Languages
Java 83.9%
Batchfile 16.1%