From cefede568b643fc045bd071379b618b8139c73b3 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 17 May 2024 05:07:11 +0200 Subject: [PATCH] remove library loader & jar relocator --- plugin/build.gradle | 1 - .../lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java | 56 ------- .../znpcsplus/libraries/LibraryLoader.java | 119 -------------- .../libraries/UrlClassLoaderAccess.java | 152 ------------------ 4 files changed, 328 deletions(-) delete mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/libraries/LibraryLoader.java delete mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/libraries/UrlClassLoaderAccess.java diff --git a/plugin/build.gradle b/plugin/build.gradle index 075bb42..2d08b1e 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -28,7 +28,6 @@ dependencies { implementation "net.kyori:adventure-platform-bukkit:4.3.2" implementation "net.kyori:adventure-text-minimessage:4.15.0" - implementation "me.lucko:jar-relocator:1.7" implementation project(":api") } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java index 0b209a0..9eb1ab9 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusBootstrap.java @@ -31,57 +31,6 @@ public class ZNpcsPlusBootstrap extends JavaPlugin { Bukkit.getPluginManager().disablePlugin(this); return; } - /* - getLogger().info("Downloading and loading libraries, this might take a while if this is the first time you're launching the plugin"); - LibraryLoader loader = new LibraryLoader(this, new File(getDataFolder(), "libraries")); - - loader.addRelocation(decrypt("org..bstats"), "lol.pyr.znpcsplus.libraries.bstats"); - loader.addRelocation(decrypt("me..robertlit..spigotresources"), "lol.pyr.znpcsplus.libraries.spigotresources"); - loader.addRelocation(decrypt("net..kyori"), "lol.pyr.znpcsplus.libraries.kyori"); - loader.addRelocation(decrypt("org..checkerframework"), "lol.pyr.znpcsplus.libraries.checkerframework"); - loader.addRelocation(decrypt("com..google"), "lol.pyr.znpcsplus.libraries.google"); - loader.addRelocation(decrypt("com..github..retrooper..packetevents"), "lol.pyr.znpcsplus.libraries.packetevents.api"); - loader.addRelocation(decrypt("io..github..retrooper..packetevents"), "lol.pyr.znpcsplus.libraries.packetevents.impl"); - loader.addRelocation(decrypt("org..yaml..snakeyaml"), "lol.pyr.znpcsplus.libraries.snakeyaml"); - loader.addRelocation(decrypt("space..arim..dazzleconf"), "lol.pyr.znpcsplus.libraries.dazzleconf"); - loader.addRelocation(decrypt("lol..pyr..director"), "lol.pyr.znpcsplus.libraries.command"); - - loader.loadLibrary(decrypt("com..google..guava"), "guava", "18.0"); - loader.loadLibrary(decrypt("com..google..code..gson"), "gson", "2.10.1"); - - loader.loadLibrary(decrypt("org..bstats"), "bstats-base", "3.0.2"); - loader.loadLibrary(decrypt("org..bstats"), "bstats-bukkit", "3.0.2"); - - loader.loadLibrary("me.robertlit", "SpigotResourcesAPI", "2.0", "https://repo.pyr.lol/releases"); - - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "api", "2.3.0", "https://repo.codemc.io/repository/maven-releases/"); - loader.loadLibrary(decrypt("com..github..retrooper..packetevents"), "spigot", "2.3.0", "https://repo.codemc.io/repository/maven-releases/"); - - loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-core", "1.2.1"); - loader.loadLibrary(decrypt("space..arim..dazzleconf"), "dazzleconf-ext-snakeyaml", "1.2.1"); - loader.loadLibrary("org.yaml", "snakeyaml", "1.33"); - - loader.loadLibrary("lol.pyr", "director-adventure", "2.1.1", "https://repo.pyr.lol/releases"); - - loader.loadLibrary(decrypt("net..kyori"), "adventure-api", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-key", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-nbt", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-platform-facet", "4.3.2"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-platform-api", "4.3.2"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-platform-bukkit", "4.3.2"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-minimessage", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-serializer-bungeecord", "4.3.2"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-serializer-gson", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-serializer-gson-legacy-impl", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-serializer-json", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-serializer-json-legacy-impl", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "adventure-text-serializer-legacy", "4.15.0"); - loader.loadLibrary(decrypt("net..kyori"), "examination-api", "1.3.0"); - loader.loadLibrary(decrypt("net..kyori"), "examination-string", "1.3.0"); - loader.deleteUnloadedLibraries(); - - getLogger().info("Loaded " + loader.loadedLibraryCount() + " libraries!"); - */ zNpcsPlus = new ZNpcsPlus(this); } @@ -121,9 +70,4 @@ public class ZNpcsPlusBootstrap extends JavaPlugin { public boolean movedLegacy() { return legacy; } - - // Ugly hack because of https://github.com/johnrengelman/shadow/issues/232 - private static String decrypt(String packageName) { - return packageName.replace("..", "."); - } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/libraries/LibraryLoader.java b/plugin/src/main/java/lol/pyr/znpcsplus/libraries/LibraryLoader.java deleted file mode 100644 index 7d94674..0000000 --- a/plugin/src/main/java/lol/pyr/znpcsplus/libraries/LibraryLoader.java +++ /dev/null @@ -1,119 +0,0 @@ -package lol.pyr.znpcsplus.libraries; - -import me.lucko.jarrelocator.JarRelocator; -import me.lucko.jarrelocator.Relocation; -import org.bukkit.plugin.Plugin; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.logging.Logger; - -public class LibraryLoader { - private final static Logger logger = Logger.getLogger("ZNPCsPlus Library Loader"); - - private final UrlClassLoaderAccess loaderAccess; - private final File librariesFolder; - private final Set loadedLibraries = new HashSet<>(); - private final List relocationRules = new ArrayList<>(); - - public LibraryLoader(Plugin plugin, File librariesFolder) { - loaderAccess = UrlClassLoaderAccess.create((URLClassLoader) plugin.getClass().getClassLoader()); - this.librariesFolder = librariesFolder; - if (!librariesFolder.exists()) librariesFolder.mkdirs(); - } - - public void deleteUnloadedLibraries() { - File[] files = librariesFolder.listFiles(); - if (files == null) return; - for (File file : files) if (!loadedLibraries.contains(file)) file.delete(); - } - - public void addRelocation(String pre, String post) { - relocationRules.add(new Relocation(pre, post)); - } - - public void loadSnapshotLibrary(String groupId, String artifactId, String version, String snapshotVersion, String repoUrl) { - try { - loadLibrary(groupId + ":" + artifactId + ":" + version, - getDependencyFile(groupId, artifactId, version), - getSnapshotDependencyUrl(groupId, artifactId, version, snapshotVersion, repoUrl)); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - - public int loadedLibraryCount() { - return loadedLibraries.size(); - } - - public void loadLibrary(String groupId, String artifactId, String version) { - loadLibrary(groupId, artifactId, version, "https://repo1.maven.org/maven2"); - } - - public void loadLibrary(String groupId, String artifactId, String version, String repoUrl) { - try { - loadLibrary(groupId + ":" + artifactId + ":" + version, - getDependencyFile(groupId, artifactId, version), - getDependencyUrl(groupId, artifactId, version, repoUrl)); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - - private void loadLibrary(String name, File file, URL url) { - if (!file.exists()) { - try (InputStream in = url.openStream()) { - File temp = new File(file.getParentFile(), file.getName() + ".temp"); - Files.copy(in, temp.toPath()); - new JarRelocator(temp, file, relocationRules).run(); - temp.delete(); - // logger.info("Downloaded library " + name); - } catch (IOException e) { - logger.severe("Failed to download library " + name); - e.printStackTrace(); - } - } - - try { - loaderAccess.addURL(file.toURI().toURL()); - loadedLibraries.add(file); - // logger.info("Loaded library " + name); - } catch (Exception e) { - logger.severe("Failed to load library, plugin may not work correctly (" + name + ")"); - e.printStackTrace(); - } - } - - private File getDependencyFile(String groupId, String artifactId, String version) { - return new File(librariesFolder, groupId.replace(".", "-") + "-" - + artifactId.replace(".", "-") + "-" - + version.replace(".", "-") + ".jar"); - } - - private static URL getDependencyUrl(String groupId, String artifactId, String version, String repoUrl) throws MalformedURLException { - String url = repoUrl.endsWith("/") ? repoUrl : repoUrl + "/"; - url += groupId.replace(".", "/") + "/"; - url += artifactId + "/"; - url += version + "/"; - url += artifactId + "-" + version + ".jar"; - return new URL(url); - } - - private static URL getSnapshotDependencyUrl(String groupId, String artifactId, String version, String snapshotVersion, String repoUrl) throws MalformedURLException { - String url = repoUrl.endsWith("/") ? repoUrl : repoUrl + "/"; - url += groupId.replace(".", "/") + "/"; - url += artifactId + "/"; - url += version + "/"; - url += artifactId + "-" + snapshotVersion + ".jar"; - return new URL(url); - } -} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/libraries/UrlClassLoaderAccess.java b/plugin/src/main/java/lol/pyr/znpcsplus/libraries/UrlClassLoaderAccess.java deleted file mode 100644 index 0e2b11d..0000000 --- a/plugin/src/main/java/lol/pyr/znpcsplus/libraries/UrlClassLoaderAccess.java +++ /dev/null @@ -1,152 +0,0 @@ -package lol.pyr.znpcsplus.libraries; - -import javax.annotation.Nonnull; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Collection; - -/** - * Provides access to {@link URLClassLoader}#addURL. - * From https://github.com/lucko/helper/blob/master/helper/src/main/java/me/lucko/helper/maven/URLClassLoaderAccess.java - */ -public abstract class UrlClassLoaderAccess { - - /** - * Creates a {@link UrlClassLoaderAccess} for the given class loader. - * - * @param classLoader the class loader - * @return the access object - */ - static UrlClassLoaderAccess create(URLClassLoader classLoader) { - if (Reflection.isSupported()) { - return new Reflection(classLoader); - } else if (Unsafe.isSupported()) { - return new Unsafe(classLoader); - } else { - return Noop.INSTANCE; - } - } - - private final URLClassLoader classLoader; - - protected UrlClassLoaderAccess(URLClassLoader classLoader) { - this.classLoader = classLoader; - } - - - /** - * Adds the given URL to the class loader. - * - * @param url the URL to add - */ - public abstract void addURL(@Nonnull URL url); - - /** - * Accesses using reflection, not supported on Java 9+. - */ - private static class Reflection extends UrlClassLoaderAccess { - private static final Method ADD_URL_METHOD; - - static { - Method addUrlMethod; - try { - addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); - addUrlMethod.setAccessible(true); - } catch (Exception e) { - addUrlMethod = null; - } - ADD_URL_METHOD = addUrlMethod; - } - - private static boolean isSupported() { - return ADD_URL_METHOD != null; - } - - Reflection(URLClassLoader classLoader) { - super(classLoader); - } - - @Override - public void addURL(@Nonnull URL url) { - try { - ADD_URL_METHOD.invoke(super.classLoader, url); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } - } - - /** - * Accesses using sun.misc.Unsafe, supported on Java 9+. - * - * @author Vaishnav Anil (https://github.com/slimjar/slimjar) - */ - private static class Unsafe extends UrlClassLoaderAccess { - private static final sun.misc.Unsafe UNSAFE; - - static { - sun.misc.Unsafe unsafe; - try { - Field unsafeField = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); - unsafeField.setAccessible(true); - unsafe = (sun.misc.Unsafe) unsafeField.get(null); - } catch (Throwable t) { - unsafe = null; - } - UNSAFE = unsafe; - } - - private static boolean isSupported() { - return UNSAFE != null; - } - - private final Collection unopenedURLs; - private final Collection pathURLs; - - @SuppressWarnings("unchecked") - Unsafe(URLClassLoader classLoader) { - super(classLoader); - - Collection unopenedURLs; - Collection pathURLs; - try { - Object ucp = fetchField(URLClassLoader.class, classLoader, "ucp"); - unopenedURLs = (Collection) fetchField(ucp.getClass(), ucp, "unopenedUrls"); - pathURLs = (Collection) fetchField(ucp.getClass(), ucp, "path"); - } catch (Throwable e) { - unopenedURLs = null; - pathURLs = null; - } - this.unopenedURLs = unopenedURLs; - this.pathURLs = pathURLs; - } - - private static Object fetchField(final Class clazz, final Object object, final String name) throws NoSuchFieldException { - Field field = clazz.getDeclaredField(name); - long offset = UNSAFE.objectFieldOffset(field); - return UNSAFE.getObject(object, offset); - } - - @Override - public void addURL(@Nonnull URL url) { - this.unopenedURLs.add(url); - this.pathURLs.add(url); - } - } - - private static class Noop extends UrlClassLoaderAccess { - private static final Noop INSTANCE = new Noop(); - - private Noop() { - super(null); - } - - @Override - public void addURL(@Nonnull URL url) { - throw new UnsupportedOperationException(); - } - } - -} \ No newline at end of file