77 lines
3.1 KiB
Java
77 lines
3.1 KiB
Java
package de.aeromc.capes;
|
||
|
||
import java.lang.instrument.Instrumentation;
|
||
|
||
/**
|
||
* AeroMC-Agent.
|
||
*
|
||
* Wird vom Launcher per -javaagent an Minecraft angehängt (jede Version, jeder
|
||
* Loader) und kann zwei Dinge, einzeln zuschaltbar:
|
||
*
|
||
* Umhänge: klinkt sich in Mojangs authlib ein – über sie lädt Minecraft für
|
||
* jeden Spieler Skin und Umhang – und setzt dort den AeroMC-Umhang
|
||
* des Spielers ein, falls er einen hat. Alles Weitere (Herunterladen,
|
||
* Zwischenspeichern, Anzeigen, auch HD) erledigt Minecraft selbst.
|
||
* Spieldesign: AeroMC-Ladebildschirm, Fenstertitel und -symbol (siehe Design).
|
||
*
|
||
* Argument, Teile durch "|" getrennt:
|
||
* <Basisadresse des Umhang-Servers> (…/wp-json/aeromc/v1)
|
||
* capes=0 Umhänge aus
|
||
* design=<Ordner> Spieldesign an, Grafiken aus diesem Ordner
|
||
* Ein Argument nur mit Adresse (ältere Launcher) heißt: nur Umhänge.
|
||
*/
|
||
public final class Agent {
|
||
/** Unter diesem Schlüssel liegt der Nachschlage-Dienst in den System-Properties. */
|
||
public static final String SCHLUESSEL = "aeromc.capes.hook";
|
||
|
||
private Agent() {}
|
||
|
||
public static void premain(String argument, Instrumentation inst) {
|
||
starte(argument, inst);
|
||
}
|
||
|
||
public static void agentmain(String argument, Instrumentation inst) {
|
||
starte(argument, inst);
|
||
}
|
||
|
||
private static void starte(String argument, Instrumentation inst) {
|
||
String basis = Nachschlagen.STANDARD_BASIS;
|
||
boolean umhaenge = true;
|
||
String design = null;
|
||
String mods = null;
|
||
if (argument != null) {
|
||
for (String teil : argument.split("\\|")) {
|
||
if (teil.startsWith("http")) basis = teil;
|
||
else if (teil.equals("capes=0")) umhaenge = false;
|
||
else if (teil.startsWith("design=") && teil.length() > 7) design = teil.substring(7);
|
||
else if (teil.startsWith("mods=") && teil.length() > 5) mods = teil.substring(5);
|
||
}
|
||
}
|
||
if (mods != null) {
|
||
try {
|
||
Design.installiereMods(mods, inst);
|
||
} catch (Throwable t) {
|
||
System.out.println("[AeroMC] Mod-Schalter konnte nicht starten: " + t);
|
||
}
|
||
}
|
||
if (umhaenge) {
|
||
try {
|
||
// Die eingefügten Befehle in authlib holen sich den Dienst von hier – nur
|
||
// über JDK-Typen, damit es mit jedem Classloader und Modulsystem klappt.
|
||
System.getProperties().put(SCHLUESSEL, new Nachschlagen(basis));
|
||
inst.addTransformer(new Umbau());
|
||
System.out.println("[AeroMC] Umhang-Agent aktiv");
|
||
} catch (Throwable t) {
|
||
System.out.println("[AeroMC] Umhang-Agent konnte nicht starten: " + t);
|
||
}
|
||
}
|
||
if (design != null) {
|
||
try {
|
||
Design.installiere(design, inst);
|
||
} catch (Throwable t) {
|
||
System.out.println("[AeroMC] Spieldesign konnte nicht starten: " + t);
|
||
}
|
||
}
|
||
}
|
||
}
|