-
v0.2.0 Stable
released this
2026-10-16 23:25:47 +00:00 | 6 commits to main since this releasersx-modloader 0.2.0
Главное в этом релизе: модлоадер теперь умеет несколько модов одновременно,
и моды получают нормальный API вместоObjectи парсингаtoString().Несколько модов
Родной загрузчик игры (
ilxq) на каждый jar создаёт новый загрузчик классов,
но тик-хук запоминает в статическом поле, которое перезаписывается при каждой
загрузке:do = new ilxq(); // свой загрузчик на мод int = method2; // статическое поле: помнит только ПОСЛЕДНИЙ модgetRunnableList()вызывался ровно у одного мода. Остальные грузились, их
onLoadотрабатывал, задачи попадали в очередь — и их никто никогда не
разбирал. Молча. С одним модом это не заметно.Теперь в мосте одна очередь на всех и один drain: какой бы
special.Mainигра
ни позвала, он выполняет работу всех модов. Владелец задачи запоминается в
моментonLoad, поэтому в логе видно, чей код упал.Кладёте jar'ы в
%LOCALAPPDATA%\rsx-mod\mods— и они работают вместе.API
Типизированные обёртки. Раньше
Rsx.player()отдавалObject, и мод
вытаскивал имя изtoString()обфусцированного класса:Rsx.Player p = Rsx.player(); p.getName(); p.getX(); p.getY(); p.getZ(); p.getHealth(); p.getMaxHealth(); p.isAlive(); p.isDead(); Rsx.World w = Rsx.world(); w.getTime(); w.isClient();События вместо polling:
Rsx.on("tick", ...) Rsx.on("worldChange", ...) Rsx.on("playerJoin", ...) Rsx.on("playerLeave", ...) Rsx.on("screenOpen", ...) Rsx.on("screenClose", ...)Периодичность по тикам:
Rsx.everyTicks(20, this::onSecond); // не плывет и не двоит после лага Rsx.every(5000L, this::poll); // миллисекунды: для неигровых задачЖивучесть. Упадёт задача — мост зовёт
RsxMod.onError. Упадёт пять раз
подряд — задача отбрасывается, чтобы сломанный мод не залил лог. Мод может
заявитьRsxMod.apiVersion(), и бриф предупредит, если версии разойдутся,
вместо того чтобы мод молча сломался.Профиль
Перегенерирован: в него попали члены
Entity(posX/posY/posZ/isDead,
getName/getEntityId/isEntityAlive),EntityLivingBase(здоровье) иWorld
(isRemote/getWorldTime). Сгенерированы по SRG-именам, поэтому переживут
очередную реобфускацию.Известные ограничения
- каждый мод получает свой загрузчик классов, поэтому моды не видят друг друга:
общую библиотеку придётся дублировать в каждый jar; - профиль сборки специфичен: после обновления игры моды перестанут грузиться,
пока профиль не перегенерирован; - апдейтер достаёт
app.jarиз своего кэша (скачивает 0 файлов), но хук
сразу патчит его заново — на запуск это не влияет.
Автор
SashegDev — gdsasheg@gmail.com
Downloads
- каждый мод получает свой загрузчик классов, поэтому моды не видят друг друга:
-
v0.1.0 Stable
released this
2026-10-16 23:06:07 +00:00 | 7 commits to main since this releasersx-modloader 0.1.0
Модлоадер для RustexRemake. Не трогает игру: подключается агентом, а в лаунчер
встраивается выбор режима прямо по кнопке «Играть».Что внутри
install.cmd поставить модлоадер uninstall.cmd вернуть всё как было start-launcher.cmd запустить лаунчер напрямую dist\ собранные артефакты profiles\ профиль сборки игрыКак это работает
Игровой
game.jarне патчится вообще. Модлоадер подключается к лаунчеру
через-javaagentвlauncher_config.properties, а в сам лаунчер вживляется
один вызов: при нажатии «Играть» появляется выбор С модами или
Ванилла.- С модами — запускается агент, моды грузится штатным загрузчиком игры
(ilxq.super→special.Main) и выполняется в игровом тике. - Ванилла — игра запускается вообще без агента.
Про обновления
Вендорный апдейтер перекачивает
app.jar, из-за чего патч каждый раз
стирался. Поэтому патчится и сам апдейтер:- в его payload вставляется хук, который убирает
app.jarиз списка на
скачивание — только если хеш в манифесте совпадает с хешем нетронутого
файла из.rsx-patched. Другой хеш — настоящее обновление, и файл
качается как обычно; - перед запуском лаунчера
app.jarпатчится заново, если апдейтер всё же
достал его из своего локального кэша.
Три защиты в самом лаунчере (
rsx.Patch): пропуск проверкиapp.jar,
пропуск самопроверки рабочего jar и запрет лаунчеру «чинить» свой
updater.exe(иначе хук апдейтера жил бы ровно один запуск).Требования
- RustexRemake build 31 (профиль
profiles\latest.rsxpпривязан к сборке —
при обновлении игры его нужно перегенерировать); - Windows, Java 8 в комплекте с игрой;
- установщик может потребовать запуск от администратора.
Откат
install.cmd --uninstallВернёт оригинальные
app.jarиupdater.exe, уберёт-javaagentиз конфига
и удалит маркер.rsx-patched.Известные ограничения
- профиль сборки специфичен: после обновления игры моды перестают грузиться,
пока профиль не перегенерирован; - апдейтер всё ещё достаёт
app.jarиз своего кэша (скачивает 0 файлов), но
хук сразу патчит его заново — на запуск это не влияет; - полный runtime-remap ещё не сделан: 3844 класса без имён, безопасного
автоматического переименования методов пока нет.
Автор
SashegDev — gdsasheg@gmail.com
Downloads
- С модами — запускается агент, моды грузится штатным загрузчиком игры