From 2e2ea8f1e4388c650de2bf8f87e04ca253f69b5c Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Tue, 8 Jul 2025 09:19:57 +0200 Subject: [PATCH] use paper plugin loader to avoid maven central warning --- core/build.gradle.kts | 3 ++ core/paper-loader/build.gradle.kts | 3 ++ .../com/volmit/iris/IrisPluginLoader.java | 37 +++++++++++++++++++ core/src/main/resources/plugin.yml | 5 ++- settings.gradle.kts | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 core/paper-loader/build.gradle.kts create mode 100644 core/paper-loader/src/main/java/com/volmit/iris/IrisPluginLoader.java diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 17158627f..4d7f24b67 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -25,6 +25,7 @@ plugins { val apiVersion = "1.19" val main = "com.volmit.iris.Iris" +val loader = "com.volmit.iris.IrisPluginLoader" val dynamic: Configuration by configurations.creating configurations.compileOnly { extendsFrom(dynamic) } @@ -69,6 +70,7 @@ dependencies { implementation("net.kyori:adventure-platform-bukkit:4.3.4") implementation("net.kyori:adventure-api:4.17.0") implementation("org.bstats:bstats-bukkit:3.1.0") + implementation(project(":core:paper-loader")) // Dynamically Loaded dynamic("commons-io:commons-io:2.13.0") @@ -118,6 +120,7 @@ tasks { "version" to rootProject.version, "apiVersion" to apiVersion, "main" to main, + "loader" to loader, "libraries" to dynamic.allDependencies.map { "\n - $it" }.sorted().joinToString("") ) filesMatching("**/plugin.yml") { diff --git a/core/paper-loader/build.gradle.kts b/core/paper-loader/build.gradle.kts new file mode 100644 index 000000000..367c9bbc9 --- /dev/null +++ b/core/paper-loader/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT") +} \ No newline at end of file diff --git a/core/paper-loader/src/main/java/com/volmit/iris/IrisPluginLoader.java b/core/paper-loader/src/main/java/com/volmit/iris/IrisPluginLoader.java new file mode 100644 index 000000000..c032b5b22 --- /dev/null +++ b/core/paper-loader/src/main/java/com/volmit/iris/IrisPluginLoader.java @@ -0,0 +1,37 @@ +package com.volmit.iris; + +import io.papermc.paper.plugin.loader.PluginClasspathBuilder; +import io.papermc.paper.plugin.loader.PluginLoader; +import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver; +import lombok.SneakyThrows; +import org.bukkit.configuration.file.YamlConfiguration; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.repository.RemoteRepository; +import org.jetbrains.annotations.NotNull; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URI; + +@SuppressWarnings("all") +public class IrisPluginLoader implements PluginLoader { + + @SneakyThrows + @Override + public void classloader(@NotNull PluginClasspathBuilder builder) { + var pluginUri = URI.create("jar:file:" + builder.getContext().getPluginSource().toAbsolutePath() + "!/plugin.yml"); + var plugin = YamlConfiguration.loadConfiguration(new BufferedReader(new InputStreamReader(pluginUri.toURL().openStream()))); + var repository = "https://maven-central.storage-download.googleapis.com/maven2"; + + try { + var field = MavenLibraryResolver.class.getDeclaredField("MAVEN_CENTRAL_DEFAULT_MIRROR"); + repository = (String) field.get(null); + } catch (Throwable e) {} + + var resolver = new MavenLibraryResolver(); + resolver.addRepository(new RemoteRepository.Builder("central", "default", repository).build()); + plugin.getStringList("libraries").forEach(library -> resolver.addDependency(new Dependency(new DefaultArtifact(library), null))); + builder.addLibrary(resolver); + } +} diff --git a/core/src/main/resources/plugin.yml b/core/src/main/resources/plugin.yml index 89fbfb449..5b6fc940c 100644 --- a/core/src/main/resources/plugin.yml +++ b/core/src/main/resources/plugin.yml @@ -10,4 +10,7 @@ commands: iris: aliases: [ ir, irs ] api-version: '${apiVersion}' -hotload-dependencies: false \ No newline at end of file +hotload-dependencies: false + +paper-plugin-loader: ${loader} +paper-skip-libraries: true \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 18cbee3fe..138a3c25c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,7 +21,7 @@ plugins { rootProject.name = "Iris" -include(":core", ":core:agent") +include(":core", ":core:agent", ":core:paper-loader") include( ":nms:v1_21_R5", ":nms:v1_21_R4",