diff --git a/.gitignore b/.gitignore index 5c96c5ecdf8..6c3f086727d 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,6 @@ buildSrc/src/api testplugins.settings.gradle.kts spongeforge.settings.gradle.kts projects.properties +# External plugin projects +/userplugins/userPluginBuilds +/userplugins/userPlugins diff --git a/SpongeAPI b/SpongeAPI index 53b9cfebe8a..69b4c97428c 160000 --- a/SpongeAPI +++ b/SpongeAPI @@ -1 +1 @@ -Subproject commit 53b9cfebe8aa1151286781bfdc52790792830716 +Subproject commit 69b4c97428c9b5bb6699c793d6f069eb79afebc4 diff --git a/forge/build.gradle.kts b/forge/build.gradle.kts index f65138b6d56..0e3a63e6513 100644 --- a/forge/build.gradle.kts +++ b/forge/build.gradle.kts @@ -25,6 +25,7 @@ val bootstrapDevProject = commonProject.project(":bootstrap-dev") val transformersProject = commonProject.project(":modlauncher-transformers") val libraryManagerProject = commonProject.project(":library-manager") val testPluginsProject: Project? = rootProject.subprojects.find { "testplugins" == it.name } +val userPluginsProject: Project? = rootProject.subprojects.find { "userplugins" == it.name } val apiVersion: String by project val minecraftVersion: String by project @@ -215,6 +216,9 @@ dependencies { testPluginsProject?.also { runtimeOnly(project(it.path)) } + userPluginsProject?.also { + runtimeOnly(project(it.path)) + } } val awFiles: Set = files(main.get().resources, forgeMain.resources).filter { it.name.endsWith(".accesswidener") }.files diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index 205a722707c..c7e66a8b8b5 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -21,6 +21,7 @@ val commonProject = parent!! val transformersProject = commonProject.project(":modlauncher-transformers") val libraryManagerProject = commonProject.project(":library-manager") val testPluginsProject: Project? = rootProject.subprojects.find { "testplugins" == it.name } +val userPluginsProject: Project? = rootProject.subprojects.find { "userplugins" == it.name } val apiVersion: String by project val minecraftVersion: String by project @@ -305,6 +306,9 @@ tasks { dependsOn(it.tasks.classes) } + userPluginsProject?.also { + dependsOn(it.tasks.classes) + } argumentProviders += CommandLineArgumentProvider { mixinConfigs.asSequence() diff --git a/settings.gradle.kts b/settings.gradle.kts index 6202443c650..c71d24b3c2c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -110,6 +110,22 @@ if (projects.contains("neoforge")) { project(":SpongeNeo").projectDir = file("neoforge") } +if (projects.contains("userplugins")) { + include(":userplugins") + val userPluginBuilds = file("userplugins/userPluginBuilds") + if (userPluginBuilds.exists()) { + userPluginBuilds.readLines().filter { !it.startsWith("#") && it.isNotBlank()}.forEach { + includeBuild(it) + } + } else { + userPluginBuilds.writeText("# Add paths to your plugin projects here") + } + val userPlugins = file("userplugins/userPlugins") + if (userPlugins.exists().not()) { + userPlugins.writeText("# Add dependencies to your plugins here") + } +} + if (projects.contains("testplugins")) { include(":testplugins") } diff --git a/userplugins/build.gradle.kts b/userplugins/build.gradle.kts new file mode 100644 index 00000000000..6e7a29097d7 --- /dev/null +++ b/userplugins/build.gradle.kts @@ -0,0 +1,11 @@ +val apiVersion: String by project + +dependencies { + annotationProcessor(implementation("org.spongepowered:spongeapi:$apiVersion")!!) + val userPlugins = file("userPlugins") + if (userPlugins.exists()) { + userPlugins.readLines().filter { !it.startsWith("#") && it.isNotBlank() }.forEach { + implementation(it) + } + } +} diff --git a/vanilla/build.gradle.kts b/vanilla/build.gradle.kts index 111073b834a..1330f0408e6 100644 --- a/vanilla/build.gradle.kts +++ b/vanilla/build.gradle.kts @@ -14,6 +14,7 @@ val bootstrapDevProject = commonProject.project(":bootstrap-dev") val transformersProject = commonProject.project(":modlauncher-transformers") val libraryManagerProject = commonProject.project(":library-manager") val testPluginsProject: Project? = rootProject.subprojects.find { "testplugins" == it.name } +val userPluginsProject: Project? = rootProject.subprojects.find { "userplugins" == it.name } val apiVersion: String by project val apiJavaTarget: String by project @@ -246,6 +247,9 @@ dependencies { testPluginsProject?.also { runtimeOnly(project(it.path)) } + userPluginsProject?.also { + runtimeOnly(project(it.path)) + } } minecraft {