b8e5df778e
Моды грузятся через -javaagent, game.jar не патчится, переживают ре-обфускацию. Что внутри: - агент rsx-bridge.jar: профиль сборки игры, патчи A2/A6, загрузка модов через родной загрузчик игры (ilxq -> special.Main) - патч лаунчера: окно выбора «С модами / Ванилла» по кнопке «Играть» и защита от автоапдейта лаунчера - install/uninstall: всё ставится в %LOCALAPPDATA%\rsx-mod, пути не хардкодятся - build: три готовых артефакта в dist, нужен только JDK - testserver: локальный сервер, принимает любой ник и токен Проверено на живом клиенте: мод грузится и выполняется в игровом потоке, в логе видно игрока и мир.
42 lines
1.0 KiB
Groovy
42 lines
1.0 KiB
Groovy
// Build settings for a RustexRemake mod.
|
|
//
|
|
// A mod is compiled ONCE against the stable API and never rebuilt: the bridge
|
|
// resolves every logical name against whatever build is installed, so a vendor
|
|
// re-obfuscation does not invalidate anything that was already built.
|
|
|
|
plugins {
|
|
id 'java'
|
|
}
|
|
|
|
group = 'com.example'
|
|
version = '1.0.0'
|
|
|
|
java {
|
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
targetCompatibility = JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
dependencies {
|
|
// the only thing a mod ever compiles against
|
|
compileOnly files('libs/rsx-api.jar')
|
|
}
|
|
|
|
tasks.withType(JavaCompile).configureEach {
|
|
options.encoding = 'UTF-8'
|
|
options.release = 8
|
|
}
|
|
|
|
jar {
|
|
archiveFileName = "${project.name}.jar"
|
|
manifest {
|
|
// the bridge reads this to find the class to instantiate
|
|
attributes('Rsx-Mod-Entrypoint': 'com.example.ExampleMod')
|
|
}
|
|
}
|
|
|
|
// convenience: drop the built mod straight into the client's mods folder
|
|
tasks.register('installMod', Copy) {
|
|
dependsOn 'jar'
|
|
from jar
|
|
into "${projectDir}/../../rsx-mod/mods"
|
|
} |