From 1731f0b0cb485a1502fda79f824db8a032484364 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Tue, 13 Feb 2018 01:19:16 +0800 Subject: [PATCH] fixes --- .../org/to2mbn/authlibinjector/AuthlibInjector.java | 10 +++++++++- .../tweaker/AuthlibInjectorTweaker.java | 6 +----- .../tweaker/TweakerTransformerAdapter.java | 6 +++++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/to2mbn/authlibinjector/AuthlibInjector.java b/src/main/java/org/to2mbn/authlibinjector/AuthlibInjector.java index 168ab4c..9cc1200 100644 --- a/src/main/java/org/to2mbn/authlibinjector/AuthlibInjector.java +++ b/src/main/java/org/to2mbn/authlibinjector/AuthlibInjector.java @@ -22,15 +22,23 @@ public final class AuthlibInjector { private static final String[] nonTransformablePackages = new String[] { "java.", "javax.", "com.sun.", "com.oracle.", "jdk.", "sun.", "org.apache.", "com.google.", "oracle.", "com.oracle.", "com.paulscode.", "io.netty.", "org.lwjgl.", "net.java.", "org.w3c.", "javassist.", "org.xml.", "org.jcp.", "paulscode.", - "com.ibm.", "joptsimple." }; + "com.ibm.", "joptsimple.", "org.to2mbn.authlibinjector." }; private AuthlibInjector() {} + private static boolean booted = false; + public static void log(String message, Object... args) { System.err.println("[authlib-injector] " + MessageFormat.format(message, args)); } public static void bootstrap(Consumer transformerRegistry) { + if (booted) { + log("already booted, skipping"); + return; + } + booted = true; + Optional optionalConfig = configure(); if (!optionalConfig.isPresent()) { log("no config is found, exiting"); diff --git a/src/main/java/org/to2mbn/authlibinjector/tweaker/AuthlibInjectorTweaker.java b/src/main/java/org/to2mbn/authlibinjector/tweaker/AuthlibInjectorTweaker.java index a42abca..cd129cf 100644 --- a/src/main/java/org/to2mbn/authlibinjector/tweaker/AuthlibInjectorTweaker.java +++ b/src/main/java/org/to2mbn/authlibinjector/tweaker/AuthlibInjectorTweaker.java @@ -3,16 +3,12 @@ package org.to2mbn.authlibinjector.tweaker; import static org.to2mbn.authlibinjector.AuthlibInjector.bootstrap; import static org.to2mbn.authlibinjector.AuthlibInjector.log; import java.io.File; -import java.lang.instrument.ClassFileTransformer; -import java.util.ArrayList; import java.util.List; import net.minecraft.launchwrapper.ITweaker; import net.minecraft.launchwrapper.LaunchClassLoader; public class AuthlibInjectorTweaker implements ITweaker { - static List transformers = new ArrayList<>(); - @Override public void acceptOptions(List args, File gameDir, File assetsDir, String profile) {} @@ -22,7 +18,7 @@ public class AuthlibInjectorTweaker implements ITweaker { Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); try { log("launched from tweaker"); - bootstrap(transformers::add); + bootstrap(TweakerTransformerAdapter.transformers::add); launchClassLoader.registerTransformer(TweakerTransformerAdapter.class.getName()); } finally { Thread.currentThread().setContextClassLoader(originalCtxCl); diff --git a/src/main/java/org/to2mbn/authlibinjector/tweaker/TweakerTransformerAdapter.java b/src/main/java/org/to2mbn/authlibinjector/tweaker/TweakerTransformerAdapter.java index 4755aa9..6d989a9 100644 --- a/src/main/java/org/to2mbn/authlibinjector/tweaker/TweakerTransformerAdapter.java +++ b/src/main/java/org/to2mbn/authlibinjector/tweaker/TweakerTransformerAdapter.java @@ -3,15 +3,19 @@ package org.to2mbn.authlibinjector.tweaker; import static org.to2mbn.authlibinjector.AuthlibInjector.log; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; +import java.util.ArrayList; +import java.util.List; import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; public class TweakerTransformerAdapter implements IClassTransformer { + public static List transformers = new ArrayList<>(); + @Override public byte[] transform(String name, String transformedName, byte[] classBuffer) { String internalClassName = name.replace('.', '/'); - for (ClassFileTransformer transformer : AuthlibInjectorTweaker.transformers) { + for (ClassFileTransformer transformer : transformers) { byte[] result = null; try { result = transformer.transform(Launch.classLoader, internalClassName, null, null, classBuffer);