Skip to content

Commit 63fd939

Browse files
authored
feat(core/userdev): Make reobf optional (#290)
* Make reobf optional Comment out the build data ref and or the pkg ver in the spigot extension to disable (or manually set the enabled prop) * Improve userdev error when attempting to reobf and dev bundle does not provide reobf mappings
1 parent 904334f commit 63fd939

File tree

10 files changed

+71
-28
lines changed

10 files changed

+71
-28
lines changed

paperweight-core/src/main/kotlin/io/papermc/paperweight/core/PaperweightCore.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ abstract class PaperweightCore : Plugin<Project> {
145145
tasks.generateRelocatedReobfMappings {
146146
inputJar.set(jar.flatMap { it.archiveFile })
147147
}
148-
val (includeMappings, reobfJar) = target.createBuildTasks(
149-
ext.spigot.packageVersion,
148+
val (mappedJar, reobfJar) = target.createBuildTasks(
149+
ext.spigot,
150150
ext.reobfPackagesToFix,
151151
tasks.generateRelocatedReobfMappings.flatMap { it.outputMappings },
152152
)
@@ -158,8 +158,8 @@ abstract class PaperweightCore : Plugin<Project> {
158158
tasks.extractFromBundler.flatMap { it.versionJson },
159159
tasks.extractFromBundler.flatMap { it.serverLibrariesList },
160160
tasks.downloadServerJar.flatMap { it.outputJar },
161-
includeMappings.flatMap { it.outputJar },
162-
reobfJar.flatMap { it.outputJar },
161+
mappedJar,
162+
reobfJar,
163163
ext.minecraftVersion,
164164
)
165165

@@ -192,7 +192,7 @@ abstract class PaperweightCore : Plugin<Project> {
192192
tasks.afterEvaluate()
193193

194194
devBundleTasks.configureAfterEvaluate(
195-
includeMappings.flatMap { it.outputJar },
195+
mappedJar,
196196
)
197197

198198
if (coreExt.updatingMinecraft.oldPaperCommit.isPresent) {

paperweight-core/src/main/kotlin/io/papermc/paperweight/core/extension/PaperweightCoreExtension.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@ abstract class PaperweightCoreExtension @Inject constructor(objects: ObjectFacto
5050

5151
val reobfPackagesToFix: ListProperty<String> = objects.listProperty()
5252

53-
val spigot = objects.newInstance<SpigotExtension>()
53+
val spigot = objects.newInstance<SpigotExtension>().also { spigot ->
54+
spigot.enabled.convention(
55+
spigot.buildDataRef.zip(spigot.packageVersion) { ref, pkg ->
56+
ref !== null && pkg !== null && ref.isNotBlank() && pkg.isNotBlank()
57+
}
58+
)
59+
}
5460
val paper = objects.newInstance<PaperExtension>(project)
5561

5662
@Suppress("unused")

paperweight-core/src/main/kotlin/io/papermc/paperweight/core/extension/SpigotExtension.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ interface SpigotExtension {
2828

2929
val buildDataRef: Property<String>
3030
val packageVersion: Property<String>
31+
val enabled: Property<Boolean>
3132
}

paperweight-core/src/main/kotlin/io/papermc/paperweight/core/taskcontainers/DevBundleTasks.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,15 @@ class DevBundleTasks(
6868

6969
minecraftVersion.set(project.coreExt.minecraftVersion)
7070
mojangMappedPaperclipFile.set(paperclipForDevBundle.flatMap { it.outputZip })
71-
reobfMappingsFile.set(coreTasks.generateRelocatedReobfMappings.flatMap { it.outputMappings })
71+
reobfMappingsFile.set(
72+
project.coreExt.spigot.enabled.flatMap<RegularFile?> {
73+
if (it) {
74+
coreTasks.generateRelocatedReobfMappings.flatMap { it.outputMappings }
75+
} else {
76+
providers.provider { null }
77+
}
78+
}
79+
)
7280
}
7381

7482
fun configureAfterEvaluate(serverJar: Provider<RegularFile>) {

paperweight-core/src/main/kotlin/io/papermc/paperweight/core/util/project-util.kt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,27 @@
2323
package io.papermc.paperweight.core.util
2424

2525
import io.papermc.paperweight.PaperweightException
26+
import io.papermc.paperweight.core.extension.SpigotExtension
2627
import io.papermc.paperweight.tasks.*
2728
import io.papermc.paperweight.util.*
2829
import io.papermc.paperweight.util.constants.*
2930
import org.gradle.api.Project
3031
import org.gradle.api.Task
3132
import org.gradle.api.file.RegularFile
3233
import org.gradle.api.provider.Provider
33-
import org.gradle.api.tasks.TaskProvider
3434
import org.gradle.api.tasks.bundling.AbstractArchiveTask
3535
import org.gradle.kotlin.dsl.*
3636

3737
fun Project.createBuildTasks(
38-
craftBukkitPackageVersion: Provider<String>,
38+
spigot: SpigotExtension,
3939
packagesToFix: Provider<List<String>?>,
4040
relocatedReobfMappings: Provider<RegularFile>
41-
): ServerBuildTasks {
41+
): ServerArtifacts {
42+
val jar = tasks.named("jar", AbstractArchiveTask::class).flatMap { it.archiveFile }
43+
4244
val fixJarForReobf by tasks.registering<FixJarForReobf> {
4345
group = "build"
44-
inputJar.set(tasks.named("jar", AbstractArchiveTask::class).flatMap { it.archiveFile })
46+
inputJar.set(jar)
4547
packagesToProcess.set(packagesToFix)
4648
}
4749

@@ -59,7 +61,7 @@ fun Project.createBuildTasks(
5961
}
6062
afterEvaluate {
6163
relocateConstants {
62-
relocate("org.bukkit.craftbukkit", "org.bukkit.craftbukkit.${craftBukkitPackageVersion.get()}") {
64+
relocate("org.bukkit.craftbukkit", "org.bukkit.craftbukkit.${spigot.packageVersion.get()}") {
6365
// This is not actually needed as there are no string constant references to Main
6466
// exclude("org.bukkit.craftbukkit.Main*")
6567
}
@@ -85,7 +87,16 @@ fun Project.createBuildTasks(
8587
outputJar.set(layout.buildDirectory.map { it.dir("libs").file("${project.name}-${project.version}-reobf.jar") })
8688
}
8789

88-
return ServerBuildTasks(includeMappings, reobfJar)
90+
return ServerArtifacts(
91+
spigot.enabled.flatMap {
92+
if (it) {
93+
includeMappings.flatMap { it.outputJar }
94+
} else {
95+
jar
96+
}
97+
},
98+
reobfJar.flatMap { it.outputJar }
99+
)
89100
}
90101

91102
fun Task.reobfRequiresDebug() {
@@ -100,7 +111,7 @@ fun Task.reobfRequiresDebug() {
100111
}
101112
}
102113

103-
data class ServerBuildTasks(
104-
val includeMappings: TaskProvider<IncludeMappings>,
105-
val reobfJar: TaskProvider<RemapJar>,
114+
data class ServerArtifacts(
115+
val mappedJar: Provider<RegularFile>,
116+
val reobfJar: Provider<RegularFile>,
106117
)

paperweight-lib/src/main/kotlin/io/papermc/paperweight/tasks/GenerateDevBundle.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,21 @@ import java.nio.file.Files
3131
import java.nio.file.Path
3232
import javax.inject.Inject
3333
import kotlin.io.path.*
34-
import org.gradle.api.DefaultTask
3534
import org.gradle.api.file.ConfigurableFileCollection
3635
import org.gradle.api.file.DirectoryProperty
37-
import org.gradle.api.file.ProjectLayout
3836
import org.gradle.api.file.RegularFileProperty
3937
import org.gradle.api.provider.ListProperty
4038
import org.gradle.api.provider.Property
39+
import org.gradle.api.provider.ProviderFactory
4140
import org.gradle.api.tasks.Input
4241
import org.gradle.api.tasks.InputDirectory
4342
import org.gradle.api.tasks.InputFile
4443
import org.gradle.api.tasks.InputFiles
44+
import org.gradle.api.tasks.Optional
4545
import org.gradle.api.tasks.OutputFile
4646
import org.gradle.api.tasks.TaskAction
4747

48-
abstract class GenerateDevBundle : DefaultTask() {
48+
abstract class GenerateDevBundle : BaseTask() {
4949

5050
@get:InputFiles
5151
abstract val sourceDirectories: ConfigurableFileCollection
@@ -69,13 +69,14 @@ abstract class GenerateDevBundle : DefaultTask() {
6969
abstract val macheDep: Property<String>
7070

7171
@get:InputFile
72+
@get:Optional
7273
abstract val reobfMappingsFile: RegularFileProperty
7374

7475
@get:OutputFile
7576
abstract val devBundleFile: RegularFileProperty
7677

7778
@get:Inject
78-
abstract val layout: ProjectLayout
79+
abstract val providers: ProviderFactory
7980

8081
@TaskAction
8182
fun run() {
@@ -100,7 +101,9 @@ abstract class GenerateDevBundle : DefaultTask() {
100101

101102
val dataZip = zip.getPath(dataDir)
102103
dataZip.createDirectories()
103-
reobfMappingsFile.path.copyTo(dataZip.resolve(reobfMappingsFileName))
104+
if (reobfMappingsFile.isPresent) {
105+
reobfMappingsFile.path.copyTo(dataZip.resolve(reobfMappingsFileName))
106+
}
104107
mojangMappedPaperclipFile.path.copyTo(dataZip.resolve(mojangMappedPaperclipFileName))
105108

106109
val patchesZip = zip.getPath(patchesDir)
@@ -186,7 +189,7 @@ abstract class GenerateDevBundle : DefaultTask() {
186189
minecraftVersion = minecraftVersion.get(),
187190
mache = createMacheDep(),
188191
patchDir = patchTargetDir,
189-
reobfMappingsFile = "$dataTargetDir/$reobfMappingsFileName",
192+
reobfMappingsFile = if (reobfMappingsFile.isPresent) "$dataTargetDir/$reobfMappingsFileName" else null,
190193
mojangMappedPaperclipFile = "$dataTargetDir/$mojangMappedPaperclipFileName",
191194
libraryRepositories = libraryRepositories.get(),
192195
pluginRemapArgs = TinyRemapper.pluginRemapArgs,
@@ -200,7 +203,7 @@ abstract class GenerateDevBundle : DefaultTask() {
200203
val minecraftVersion: String,
201204
val mache: MavenDep,
202205
val patchDir: String,
203-
val reobfMappingsFile: String,
206+
val reobfMappingsFile: String?,
204207
val mojangMappedPaperclipFile: String,
205208
val libraryRepositories: List<String>,
206209
val pluginRemapArgs: List<String>,
@@ -211,6 +214,6 @@ abstract class GenerateDevBundle : DefaultTask() {
211214
const val mojangMappedPaperclipFileName = "paperclip-$DEOBF_NAMESPACE.jar"
212215

213216
// Should be bumped when the dev bundle config/contents changes in a way which will require users to update paperweight
214-
const val currentDataVersion = 6
217+
const val currentDataVersion = 7
215218
}
216219
}

paperweight-userdev/src/main/kotlin/io/papermc/paperweight/userdev/PaperweightUser.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,17 @@ abstract class PaperweightUser : Plugin<Project> {
126126
group = GENERAL_TASK_GROUP
127127
description = "Remap the compiled plugin jar to Spigot's obfuscated runtime names."
128128

129-
mappingsFile.set(setupTask.flatMap { it.reobfMappings })
129+
mappingsFile.set(
130+
setupTask.flatMap { task ->
131+
task.reobfMappings.map { mappings ->
132+
if (mappings.asFile.exists()) {
133+
mappings
134+
} else {
135+
throw PaperweightException("The current dev bundle does not provide reobf mappings.")
136+
}
137+
}
138+
}
139+
)
130140
remapClasspath.from(setupTask.flatMap { it.mappedServerJar })
131141
toNamespace.set(SPIGOT_NAMESPACE)
132142
remapper.from(project.configurations.named(PLUGIN_REMAPPER_CONFIG))

paperweight-userdev/src/main/kotlin/io/papermc/paperweight/userdev/internal/setup/DevBundles.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ private val supported = mapOf(
3535
3 to DevBundleV5.Config::class, // up to 1.20.4
3636
4 to DevBundleV5.Config::class, // 1.20.5, early 1.20.6
3737
5 to DevBundleV5.Config::class, // 1.20.6+ (nullable mojangApiCoordinates)
38-
6 to GenerateDevBundle.DevBundleConfig::class // Post-repo-restructure 1.21.4+
38+
6 to GenerateDevBundle.DevBundleConfig::class, // Post-repo-restructure 1.21.4+
39+
7 to GenerateDevBundle.DevBundleConfig::class, // TODO: Add version (nullable reobfMappingsFile)
3940
)
4041

4142
fun readBundleInfo(bundleZip: Path): BundleInfo<Any> {

paperweight-userdev/src/main/kotlin/io/papermc/paperweight/userdev/internal/setup/SetupHandlerImpl.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,10 @@ class SetupHandlerImpl(
188188
}
189189

190190
override fun extractReobfMappings(output: Path) {
191-
bundle.zip.openZipSafe().use { fs ->
192-
fs.getPath(bundle.config.reobfMappingsFile).copyTo(output, true)
191+
bundle.config.reobfMappingsFile?.let { location ->
192+
bundle.zip.openZipSafe().use { fs ->
193+
fs.getPath(location).copyTo(output, true)
194+
}
193195
}
194196
}
195197

paperweight-userdev/src/main/kotlin/io/papermc/paperweight/userdev/internal/setup/UserdevSetupTask.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ abstract class UserdevSetupTask : JavaLauncherTask() {
125125
val copiedTime = measureNanoTime {
126126
result.mainOutput.copyTo(mappedServerJar.path.createParentDirectories(), overwrite = true)
127127
result.legacyOutput?.copyTo(legacyPaperclipResult.path.createParentDirectories(), overwrite = true)
128+
reobfMappings.path.createParentDirectories().deleteForcefully()
128129
setupService.get().extractReobfMappings(reobfMappings.path.createParentDirectories())
129130
}
130131
logger.lifecycle("Copied artifacts to project cache in ${formatNs(copiedTime)}")

0 commit comments

Comments
 (0)