diff --git a/patches/server/Bundle-spark.patch b/patches/server/Bundle-spark.patch index 8b441d6d65..28285080e6 100644 --- a/patches/server/Bundle-spark.patch +++ b/patches/server/Bundle-spark.patch @@ -13,8 +13,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 implementation("io.papermc:reflection-rewriter-proxy-generator:$reflectionRewriterVersion") // Paper end - Remap reflection + // Paper start - spark -+ implementation("me.lucko:spark-api:0.1-SNAPSHOT") -+ implementation("me.lucko:spark-paper:1.10.83-SNAPSHOT") ++ implementation("me.lucko:spark-api:0.1-20240720.200737-2") ++ implementation("me.lucko:spark-paper:1.10.84-20240720.204128-1") + // Paper end - spark } @@ -28,8 +28,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +package io.papermc.paper; + +import io.papermc.paper.configuration.GlobalConfiguration; -+import io.papermc.paper.plugin.ClassLoaderStorage; -+import io.papermc.paper.plugin.entrypoint.classloader.PaperSimplePluginClassLoader; ++import io.papermc.paper.plugin.entrypoint.classloader.group.PaperPluginClassLoaderStorage; ++import io.papermc.paper.plugin.provider.classloader.ConfiguredPluginClassLoader; ++import io.papermc.paper.plugin.provider.classloader.PaperClassLoaderStorage; +import io.papermc.paper.util.MCUtil; +import java.util.List; +import java.util.logging.Level; @@ -40,11 +41,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +import me.lucko.spark.paper.api.PaperSparkModule; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; ++import net.minecraft.util.ExceptionCollector; +import org.bukkit.Server; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.CraftServer; -+import org.bukkit.plugin.java.PluginClassLoader; + +// It's like electricity. +public final class SparksFly { @@ -87,24 +88,23 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + }, new PaperClassLookup() { + @Override + public Class lookup(final String className) throws Exception { ++ final ExceptionCollector exceptions = new ExceptionCollector<>(); + try { + return Class.forName(className); -+ } catch (final Exception e) { -+ for (final PaperSimplePluginClassLoader loader : ClassLoaderStorage.MODERN_LOADERS) { -+ final Class loadedClass = loader.loadClass(className); -+ if (loadedClass != null) { -+ return loadedClass; ++ } catch (final ClassNotFoundException e) { ++ exceptions.add(e); ++ for (final ConfiguredPluginClassLoader loader : ((PaperPluginClassLoaderStorage) PaperClassLoaderStorage.instance()).getGlobalGroup().getClassLoaders()) { ++ try { ++ final Class loadedClass = loader.loadClass(className, true, false, true); ++ if (loadedClass != null) { ++ return loadedClass; ++ } ++ } catch (final ClassNotFoundException exception) { ++ exceptions.add(exception); + } + } -+ for (final PluginClassLoader loader : ClassLoaderStorage.LEGACY_LOADERS) { -+ final Class loadedClass = loader.loadClass(className, true, false, true); -+ if (loadedClass != null) { -+ return loadedClass; -+ } -+ } -+ final ClassNotFoundException exception = new ClassNotFoundException("Could not find class " + className); -+ exception.addSuppressed(e); -+ throw exception; ++ exceptions.throwIfPresent(); ++ return null; + } + } + }); @@ -225,43 +225,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + } +} -diff --git a/src/main/java/io/papermc/paper/plugin/ClassLoaderStorage.java b/src/main/java/io/papermc/paper/plugin/ClassLoaderStorage.java -new file mode 100644 -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 ---- /dev/null -+++ b/src/main/java/io/papermc/paper/plugin/ClassLoaderStorage.java -@@ -0,0 +0,0 @@ -+package io.papermc.paper.plugin; -+ -+import io.papermc.paper.plugin.entrypoint.classloader.PaperSimplePluginClassLoader; -+import java.util.HashSet; -+import java.util.Set; -+import org.bukkit.plugin.java.PluginClassLoader; -+ -+public final class ClassLoaderStorage { -+ public static final Set MODERN_LOADERS = new HashSet<>(); -+ public static final Set LEGACY_LOADERS = new HashSet<>(); -+} -diff --git a/src/main/java/io/papermc/paper/plugin/entrypoint/classloader/PaperSimplePluginClassLoader.java b/src/main/java/io/papermc/paper/plugin/entrypoint/classloader/PaperSimplePluginClassLoader.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/io/papermc/paper/plugin/entrypoint/classloader/PaperSimplePluginClassLoader.java -+++ b/src/main/java/io/papermc/paper/plugin/entrypoint/classloader/PaperSimplePluginClassLoader.java -@@ -0,0 +0,0 @@ - package io.papermc.paper.plugin.entrypoint.classloader; - -+import io.papermc.paper.plugin.ClassLoaderStorage; - import io.papermc.paper.plugin.configuration.PluginMeta; - import io.papermc.paper.plugin.util.NamespaceChecker; - import org.jetbrains.annotations.ApiStatus; -@@ -0,0 +0,0 @@ public class PaperSimplePluginClassLoader extends URLClassLoader { - this.jarUrl = source.toUri().toURL(); - this.configuration = configuration; - this.jar = file; -+ -+ ClassLoaderStorage.MODERN_LOADERS.add(this); // Paper - spark - } - - @Override diff --git a/src/main/java/io/papermc/paper/plugin/provider/source/FileProviderSource.java b/src/main/java/io/papermc/paper/plugin/provider/source/FileProviderSource.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/io/papermc/paper/plugin/provider/source/FileProviderSource.java @@ -304,26 +267,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 type.register(entrypointHandler, file, context); } -diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProvider.java b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProvider.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProvider.java -+++ b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProvider.java -@@ -0,0 +0,0 @@ package io.papermc.paper.plugin.provider.type.spigot; - - import com.destroystokyo.paper.util.SneakyThrow; - import com.destroystokyo.paper.utils.PaperPluginLogger; -+import io.papermc.paper.plugin.ClassLoaderStorage; - import io.papermc.paper.plugin.manager.PaperPluginManagerImpl; - import io.papermc.paper.plugin.provider.configuration.LoadOrderConfiguration; - import io.papermc.paper.plugin.provider.entrypoint.DependencyContext; -@@ -0,0 +0,0 @@ public class SpigotPluginProvider implements PluginProvider, Provide - // We must provide a temporary context in order to properly handle dependencies on the plugin classloader constructor. - loader.dependencyContext = PaperPluginManagerImpl.getInstance(); - -+ ClassLoaderStorage.LEGACY_LOADERS.add(loader); // Paper - spark - - this.status = ProviderStatus.INITIALIZED; - return loader.getPlugin(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java