From d7c6a7a4cf564c872fce64bce7ef2d212a4365a0 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 25 Jan 2022 09:16:33 +0800 Subject: [PATCH] Primitive untested support for Loom 0.11.0 Signed-off-by: shedaniel --- build.gradle | 11 ++- gradle.properties | 1 + .../plugin/loom/LoomInterface011.kt | 73 +++++++++++++++++++ .../plugin/ArchitecturyPluginExtension.kt | 3 + 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt diff --git a/build.gradle b/build.gradle index 4c09496..b8f5992 100644 --- a/build.gradle +++ b/build.gradle @@ -68,6 +68,14 @@ sourceSets { runtimeClasspath += main.output } } + loom011 { + java { + compileClasspath += main.compileClasspath + runtimeClasspath += main.runtimeClasspath + compileClasspath += main.output + runtimeClasspath += main.output + } + } } dependencies { @@ -80,6 +88,7 @@ dependencies { loom09CompileOnly "dev.architectury:architectury-loom:$loom_version_09" loom010LegacyCompileOnly "dev.architectury:architectury-loom:$loom_version_010Legacy" loom010CompileOnly "dev.architectury:architectury-loom:$loom_version_010" + loom011CompileOnly "dev.architectury:architectury-loom:$loom_version_011" implementation "dev.architectury:tiny-remapper:1.1.0" implementation "com.google.code.gson:gson:2.8.5" } @@ -96,7 +105,7 @@ jar { attributes 'Implementation-Version': project.version } - from sourceSets.loom06.output + sourceSets.loom09.output + sourceSets.loom010Legacy.output + sourceSets.loom010.output + from sourceSets.loom06.output + sourceSets.loom09.output + sourceSets.loom010Legacy.output + sourceSets.loom010.output + sourceSets.loom011.output } gradlePlugin { diff --git a/gradle.properties b/gradle.properties index bbd354b..f33f732 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,6 @@ loom_version_06=0.6.96 loom_version_09=0.9.0.158 loom_version_010Legacy=0.10.0.171 loom_version_010=0.10.0.188 +loom_version_011=0.11.0.217 transformer_version=5.1.59 base_version=3.4 \ No newline at end of file diff --git a/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt b/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt new file mode 100644 index 0000000..16cec2a --- /dev/null +++ b/src/loom011/kotlin/dev/architectury/plugin/loom/LoomInterface011.kt @@ -0,0 +1,73 @@ +package dev.architectury.plugin.loom + +import net.fabricmc.loom.LoomGradleExtension +import net.fabricmc.loom.configuration.ide.RunConfig +import net.fabricmc.loom.task.RemapJarTask +import net.fabricmc.loom.task.service.MixinMappingsService +import net.fabricmc.loom.util.service.SharedServiceManager +import org.gradle.api.Project +import org.gradle.api.file.RegularFile +import org.gradle.api.provider.Provider +import org.gradle.jvm.tasks.Jar +import java.io.File +import java.nio.file.Path +import java.util.function.Consumer + +class LoomInterface011(private val project: Project) : LoomInterface { + private val extension: LoomGradleExtension + get() = LoomGradleExtension.get(project) + + override val allMixinMappings: Collection + get() = extractMixinMappings(getMixinService(SharedServiceManager.get(project))) + + private fun getMixinService(serviceManager: SharedServiceManager): MixinMappingsService { + return MixinMappingsService::class.java.getDeclaredMethod("getService", SharedServiceManager::class.java).also { + it.isAccessible = true + }.invoke(null, serviceManager) as MixinMappingsService + } + + private fun extractMixinMappings(service: MixinMappingsService): Collection { + return MixinMappingsService::class.java.getDeclaredField("mixinMappings").also { + it.isAccessible = true + }.get(service) as HashSet + } + + override val tinyMappingsWithSrg: Path + get() = extension.mappingsProvider.tinyMappingsWithSrg + + override val refmapName: String + get() = extension.mixin.defaultRefmapName.get() + + override var generateSrgTiny: Boolean + get() = extension.shouldGenerateSrgTiny() + set(value) { + extension.setGenerateSrgTiny(value) + } + + override fun settingsPostEdit(action: (config: LoomInterface.LoomRunConfig) -> Unit) { + extension.settingsPostEdit.add(Consumer { c -> action(LoomRunConfigImpl(c)) }) + } + + override fun setIdeConfigGenerated() { + extension.runConfigs.forEach { it.isIdeConfigGenerated = true } + extension.runConfigs.whenObjectAdded { it.isIdeConfigGenerated = true } + extension.addTaskBeforeRun("\$PROJECT_DIR\$/${project.name}:classes") + } + + override fun setRemapJarInput(task: Jar, archiveFile: Provider) { + task as RemapJarTask + task.input.set(archiveFile) + } + + class LoomRunConfigImpl(private val config: RunConfig) : LoomInterface.LoomRunConfig { + override var mainClass: String + get() = config.mainClass + set(value) { + config.mainClass = value + } + + override fun addVmArg(vmArg: String) { + config.vmArgs.add(vmArg) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt b/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt index ba76912..bdaff9d 100644 --- a/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt +++ b/src/main/kotlin/dev/architectury/plugin/ArchitecturyPluginExtension.kt @@ -59,6 +59,9 @@ open class ArchitectPluginExtension(val project: Project) { private val loom: LoomInterface by lazy { useIfFound( + "net.fabricmc.loom.util.service.SharedServiceManager", + "dev.architectury.plugin.loom.LoomInterface011" // 0.11.0 + ) ?: useIfFound( "net.fabricmc.loom.util.ZipUtils", "dev.architectury.plugin.loom.LoomInterface010" // >0.10.0.188 ) ?: useIfFound(