b8e5df778e
Моды грузятся через -javaagent, game.jar не патчится, переживают ре-обфускацию. Что внутри: - агент rsx-bridge.jar: профиль сборки игры, патчи A2/A6, загрузка модов через родной загрузчик игры (ilxq -> special.Main) - патч лаунчера: окно выбора «С модами / Ванилла» по кнопке «Играть» и защита от автоапдейта лаунчера - install/uninstall: всё ставится в %LOCALAPPDATA%\rsx-mod, пути не хардкодятся - build: три готовых артефакта в dist, нужен только JDK - testserver: локальный сервер, принимает любой ник и токен Проверено на живом клиенте: мод грузится и выполняется в игровом потоке, в логе видно игрока и мир.
34 lines
1.1 KiB
Java
34 lines
1.1 KiB
Java
package example;
|
|
|
|
import net.rustexremake.api.Rsx;
|
|
import net.rustexremake.api.RsxMod;
|
|
|
|
/**
|
|
* Example mod. It is compiled against the stable API only, so it does not have
|
|
* to be rebuilt when the vendor re-obfuscates the client.
|
|
*/
|
|
public class ExampleMod implements RsxMod {
|
|
|
|
private int ticks;
|
|
|
|
@Override
|
|
public void onLoad() {
|
|
Rsx.info("ExampleMod: loaded on build " + Rsx.buildId());
|
|
Rsx.info("ExampleMod: Minecraft is " + Rsx.describe("net.minecraft.client.Minecraft"));
|
|
|
|
// a repeating task runs on the game thread, driven by the client's own
|
|
// tick, so touching game state here is safe
|
|
Rsx.every(200L, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
ticks++;
|
|
Object mc = Rsx.minecraft();
|
|
Object player = Rsx.player();
|
|
Rsx.info("ExampleMod tick " + ticks
|
|
+ " client=" + (mc != null)
|
|
+ " player=" + player
|
|
+ " world=" + Rsx.world());
|
|
}
|
|
});
|
|
}
|
|
} |