diff --git a/patches/api/Paper-Plugins.patch b/patches/api/Paper-Plugins.patch index 168210027b..5ef068e6df 100644 --- a/patches/api/Paper-Plugins.patch +++ b/patches/api/Paper-Plugins.patch @@ -925,6 +925,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import org.jetbrains.annotations.NotNull; + +import java.io.Closeable; ++import org.jetbrains.annotations.Nullable; + +/** + * The configured plugin class loader represents an internal abstraction over the classloaders used by the server @@ -971,6 +972,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + * @param plugin the {@link JavaPlugin} that should be interlinked with this class loader. + */ + void init(JavaPlugin plugin); ++ ++ /** ++ * Gets the plugin held by this class loader. ++ * ++ * @return the plugin or null if it doesn't exist yet ++ */ ++ @Nullable JavaPlugin getPlugin(); +} diff --git a/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java b/src/main/java/io/papermc/paper/plugin/provider/classloader/PaperClassLoaderStorage.java new file mode 100644 @@ -1941,6 +1949,34 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } /** +@@ -0,0 +0,0 @@ public abstract class JavaPlugin extends PluginBase { + throw new IllegalArgumentException(clazz + " does not extend " + JavaPlugin.class); + } + final ClassLoader cl = clazz.getClassLoader(); +- if (!(cl instanceof PluginClassLoader)) { +- throw new IllegalArgumentException(clazz + " is not initialized by " + PluginClassLoader.class); ++ if (!(cl instanceof io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader configuredPluginClassLoader)) { // Paper ++ throw new IllegalArgumentException(clazz + " is not initialized by a " + io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader.class); // Paper + } +- JavaPlugin plugin = ((PluginClassLoader) cl).plugin; ++ JavaPlugin plugin = configuredPluginClassLoader.getPlugin(); // Paper + if (plugin == null) { + throw new IllegalStateException("Cannot get plugin for " + clazz + " from a static initializer"); + } +@@ -0,0 +0,0 @@ public abstract class JavaPlugin extends PluginBase { + public static JavaPlugin getProvidingPlugin(@NotNull Class clazz) { + Preconditions.checkArgument(clazz != null, "Null class cannot have a plugin"); + final ClassLoader cl = clazz.getClassLoader(); +- if (!(cl instanceof PluginClassLoader)) { +- throw new IllegalArgumentException(clazz + " is not provided by " + PluginClassLoader.class); ++ if (!(cl instanceof io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader configuredPluginClassLoader)) { // Paper ++ throw new IllegalArgumentException(clazz + " is not provided by a " + io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader.class); // Paper + } +- JavaPlugin plugin = ((PluginClassLoader) cl).plugin; ++ JavaPlugin plugin = configuredPluginClassLoader.getPlugin(); // Paper + if (plugin == null) { + throw new IllegalStateException("Cannot get plugin for " + clazz + " from a static initializer"); + } diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java @@ -2001,11 +2037,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 private final Map> classes = new ConcurrentHashMap>(); private final PluginDescriptionFile description; @@ -0,0 +0,0 @@ final class PluginClassLoader extends URLClassLoader { - private final Manifest manifest; - private final URL url; - private final ClassLoader libraryLoader; -- final JavaPlugin plugin; -+ public final JavaPlugin plugin; // Paper private JavaPlugin pluginInit; private IllegalStateException pluginState; private final Set seenIllegalAccess = Collections.newSetFromMap(new ConcurrentHashMap<>()); @@ -2056,6 +2087,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + public void init(JavaPlugin plugin) { + this.initialize(plugin); + } ++ ++ @Override ++ public JavaPlugin getPlugin() { ++ return this.plugin; ++ } + // Paper end + @Override diff --git a/patches/api/Timings-v2.patch b/patches/api/Timings-v2.patch index ad8e63cc03..8263714449 100644 --- a/patches/api/Timings-v2.patch +++ b/patches/api/Timings-v2.patch @@ -3514,18 +3514,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 if (false) { // Spigot - RL handles useTimings check now eventSet.add(new TimedRegisteredListener(listener, executor, eh.priority(), plugin, eh.ignoreCancelled())); } else { -diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -@@ -0,0 +0,0 @@ import org.jetbrains.annotations.Nullable; - */ - @org.jetbrains.annotations.ApiStatus.Internal // Paper - public final class PluginClassLoader extends URLClassLoader implements io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader { // Paper -+ public JavaPlugin getPlugin() { return plugin; } // Spigot - private final JavaPluginLoader loader; - private final Map> classes = new ConcurrentHashMap>(); - private final PluginDescriptionFile description; diff --git a/src/main/java/org/bukkit/util/CachedServerIcon.java b/src/main/java/org/bukkit/util/CachedServerIcon.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/util/CachedServerIcon.java diff --git a/patches/server/Paper-Plugins.patch b/patches/server/Paper-Plugins.patch index 6adedf4899..91d4cf6608 100644 --- a/patches/server/Paper-Plugins.patch +++ b/patches/server/Paper-Plugins.patch @@ -929,7 +929,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + + @Nullable -+ public JavaPlugin getLoadedJavaPlugin() { ++ @Override ++ public JavaPlugin getPlugin() { + return this.loadedJavaPlugin; + } + @@ -5819,7 +5820,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + + + this.status = ProviderStatus.INITIALIZED; -+ return loader.plugin; ++ return loader.getPlugin(); + } catch (Throwable ex) { + this.status = ProviderStatus.ERRORED; + SneakyThrow.sneaky(ex); @@ -6288,9 +6289,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @@ -0,0 +0,0 @@ package io.papermc.paper.util; -+import io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader; ++import io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader; import org.bukkit.plugin.java.JavaPlugin; - import org.bukkit.plugin.java.PluginClassLoader; +-import org.bukkit.plugin.java.PluginClassLoader; import org.jetbrains.annotations.Nullable; +import java.util.Objects; @@ -6307,10 +6308,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 - return classLoader.getPlugin(); + ClassLoader classLoader = frame.getDeclaringClass().getClassLoader(); + JavaPlugin plugin; -+ if (classLoader instanceof PaperPluginClassLoader pluginClassLoader) { -+ plugin = pluginClassLoader.getLoadedJavaPlugin(); -+ } else if (classLoader instanceof PluginClassLoader spigotClassloader) { -+ plugin = spigotClassloader.getPlugin(); ++ if (classLoader instanceof ConfiguredPluginClassLoader configuredPluginClassLoader) { ++ plugin = configuredPluginClassLoader.getPlugin(); + } else { + plugin = null; + }