Remap injected jars by findResource (#153)
This commit is contained in:
parent
2f4e7e9a58
commit
8822c89bb0
|
@ -16,13 +16,13 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.JarURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.net.URLConnection;
|
||||
import java.security.CodeSigner;
|
||||
import java.security.CodeSource;
|
||||
import java.util.Map;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
@Mixin(targets = "org.bukkit.plugin.java.PluginClassLoader", remap = false)
|
||||
|
@ -31,7 +31,6 @@ public class PluginClassLoaderMixin extends URLClassLoader implements RemappingC
|
|||
// @formatter:off
|
||||
@Shadow @Final private Map<String, Class<?>> classes;
|
||||
@Shadow @Final private JavaPluginLoader loader;
|
||||
@Shadow @Final private JarFile jar;
|
||||
@Shadow @Final private PluginDescriptionFile description;
|
||||
@Shadow @Final private Manifest manifest;
|
||||
@Shadow @Final private URL url;
|
||||
|
@ -69,16 +68,28 @@ public class PluginClassLoaderMixin extends URLClassLoader implements RemappingC
|
|||
|
||||
if (result == null) {
|
||||
String path = name.replace('.', '/').concat(".class");
|
||||
JarEntry entry = jar.getJarEntry(path);
|
||||
URL url = this.findResource(path);
|
||||
|
||||
if (entry != null) {
|
||||
if (url != null) {
|
||||
byte[] classBytes;
|
||||
|
||||
try (InputStream is = jar.getInputStream(entry)) {
|
||||
URLConnection connection;
|
||||
CodeSigner[] signers;
|
||||
try {
|
||||
connection = url.openConnection();
|
||||
try (InputStream is = connection.getInputStream()) {
|
||||
classBytes = ByteStreams.toByteArray(is);
|
||||
if (connection instanceof JarURLConnection) {
|
||||
signers = ((JarURLConnection) connection).getJarEntry().getCodeSigners();
|
||||
} else {
|
||||
signers = new CodeSigner[0];
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
throw new ClassNotFoundException(name, ex);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new ClassNotFoundException(name, e);
|
||||
}
|
||||
|
||||
classBytes = SwitchTableFixer.INSTANCE.processClass(classBytes);
|
||||
classBytes = Bukkit.getUnsafe().processClass(description, path, classBytes);
|
||||
|
@ -90,7 +101,7 @@ public class PluginClassLoaderMixin extends URLClassLoader implements RemappingC
|
|||
if (getPackage(pkgName) == null) {
|
||||
try {
|
||||
if (manifest != null) {
|
||||
definePackage(pkgName, manifest, url);
|
||||
definePackage(pkgName, manifest, this.url);
|
||||
} else {
|
||||
definePackage(pkgName, null, null, null, null, null, null, null);
|
||||
}
|
||||
|
@ -102,8 +113,7 @@ public class PluginClassLoaderMixin extends URLClassLoader implements RemappingC
|
|||
}
|
||||
}
|
||||
|
||||
CodeSigner[] signers = entry.getCodeSigners();
|
||||
CodeSource source = new CodeSource(url, signers);
|
||||
CodeSource source = new CodeSource(this.url, signers);
|
||||
|
||||
result = defineClass(name, classBytes, 0, classBytes.length, source);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import org.apache.commons.io.FileUtils;
|
|||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -32,7 +33,10 @@ public class ArclightRemapper {
|
|||
if (!DUMP.exists()) {
|
||||
DUMP.mkdirs();
|
||||
}
|
||||
try {
|
||||
FileUtils.forceDelete(DUMP);
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
} else {
|
||||
DUMP = null;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user