@@ -28,18 +28,35 @@ import io.papermc.paperweight.core.extension.PaperweightCoreExtension
2828import io.papermc.paperweight.core.taskcontainers.CoreTasks
2929import io.papermc.paperweight.core.taskcontainers.DevBundleTasks
3030import io.papermc.paperweight.core.taskcontainers.PaperclipTasks
31+ import io.papermc.paperweight.core.util.createBuildTasks
3132import io.papermc.paperweight.tasks.*
3233import io.papermc.paperweight.util.*
3334import io.papermc.paperweight.util.constants.*
3435import io.papermc.paperweight.util.data.mache.*
36+ import javax.inject.Inject
3537import org.gradle.api.Plugin
3638import org.gradle.api.Project
39+ import org.gradle.api.artifacts.dsl.DependencyFactory
40+ import org.gradle.api.file.ProjectLayout
41+ import org.gradle.api.model.ObjectFactory
42+ import org.gradle.api.plugins.JavaPlugin
43+ import org.gradle.api.plugins.JavaPluginExtension
3744import org.gradle.api.provider.Property
3845import org.gradle.api.tasks.Delete
46+ import org.gradle.api.tasks.SourceSet
3947import org.gradle.api.tasks.bundling.AbstractArchiveTask
4048import org.gradle.kotlin.dsl.*
4149
4250abstract class PaperweightCore : Plugin <Project > {
51+ @get:Inject
52+ abstract val layout: ProjectLayout
53+
54+ @get:Inject
55+ abstract val dependencyFactory: DependencyFactory
56+
57+ @get:Inject
58+ abstract val objects: ObjectFactory
59+
4360 override fun apply (target : Project ) {
4461 Git .checkForGit(target.providers)
4562 printId<PaperweightCore >(" paperweight-core" , target.gradle)
@@ -53,53 +70,71 @@ abstract class PaperweightCore : Plugin<Project> {
5370 target.tasks.register<Delete >(" cleanCache" ) {
5471 group = GENERAL_TASK_GROUP
5572 description = " Delete the project setup cache and task outputs."
56- delete(target. layout.cache)
73+ delete(layout.cache)
5774 }
5875
5976 target.configurations.create(REMAPPER_CONFIG ) {
6077 defaultDependencies {
61- add(
62- target.dependencies.create(
63- " ${listOf (" net" , " fabricmc" ).joinToString(" ." )} :tiny-remapper:${LibraryVersions .TINY_REMAPPER } :fat"
64- ) {
65- isTransitive = false
66- }
67- )
78+ // Join list to avoid relocations breaking the string
79+ val coordinates = " ${listOf (" net" , " fabricmc" ).joinToString(" ." )} :tiny-remapper:${LibraryVersions .TINY_REMAPPER } :fat"
80+ val remapper = dependencyFactory.create(coordinates).also { it.isTransitive = false }
81+ add(remapper)
6882 }
6983 }
7084 target.configurations.create(PAPERCLIP_CONFIG )
71- target.configurations.create(MACHE_CONFIG ) {
72- attributes.attribute(MacheOutput .ATTRIBUTE , target. objects.named(MacheOutput .ZIP ))
85+ val macheConfig = target.configurations.create(MACHE_CONFIG ) {
86+ attributes.attribute(MacheOutput .ATTRIBUTE , objects.named(MacheOutput .ZIP ))
7387 }
7488 target.configurations.register(MACHE_CODEBOOK_CONFIG ) { isTransitive = false }
7589 target.configurations.register(MACHE_REMAPPER_CONFIG ) { isTransitive = false }
7690 target.configurations.register(MACHE_DECOMPILER_CONFIG ) { isTransitive = false }
7791 target.configurations.register(MACHE_PARAM_MAPPINGS_CONFIG ) { isTransitive = false }
7892 target.configurations.register(MACHE_CONSTANTS_CONFIG ) { isTransitive = false }
79- target.configurations.register(MACHE_MINECRAFT_LIBRARIES_CONFIG )
93+ val macheMinecraftLibrariesConfig = target.configurations.register(MACHE_MINECRAFT_LIBRARIES_CONFIG ) {
94+ extendsFrom(macheConfig)
95+ }
96+ target.configurations.register(MACHE_MINECRAFT_CONFIG ) {
97+ extendsFrom(macheMinecraftLibrariesConfig.get())
98+ }
8099 target.configurations.consumable(MAPPED_JAR_OUTGOING_CONFIG ) // For source generator modules
81- target.configurations.register(MACHE_MINECRAFT_CONFIG )
82100 target.configurations.register(JST_CONFIG ) {
83101 defaultDependencies {
84- // add(project.dependencies.create("net.neoforged.jst:jst-cli-bundle:${JSTVersion.VERSION }"))
102+ // add(project.dependencies.create("net.neoforged.jst:jst-cli-bundle:${LibraryVersions.JST }"))
85103 add(target.dependencies.create(" io.papermc.jst:jst-cli-bundle:${LibraryVersions .JST } " ))
86104 }
87105 }
88106
107+ // impl extends minecraft
108+ target.configurations.named(JavaPlugin .IMPLEMENTATION_CONFIGURATION_NAME ) {
109+ extendsFrom(macheMinecraftLibrariesConfig.get())
110+ }
111+
89112 if (target.providers.gradleProperty(" paperweight.dev" ).orNull == " true" ) {
90113 target.tasks.register<CreateDiffOutput >(" diff" ) {
91114 inputDir.convention(ext.paper.paperServerDir.map { it.dir(" src/main/java" ) })
92115 val prop = target.providers.gradleProperty(" paperweight.diff.output" )
93116 if (prop.isPresent) {
94- baseDir.convention(target. layout.projectDirectory.dir(prop))
117+ baseDir.convention(layout.projectDirectory.dir(prop))
95118 }
96119 }
97120 }
98121
99- val mache: Property <MacheMeta > = target. objects.property()
122+ val mache: Property <MacheMeta > = objects.property()
100123 val tasks = CoreTasks (target, mache)
101124 val devBundleTasks = DevBundleTasks (target, tasks)
102125
126+ target.configurations.named(MAPPED_JAR_OUTGOING_CONFIG ) {
127+ outgoing.artifact(tasks.macheRemapJar)
128+ }
129+ target.configurations.named(MACHE_MINECRAFT_CONFIG ) {
130+ withDependencies {
131+ val minecraftJar = dependencyFactory.create(
132+ layout.files(tasks.macheRemapJar.flatMap { it.outputJar })
133+ )
134+ add(minecraftJar)
135+ }
136+ }
137+
103138 val jar = target.tasks.named(" jar" , AbstractArchiveTask ::class )
104139 tasks.generateReobfMappings {
105140 inputJar.set(jar.flatMap { it.archiveFile })
@@ -110,8 +145,9 @@ abstract class PaperweightCore : Plugin<Project> {
110145 val (includeMappings, reobfJar) = target.createBuildTasks(
111146 ext.spigot.packageVersion,
112147 ext.reobfPackagesToFix,
113- tasks.generateRelocatedReobfMappings
148+ tasks.generateRelocatedReobfMappings.flatMap { it.outputMappings },
114149 )
150+
115151 PaperclipTasks (
116152 target,
117153 ext.bundlerJarName,
@@ -125,15 +161,30 @@ abstract class PaperweightCore : Plugin<Project> {
125161 )
126162
127163 target.afterEvaluate {
128- target.repositories {
164+ // add Minecraft source dirs
165+ // for some reason doing this in #apply instead of afterEvaluate causes fork compileJava to take 5x longer (due to order of source dirs)
166+ target.extensions.configure<JavaPluginExtension > {
167+ sourceSets.named(SourceSet .MAIN_SOURCE_SET_NAME ) {
168+ java {
169+ srcDirs(layout.projectDirectory.dir(" src/minecraft/java" ))
170+ }
171+ resources {
172+ srcDirs(layout.projectDirectory.dir(" src/minecraft/resources" ))
173+ }
174+ }
175+ }
176+
177+ repositories {
129178 maven(ext.macheRepo) {
130179 name = MACHE_REPO_NAME
131180 content { onlyForConfigurations(MACHE_CONFIG ) }
132181 }
133182 }
134183
135184 // load mache
136- mache.set(project.configurations.resolveMacheMeta())
185+ mache.set(configurations.resolveMacheMeta())
186+ mache.get().addRepositories(this )
187+ mache.get().addDependencies(this )
137188
138189 tasks.afterEvaluate()
139190
0 commit comments