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); } } } }