From e7fabe3d765a4ad34144a90240686367da263615 Mon Sep 17 00:00:00 2001 From: Matyrobbrt Date: Sat, 3 Dec 2022 22:49:52 +0200 Subject: [PATCH 1/6] Implement extra maps --- Test/src/main/resources/mods.groovy | 6 + .../modsdotgroovy/AbstractConvertTask.groovy | 110 +++++++++++++++--- .../ConvertToQuiltJsonTask.groovy | 23 ++-- .../modsdotgroovy/ConvertToTomlTask.groovy | 25 ++-- .../modsdotgroovy/ModsDotGroovy.groovy | 12 +- 5 files changed, 116 insertions(+), 60 deletions(-) diff --git a/Test/src/main/resources/mods.groovy b/Test/src/main/resources/mods.groovy index 66fb18c5..570fb9e1 100644 --- a/Test/src/main/resources/mods.groovy +++ b/Test/src/main/resources/mods.groovy @@ -63,4 +63,10 @@ ModsDotGroovy.make { onQuilt { mixin = "no.mixin.json" } + + extraMaps = [ + 'packMcMeta': [ + 'hi': 'no' + ] + ] } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy index b8db829e..590b78c1 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy @@ -5,8 +5,12 @@ package io.github.groovymc.modsdotgroovy +import com.google.gson.GsonBuilder +import com.moandjiezana.toml.TomlWriter import groovy.transform.CompileDynamic import groovy.transform.CompileStatic +import groovy.transform.PackageScope +import groovy.transform.TupleConstructor import org.codehaus.groovy.control.CompilerConfiguration import org.gradle.api.DefaultTask import org.gradle.api.Project @@ -15,7 +19,6 @@ import org.gradle.api.artifacts.VersionCatalog import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.api.file.CopySpec import org.gradle.api.file.RegularFileProperty -import org.gradle.api.internal.catalog.VersionCatalogView import org.gradle.api.provider.ListProperty import org.gradle.api.provider.MapProperty import org.gradle.api.provider.Property @@ -23,13 +26,17 @@ import org.gradle.api.tasks.* import org.gradle.language.jvm.tasks.ProcessResources import java.nio.file.Files +import java.util.function.Function +@CompileStatic abstract class AbstractConvertTask extends DefaultTask { + protected final Map strategies = [:] + @InputFile abstract RegularFileProperty getInput() @Optional - @OutputFile - abstract RegularFileProperty getOutput() + @OutputFiles + abstract MapProperty getOutput() @Deprecated(forRemoval = true) @Optional @InputFile @@ -45,12 +52,29 @@ abstract class AbstractConvertTask extends DefaultTask { @Optional abstract ListProperty getCatalogs() - @Internal - protected abstract String getOutputName() protected abstract void setupPlatformSpecificArguments() - protected abstract String writeData(Map data) + + void register(String id, Strategy strategy) { + strategies[id] = strategy + } + + protected String getOutputName(String mapId) { + return strategies.get(mapId).outputName + } + + protected String getOutputDir(String mapId) { + return strategies.get(mapId).outputDir + } + + protected String writeData(String mapId, Map data) { + return strategies.get(mapId).writer.apply(data) + } + @Internal - protected abstract String getOutputDir() + protected Collection getKnownMapIds() { + return strategies.keySet() + } + @Internal protected abstract String getPlatform() @@ -64,7 +88,11 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { } AbstractConvertTask() { - output.convention(project.layout.buildDirectory.dir(name).map {it.file(getOutputName())}) + output.convention(project.objects.mapProperty(String, Object)) + registerStrategies() + knownMapIds.each { mapId -> + output.put(mapId, project.layout.buildDirectory.dir(name).map { it.file(getOutputName(mapId))} ) + } arguments.convention(project.objects.mapProperty(String, Object)) catalogs.convention(['libs']) project.afterEvaluate { @@ -137,6 +165,8 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { } } + protected void registerStrategies() {} + void arg(String name, Object arg) { arguments[name] = arg } @@ -148,11 +178,14 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { getProject().logger.warn("Input file {} for task '{}' could not be found!", input, getName()) return } - final data = from(input) - final outPath = getOutput().get().asFile.toPath() - if (outPath.parent !== null && !Files.exists(outPath.parent)) Files.createDirectories(outPath.parent) - Files.deleteIfExists(outPath) - Files.writeString(outPath, writeData(data)) + final maps = split(from(input)) + maps.each { mapId, data -> + output.getting(mapId).map { project.file(it) }.getOrNull()?.toPath()?.tap { outPath -> + if (outPath.parent !== null && !Files.exists(outPath.parent)) Files.createDirectories(outPath.parent) + Files.deleteIfExists(outPath) + Files.writeString(outPath, writeData(mapId, data)) + } + } } @SuppressWarnings('GrDeprecatedAPIUsage') @@ -181,14 +214,35 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { .extendsFrom(project.configurations.getByName(ModsDotGroovy.CONFIGURATION_NAME)) project.tasks.named(sourceSet.processResourcesTaskName, ProcessResources).configure { - it.exclude(fileName) - it.dependsOn(this) - it.from(output.get().asFile) { CopySpec spec -> - spec.into getOutputDir() + setupOnProcessResources(it, fileName) + } + } + + @CompileDynamic + @PackageScope void setupOnProcessResources(ProcessResources processResources, Object exclusion) { + //noinspection GroovyAssignabilityCheck + processResources.exclude(exclusion) + processResources.dependsOn(this) + output.get().each { String mapId, Object file -> + processResources.from(file) { CopySpec spec -> + spec.into(getOutputDir(mapId)) } } } + static Map split(Map map) { + final Map maps = [:] + final Map root = new HashMap(map) + maps['root'] = root + + ((Map)root.getOrDefault('extraMaps', [:])).each { id, val -> + maps[id as String] = val as Map + } + root.remove('extraMaps') + + return maps + } + @CompileStatic static class DelegateConfig extends CompilerConfiguration { DelegateConfig(CompilerConfiguration configuration) { @@ -197,4 +251,26 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { @Delegate final CompilerConfiguration configuration } + + @TupleConstructor + static final class Strategy { + final String outputName + final String outputDir + final Function writer + } + + protected static final Function TOML_WRITER = { Map data -> + final tomlWriter = new TomlWriter.Builder() + .indentValuesBy(2) + .indentTablesBy(4) + .build() + return tomlWriter.write(data) + } + + protected static final Function JSON_WRITER = { Map data -> + final gson = new GsonBuilder() + .setPrettyPrinting() + .create() + return gson.toJson(data) + } } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy index ac195df9..20cecce4 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy @@ -5,12 +5,16 @@ package io.github.groovymc.modsdotgroovy -import com.google.gson.GsonBuilder +import groovy.transform.CompileStatic +@CompileStatic abstract class ConvertToQuiltJsonTask extends AbstractConvertTask { + @Override - protected String getOutputName() { - return 'quilt.mod.json' + protected void registerStrategies() { + register('root', new Strategy( + 'quilt.mod.json', '', JSON_WRITER + )) } @Override @@ -35,19 +39,6 @@ abstract class ConvertToQuiltJsonTask extends AbstractConvertTask { } } - @Override - protected String writeData(Map data) { - final gson = new GsonBuilder() - .setPrettyPrinting() - .create() - return gson.toJson(data) - } - - @Override - protected String getOutputDir() { - return '' - } - @Override protected String getPlatform() { return 'quilt' diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy index e1dd69ce..b634f4ac 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy @@ -5,14 +5,19 @@ package io.github.groovymc.modsdotgroovy -import com.moandjiezana.toml.TomlWriter import groovy.transform.CompileStatic @CompileStatic abstract class ConvertToTomlTask extends AbstractConvertTask { + @Override - protected String getOutputName() { - return 'mods.toml' + protected void registerStrategies() { + register('root', new Strategy( + 'mods.toml', 'META-INF', TOML_WRITER + )) + register('packMcMeta', new Strategy( + 'pack.mcmeta', '', JSON_WRITER + )) } @Override @@ -34,20 +39,6 @@ abstract class ConvertToTomlTask extends AbstractConvertTask { } } - @Override - protected String writeData(Map data) { - final tomlWriter = new TomlWriter.Builder() - .indentValuesBy(2) - .indentTablesBy(4) - .build() - return tomlWriter.write(data) - } - - @Override - protected String getOutputDir() { - return 'META-INF' - } - @Override protected String getPlatform() { return 'forge' diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy index c34507fb..68e4041c 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy @@ -112,11 +112,7 @@ class ModsDotGroovy implements Plugin { it.getInput().set(modsGroovy.file) } project.tasks.named(modsGroovy.sourceSet.processResourcesTaskName, ProcessResources).configure { - exclude((FileTreeElement el) -> el.file == convertTask.input.get().asFile) - dependsOn(convertTask) - from(convertTask.output.get().asFile) { - into 'META-INF' - } + convertTask.setupOnProcessResources(it, (FileTreeElement el) -> el.file == convertTask.input.get().asFile) } return convertTask } @@ -126,11 +122,7 @@ class ModsDotGroovy implements Plugin { it.getInput().set(modsGroovy.file) } project.tasks.named(modsGroovy.sourceSet.processResourcesTaskName, ProcessResources).configure { - exclude((FileTreeElement el) -> el.file == convertTask.input.get().asFile) - dependsOn(convertTask) - from(convertTask.output.get().asFile) { - into '' - } + convertTask.setupOnProcessResources(it, (FileTreeElement el) -> el.file == convertTask.input.get().asFile) } return convertTask } From 02471cbc47bacf9ef7c1a2d841204aca2a36ecaf Mon Sep 17 00:00:00 2001 From: Matyrobbrt Date: Sat, 3 Dec 2022 23:37:04 +0200 Subject: [PATCH 2/6] `pack.mcmeta` extra map --- Test/build.gradle | 2 +- Test/src/main/resources/mods.groovy | 10 +++--- gradle.properties | 2 +- src/lib/groovy/ModsDotGroovy.groovy | 21 +++++++++++-- .../modsdotgroovy/PackMcMetaBuilder.groovy | 31 +++++++++++++++++++ .../modsdotgroovy/AbstractConvertTask.groovy | 4 +-- 6 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy diff --git a/Test/build.gradle b/Test/build.gradle index d1b323a9..034d670b 100644 --- a/Test/build.gradle +++ b/Test/build.gradle @@ -6,7 +6,7 @@ plugins { java.toolchain.languageVersion = JavaLanguageVersion.of(17) modsDotGroovy { - dslVersion = '1.1.3' + dslVersion = '1.2.0' platforms 'forge', 'quilt' } diff --git a/Test/src/main/resources/mods.groovy b/Test/src/main/resources/mods.groovy index 570fb9e1..0e4890f1 100644 --- a/Test/src/main/resources/mods.groovy +++ b/Test/src/main/resources/mods.groovy @@ -64,9 +64,9 @@ ModsDotGroovy.make { mixin = "no.mixin.json" } - extraMaps = [ - 'packMcMeta': [ - 'hi': 'no' - ] - ] + packMcMeta { + packFormat = 6 + forgeDataPackFormat = 4 + description = 'The resources of a lovely mod' + } } diff --git a/gradle.properties b/gradle.properties index 76d02f34..7fc4aa06 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ org.gradle.parallel=true org.gradle.caching=true version=1.1.2 -dsl_version=1.1.3 \ No newline at end of file +dsl_version=1.2.0 \ No newline at end of file diff --git a/src/lib/groovy/ModsDotGroovy.groovy b/src/lib/groovy/ModsDotGroovy.groovy index 57f5ef05..a8cd8e4c 100644 --- a/src/lib/groovy/ModsDotGroovy.groovy +++ b/src/lib/groovy/ModsDotGroovy.groovy @@ -11,6 +11,7 @@ import groovy.transform.stc.SimpleType import modsdotgroovy.ImmutableModInfo import modsdotgroovy.ModInfoBuilder import modsdotgroovy.ModsBuilder +import modsdotgroovy.PackMcMetaBuilder import modsdotgroovy.VersionRange import static groovy.lang.Closure.DELEGATE_FIRST @@ -21,9 +22,10 @@ class ModsDotGroovy { protected Map data protected ModsDotGroovy() { - this.data = switch (platform) { - case Platform.QUILT -> ["schema_version": 1, "quilt_loader": [:]] - case Platform.FORGE -> [:] + if (platform === Platform.QUILT) { + data = ['schema_version': 1, 'quilt_loader': [:]] + } else { + data = [:] } } @@ -240,10 +242,23 @@ class ModsDotGroovy { } } + void packMcMeta(@DelegatesTo(value = PackMcMetaBuilder, strategy = DELEGATE_FIRST) + @ClosureParams(value = SimpleType, options = 'modsdotgroovy.PackMcMetaBuilder') final Closure closure) { + final builder = new PackMcMetaBuilder() + closure.delegate = builder + closure.resolveStrategy = DELEGATE_FIRST + closure.call(builder) + extraMaps.put('packMcMeta', builder) + } + void sanitize() { sanitizeMap(data) } + private Map getExtraMaps() { + (Map)data.computeIfAbsent('extraMaps') { new HashMap<>() } + } + private static void sanitizeMap(Map data) { final copy = new LinkedHashMap(data) // cannot use Map.copyOf as we wish to remove null values copy.forEach { Object key, Object value -> diff --git a/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy b/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy new file mode 100644 index 00000000..690d25e0 --- /dev/null +++ b/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 GroovyMC + * SPDX-License-Identifier: MIT + */ + +package modsdotgroovy + +import groovy.transform.CompileStatic + +@CompileStatic +class PackMcMetaBuilder extends HashMap { + void setDescription(String description) { + packMap['description'] = description + } + + void setPackFormat(int packFormat) { + packMap['pack_format'] = packFormat + } + + void setForgeResourcePackFormat(int packFormat) { + packMap['forge:resource_pack_format'] = packFormat + } + + void setForgeDataPackFormat(int packFormat) { + packMap['forge:data_pack_format'] = packFormat + } + + private Map getPackMap() { + (Map)computeIfAbsent('pack') { new HashMap<>() } + } +} diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy index 590b78c1..4ed6b616 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy @@ -97,8 +97,8 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { catalogs.convention(['libs']) project.afterEvaluate { arguments.put('buildProperties', project.extensions.extraProperties.properties) - catalogs.get().each { - arg(it, versionCatalogToMap(getLibsExtension(project, it))) + catalogs.get().forEach { String id -> + arg(id, versionCatalogToMap(getLibsExtension(project, id))) } arg('version', project.version) arg('platform', getPlatform()) From 3d6fa518d34b2e506a4aaed795b95615e7c98e61 Mon Sep 17 00:00:00 2001 From: Matyrobbrt Date: Sun, 4 Dec 2022 01:57:40 +0200 Subject: [PATCH 3/6] Mixin configs --- Test/build.gradle | 2 + Test/src/main/resources/mods.groovy | 9 ++ build.gradle | 7 +- src/lib/groovy/ModsDotGroovy.groovy | 18 ++++ .../modsdotgroovy/MixinConfigBuilder.groovy | 82 +++++++++++++++++++ .../modsdotgroovy/AbstractConvertTask.groovy | 14 ++++ .../modsdotgroovy/ConvertToTomlTask.groovy | 3 + .../modsdotgroovy/ModsDotGroovy.groovy | 32 ++++++-- .../compat/MixinGradleSetup.groovy | 16 ++++ 9 files changed, 174 insertions(+), 9 deletions(-) create mode 100644 src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy create mode 100644 src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy diff --git a/Test/build.gradle b/Test/build.gradle index 034d670b..b8f52e26 100644 --- a/Test/build.gradle +++ b/Test/build.gradle @@ -5,6 +5,8 @@ plugins { java.toolchain.languageVersion = JavaLanguageVersion.of(17) +sourceSets.main.ext.refMapFile = 'mymod.refmap.json' + modsDotGroovy { dslVersion = '1.2.0' platforms 'forge', 'quilt' diff --git a/Test/src/main/resources/mods.groovy b/Test/src/main/resources/mods.groovy index 0e4890f1..98a22dd0 100644 --- a/Test/src/main/resources/mods.groovy +++ b/Test/src/main/resources/mods.groovy @@ -69,4 +69,13 @@ ModsDotGroovy.make { forgeDataPackFormat = 4 description = 'The resources of a lovely mod' } + + mixinConfig { + compatibilityLevel = 17 + packageName = 'com.matyrobbrt.test.mixins' + mixins { + common 'ServerPlayerMixin' + client 'client.MinecraftMixin' + } + } } diff --git a/build.gradle b/build.gradle index 8320eae2..8085a9fc 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,9 @@ archivesBaseName = 'modsdotgroovy' repositories { mavenCentral() + maven { + url = 'https://maven.minecraftforge.net' + } } sourceSets { @@ -34,8 +37,10 @@ license { dependencies { implementation gradleApi() - libCompileOnly "org.apache.groovy:groovy:4.0.4" + libCompileOnly 'org.apache.groovy:groovy:4.0.4' // TODO this needs to be updated to 3.0.10 implementation 'com.moandjiezana.toml:toml4j:0.7.2' + + compileOnly 'org.spongepowered:mixingradle:0.7.+' } pluginBundle { diff --git a/src/lib/groovy/ModsDotGroovy.groovy b/src/lib/groovy/ModsDotGroovy.groovy index a8cd8e4c..6fc9348d 100644 --- a/src/lib/groovy/ModsDotGroovy.groovy +++ b/src/lib/groovy/ModsDotGroovy.groovy @@ -5,10 +5,13 @@ //file:noinspection GrMethodMayBeStatic + +import groovy.transform.CompileDynamic import groovy.transform.CompileStatic import groovy.transform.stc.ClosureParams import groovy.transform.stc.SimpleType import modsdotgroovy.ImmutableModInfo +import modsdotgroovy.MixinConfigBuilder import modsdotgroovy.ModInfoBuilder import modsdotgroovy.ModsBuilder import modsdotgroovy.PackMcMetaBuilder @@ -30,11 +33,16 @@ class ModsDotGroovy { } protected static Platform platform + protected static String mixinRefMap protected static void setPlatform(String name) { platform = Platform.valueOf(name.toUpperCase(Locale.ROOT)) } + protected static void setMixinRefMap(String refMap) { + mixinRefMap = refMap.isBlank() ? null : refMap + } + void propertyMissing(String name, Object value) { put(name, value) } @@ -251,6 +259,16 @@ class ModsDotGroovy { extraMaps.put('packMcMeta', builder) } + void mixinConfig(@DelegatesTo(value = MixinConfigBuilder, strategy = DELEGATE_FIRST) + @ClosureParams(value = SimpleType, options = 'modsdotgroovy.MixinConfigBuilder') final Closure closure) { + final builder = new MixinConfigBuilder() + builder.setRefMap(mixinRefMap) + closure.delegate = builder + closure.resolveStrategy = DELEGATE_FIRST + closure.call(builder) + extraMaps.put('mixinConfig', builder) + } + void sanitize() { sanitizeMap(data) } diff --git a/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy b/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy new file mode 100644 index 00000000..352cd145 --- /dev/null +++ b/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy @@ -0,0 +1,82 @@ +package modsdotgroovy + +import groovy.transform.CompileStatic +import groovy.transform.stc.ClosureParams +import groovy.transform.stc.SimpleType + +import static groovy.lang.Closure.DELEGATE_FIRST + +@CompileStatic +class MixinConfigBuilder extends HashMap { + MixinConfigBuilder() { + setMinVersion('0.8') + injectors { + setDefaultRequire(1) + } + setRequired(true) + } + + void setRefMap(String refMap) { + put('refmap', refMap) + } + + void setRequired(boolean required) { + put('required', required) + } + + void setPackageName(String packageName) { + put('package', packageName) + } + + void setCompatibilityLevel(int javaVersion) { + put('compatibilityLevel', 'JAVA_' + javaVersion) + } + + void setMinVersion(String minVersion) { + put('minVersion', minVersion) + } + + void injectors(@DelegatesTo(value = Injectors, strategy = DELEGATE_FIRST) + @ClosureParams(value = SimpleType, options = 'modsdotgroovy.MixinConfigBuilder$Injectors') final Closure closure) { + final builder = new Injectors() + closure.delegate = builder + closure.resolveStrategy = DELEGATE_FIRST + closure.call(builder) + this['injectors'] = builder + } + + void mixins(@DelegatesTo(value = Mixins, strategy = DELEGATE_FIRST) + @ClosureParams(value = SimpleType, options = 'modsdotgroovy.MixinConfigBuilder$Mixins') final Closure closure) { + final builder = new Mixins() + closure.delegate = builder + closure.resolveStrategy = DELEGATE_FIRST + closure.call(builder) + this['mixins'] = builder.common + this['client'] = builder.client + this['server'] = builder.server + } + + static final class Injectors extends HashMap { + void setDefaultRequire(int defaultRequire) { + put('defaultRequire', defaultRequire) + } + } + + static final class Mixins { + final List common = [] + final List client = [] + final List server = [] + + void common(String... commonMixins) { + this.common.addAll(commonMixins) + } + + void client(String... clientMixins) { + this.client.addAll(clientMixins) + } + + void server(String... serverMixins) { + this.server.addAll(serverMixins) + } + } +} diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy index 4ed6b616..2fc2ff23 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy @@ -23,6 +23,7 @@ import org.gradle.api.provider.ListProperty import org.gradle.api.provider.MapProperty import org.gradle.api.provider.Property import org.gradle.api.tasks.* +import org.gradle.jvm.tasks.Jar import org.gradle.language.jvm.tasks.ProcessResources import java.nio.file.Files @@ -51,6 +52,9 @@ abstract class AbstractConvertTask extends DefaultTask { @Input @Optional abstract ListProperty getCatalogs() + @Input + @Optional + abstract Property getMixinConfigName() protected abstract void setupPlatformSpecificArguments() @@ -84,6 +88,9 @@ abstract class AbstractConvertTask extends DefaultTask { if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { ModsDotGroovy.setPlatform('${getPlatform()}') } +if (ModsDotGroovy.metaClass.respondsTo(null,'setMixinRefMap')) { + ModsDotGroovy.setMixinRefMap('${getArguments().get().get('mixinRefMap') ?: ''}') +} """ } @@ -226,6 +233,13 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { output.get().each { String mapId, Object file -> processResources.from(file) { CopySpec spec -> spec.into(getOutputDir(mapId)) + if (from == 'mixins.json') { + return mixinConfigName.getOrElse(project.tasks.named('jar') + .map { (Jar) it }.map { it.archiveBaseName.get() + '.' }.getOrElse('') + 'mixins.json') + } + return from + }) + } } } } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy index b634f4ac..b0d1aa1c 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy @@ -18,6 +18,9 @@ abstract class ConvertToTomlTask extends AbstractConvertTask { register('packMcMeta', new Strategy( 'pack.mcmeta', '', JSON_WRITER )) + register('mixinConfig', new Strategy( + 'mixins.json', '', JSON_WRITER + )) } @Override diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy index 68e4041c..68380b86 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy @@ -9,12 +9,15 @@ import groovy.transform.Canonical import groovy.transform.CompileStatic import groovy.transform.stc.ClosureParams import groovy.transform.stc.SimpleType +import io.github.groovymc.modsdotgroovy.compat.MixinGradleSetup import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.repositories.MavenArtifactRepository import org.gradle.api.file.FileTreeElement +import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.tasks.SourceSet +import org.gradle.internal.extensibility.DefaultExtraPropertiesExtension import org.gradle.language.jvm.tasks.ProcessResources import javax.annotation.Nullable @@ -54,14 +57,14 @@ class ModsDotGroovy implements Plugin { switch (platform) { case MDGExtension.Platform.FORGE: makeAndAppendForgeTask(modsGroovy, project).with { - arguments.set(ext.arguments.get()) - catalogs.set(ext.catalogs.get()) + arguments.putAll(ext.arguments.get()) + catalogs.addAll(ext.catalogs.get()) } break case MDGExtension.Platform.QUILT: makeAndAppendQuiltTask(modsGroovy, project).with { - arguments.set(ext.arguments.get()) - catalogs.set(ext.catalogs.get()) + arguments.putAll(ext.arguments.get()) + catalogs.addAll(ext.catalogs.get()) } } } else { @@ -90,20 +93,25 @@ class ModsDotGroovy implements Plugin { forge.each { makeAndAppendForgeTask(modsGroovy, it).with { dslConfiguration.set(commonConfiguration) - arguments.set(ext.arguments.get()) - catalogs.set(ext.catalogs.get()) + arguments.putAll(ext.arguments.get()) + catalogs.addAll(ext.catalogs.get()) } } quilt.each { makeAndAppendQuiltTask(modsGroovy, it).with{ dslConfiguration.set(commonConfiguration) - arguments.set(ext.arguments.get()) - catalogs.set(ext.catalogs.get()) + arguments.putAll(ext.arguments.get()) + catalogs.addAll(ext.catalogs.get()) } } } } } + + final mixinExt = project.extensions.findByName('mixin') + if (mixinExt !== null) { + MixinGradleSetup.setup(project, mixinExt) + } } } @@ -114,6 +122,14 @@ class ModsDotGroovy implements Plugin { project.tasks.named(modsGroovy.sourceSet.processResourcesTaskName, ProcessResources).configure { convertTask.setupOnProcessResources(it, (FileTreeElement el) -> el.file == convertTask.input.get().asFile) } + + final ext = modsGroovy.sourceSet.getExtensions().getByType(ExtraPropertiesExtension) + if (ext.has('refMapFile')) { + final String refMapName = ext.get('refMapFile') + convertTask.getArguments().put('mixinRefMap', refMapName) + println(convertTask.getArguments().get().get('mixinRefMap')) + convertTask.mixinConfigName.set(refMapName.substring(0, refMapName.indexOf('.refmap')) + '.mixins.json') + } return convertTask } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy new file mode 100644 index 00000000..9d2b4add --- /dev/null +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy @@ -0,0 +1,16 @@ +package io.github.groovymc.modsdotgroovy.compat + +import groovy.transform.CompileStatic +import org.gradle.api.Project +import org.spongepowered.asm.gradle.plugins.MixinExtension + +@CompileStatic +final class MixinGradleSetup { + static void setup(Project project, Object ext) { + setupInternal(project, (MixinExtension) ext) + } + + private static void setupInternal(Project project, MixinExtension extension) { + + } +} From dd0c37461d38b4bfffb3d8ea720f7ffc1a5d9e32 Mon Sep 17 00:00:00 2001 From: Matyrobbrt Date: Sun, 4 Dec 2022 02:00:31 +0200 Subject: [PATCH 4/6] Update AbstractConvertTask.groovy --- .../io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy index 2fc2ff23..e7f23ccb 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy @@ -233,6 +233,8 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setMixinRefMap')) { output.get().each { String mapId, Object file -> processResources.from(file) { CopySpec spec -> spec.into(getOutputDir(mapId)) + if (mapId == 'mixinConfig') { + spec.rename((String from) -> { if (from == 'mixins.json') { return mixinConfigName.getOrElse(project.tasks.named('jar') .map { (Jar) it }.map { it.archiveBaseName.get() + '.' }.getOrElse('') + 'mixins.json') From adb003b9dcf73503bc3ef915cc63f7ed83ed9672 Mon Sep 17 00:00:00 2001 From: matyrobbrt <65940752+Matyrobbrt@users.noreply.github.com> Date: Sun, 4 Dec 2022 02:19:54 +0200 Subject: [PATCH 5/6] Update ModsDotGroovy.groovy --- .../groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy index 68380b86..1b8b1dcf 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy @@ -127,7 +127,6 @@ class ModsDotGroovy implements Plugin { if (ext.has('refMapFile')) { final String refMapName = ext.get('refMapFile') convertTask.getArguments().put('mixinRefMap', refMapName) - println(convertTask.getArguments().get().get('mixinRefMap')) convertTask.mixinConfigName.set(refMapName.substring(0, refMapName.indexOf('.refmap')) + '.mixins.json') } return convertTask From bc1dcb9b3e4d25f9bedfde2f02c9a634284781e5 Mon Sep 17 00:00:00 2001 From: Matyrobbrt Date: Sun, 4 Dec 2022 15:42:59 +0200 Subject: [PATCH 6/6] Mixins --- Test/build.gradle | 12 +++++- Test/src/main/resources/mods.groovy | 4 +- build.gradle | 5 --- src/lib/groovy/ModsDotGroovy.groovy | 37 +++++++++++++++---- .../groovy/modsdotgroovy/MapBackend.groovy | 19 ++++++++++ .../modsdotgroovy/MixinConfigBuilder.groovy | 11 ++++-- .../modsdotgroovy/PackMcMetaBuilder.groovy | 4 +- .../modsdotgroovy/AbstractConvertTask.groovy | 17 ++++++--- .../ConvertToQuiltJsonTask.groovy | 6 +++ .../modsdotgroovy/ConvertToTomlTask.groovy | 9 +++-- .../modsdotgroovy/MDGExtension.groovy | 11 ++++++ .../modsdotgroovy/ModsDotGroovy.groovy | 30 +++++++++------ .../compat/MixinGradleSetup.groovy | 16 -------- 13 files changed, 122 insertions(+), 59 deletions(-) create mode 100644 src/lib/groovy/modsdotgroovy/MapBackend.groovy delete mode 100644 src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy diff --git a/Test/build.gradle b/Test/build.gradle index b8f52e26..0702066d 100644 --- a/Test/build.gradle +++ b/Test/build.gradle @@ -5,13 +5,21 @@ plugins { java.toolchain.languageVersion = JavaLanguageVersion.of(17) -sourceSets.main.ext.refMapFile = 'mymod.refmap.json' - modsDotGroovy { dslVersion = '1.2.0' platforms 'forge', 'quilt' } +tasks.configureEach { + if (it.name == 'modsDotGroovyToToml') { + it.mixinConfigs.put('mymod.mixins.json', 'mymod.refmap.json') + } +} + +afterEvaluate { + println(sourceSets.main.ext.refMapFile) +} + repositories { mavenLocal() } \ No newline at end of file diff --git a/Test/src/main/resources/mods.groovy b/Test/src/main/resources/mods.groovy index e43243f1..e0ec37a4 100644 --- a/Test/src/main/resources/mods.groovy +++ b/Test/src/main/resources/mods.groovy @@ -9,7 +9,7 @@ ModsDotGroovy.make { version = '1.190' contributors = [ - Owner: 'GroovyMC', + Owner: ['GroovyMC'], Author: ['Matyrobbrt', 'Paint_Ninja', 'lukebemish'] ] @@ -69,7 +69,7 @@ ModsDotGroovy.make { } onQuilt { - mixin = "no.mixin.json" + mixin = 'mymod.mixins.json' } packMcMeta { diff --git a/build.gradle b/build.gradle index e3e4779d..8a443a92 100644 --- a/build.gradle +++ b/build.gradle @@ -22,9 +22,6 @@ archivesBaseName = 'modsdotgroovy' repositories { mavenCentral() - maven { - url = 'https://maven.minecraftforge.net' - } } sourceSets { @@ -40,8 +37,6 @@ dependencies { libCompileOnly 'org.apache.groovy:groovy:4.0.4' libCompileOnly 'org.apache.groovy:groovy-json:4.0.4' implementation 'com.moandjiezana.toml:toml4j:0.7.2' - - compileOnly 'org.spongepowered:mixingradle:0.7.+' } pluginBundle { diff --git a/src/lib/groovy/ModsDotGroovy.groovy b/src/lib/groovy/ModsDotGroovy.groovy index 0e31d0e3..b0fec5dc 100644 --- a/src/lib/groovy/ModsDotGroovy.groovy +++ b/src/lib/groovy/ModsDotGroovy.groovy @@ -5,7 +5,6 @@ //file:noinspection GrMethodMayBeStatic -import groovy.transform.CompileDynamic import groovy.json.JsonParserType import groovy.json.JsonSlurper import groovy.transform.CompileStatic @@ -40,14 +39,16 @@ class ModsDotGroovy { } protected static Platform platform - protected static String mixinRefMap + protected static final Map mixinRefMaps = [:] protected static void setPlatform(String name) { platform = Platform.valueOf(name.toUpperCase(Locale.ROOT)) } - protected static void setMixinRefMap(String refMap) { - mixinRefMap = refMap.isBlank() ? null : refMap + protected static void setMixinRefMap(String configName, String refMap) { + if (!refMap.isBlank()) { + mixinRefMaps[configName] = refMap + } } void propertyMissing(String name, Object value) { @@ -257,17 +258,37 @@ class ModsDotGroovy { closure.delegate = builder closure.resolveStrategy = DELEGATE_FIRST closure.call(builder) - extraMaps.put('packMcMeta', builder) + extraMaps.put('packMcMeta', builder as Map) } - void mixinConfig(@DelegatesTo(value = MixinConfigBuilder, strategy = DELEGATE_FIRST) + void mixinConfig(String configId, @DelegatesTo(value = MixinConfigBuilder, strategy = DELEGATE_FIRST) @ClosureParams(value = SimpleType, options = 'modsdotgroovy.MixinConfigBuilder') final Closure closure) { final builder = new MixinConfigBuilder() - builder.setRefMap(mixinRefMap) + builder.setRefMap(mixinRefMaps[configId]) closure.delegate = builder closure.resolveStrategy = DELEGATE_FIRST closure.call(builder) - extraMaps.put('mixinConfig', builder) + extraMaps.put('mixinConfig_' + configId, builder as Map) + + onQuilt { + final old = data['mixin'] + if (old === null) { + data['mixin'] = [configId] + } else if (old instanceof List) { + old.add(configId) + } else { + data['mixin'] = [configId, old] + } + } + } + + void mixinConfig(@DelegatesTo(value = MixinConfigBuilder, strategy = DELEGATE_FIRST) + @ClosureParams(value = SimpleType, options = 'modsdotgroovy.MixinConfigBuilder') final Closure closure) { + mixinRefMaps.forEach { cfg, refmap -> + if (!extraMaps.containsKey('mixinConfig_' + cfg)) { + mixinConfig(cfg, closure) + } + } } private static String combineAsString(List parts) { diff --git a/src/lib/groovy/modsdotgroovy/MapBackend.groovy b/src/lib/groovy/modsdotgroovy/MapBackend.groovy new file mode 100644 index 00000000..5dde5500 --- /dev/null +++ b/src/lib/groovy/modsdotgroovy/MapBackend.groovy @@ -0,0 +1,19 @@ +package modsdotgroovy + +import groovy.transform.CompileStatic + +@CompileStatic +class MapBackend { + protected final Map data = [:] + void put(String key, Object value) { + data[key] = value + } + void propertyMissing(String name, Object value) { + data[name] = value + } + + T asType(Class type) { + if (type == Map.class) return (T)data + return type.cast(this) + } +} diff --git a/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy b/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy index 352cd145..0f45c769 100644 --- a/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy +++ b/src/lib/groovy/modsdotgroovy/MixinConfigBuilder.groovy @@ -7,7 +7,8 @@ import groovy.transform.stc.SimpleType import static groovy.lang.Closure.DELEGATE_FIRST @CompileStatic -class MixinConfigBuilder extends HashMap { +class MixinConfigBuilder extends MapBackend { + MixinConfigBuilder() { setMinVersion('0.8') injectors { @@ -16,6 +17,10 @@ class MixinConfigBuilder extends HashMap { setRequired(true) } + /** + * Sets the refmap + * @param refMap refmap + */ void setRefMap(String refMap) { put('refmap', refMap) } @@ -42,7 +47,7 @@ class MixinConfigBuilder extends HashMap { closure.delegate = builder closure.resolveStrategy = DELEGATE_FIRST closure.call(builder) - this['injectors'] = builder + put('injectors', builder.data) } void mixins(@DelegatesTo(value = Mixins, strategy = DELEGATE_FIRST) @@ -56,7 +61,7 @@ class MixinConfigBuilder extends HashMap { this['server'] = builder.server } - static final class Injectors extends HashMap { + static final class Injectors extends MapBackend { void setDefaultRequire(int defaultRequire) { put('defaultRequire', defaultRequire) } diff --git a/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy b/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy index 690d25e0..15b10445 100644 --- a/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy +++ b/src/lib/groovy/modsdotgroovy/PackMcMetaBuilder.groovy @@ -8,7 +8,7 @@ package modsdotgroovy import groovy.transform.CompileStatic @CompileStatic -class PackMcMetaBuilder extends HashMap { +class PackMcMetaBuilder extends MapBackend { void setDescription(String description) { packMap['description'] = description } @@ -26,6 +26,6 @@ class PackMcMetaBuilder extends HashMap { } private Map getPackMap() { - (Map)computeIfAbsent('pack') { new HashMap<>() } + (Map)data.computeIfAbsent('pack') { new HashMap<>() } } } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy index e7f23ccb..e97dd067 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/AbstractConvertTask.groovy @@ -54,7 +54,7 @@ abstract class AbstractConvertTask extends DefaultTask { abstract ListProperty getCatalogs() @Input @Optional - abstract Property getMixinConfigName() + abstract MapProperty getMixinConfigs() protected abstract void setupPlatformSpecificArguments() @@ -89,20 +89,21 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setPlatform')) { ModsDotGroovy.setPlatform('${getPlatform()}') } if (ModsDotGroovy.metaClass.respondsTo(null,'setMixinRefMap')) { - ModsDotGroovy.setMixinRefMap('${getArguments().get().get('mixinRefMap') ?: ''}') + ${mixinConfigs.get().entrySet().stream().map { Map.Entry it -> + "ModsDotGroovy.setMixinRefMap('$it.key', '$it.value')" + }.iterator().join('\n')} } """ } AbstractConvertTask() { + mixinConfigs.convention([:]) output.convention(project.objects.mapProperty(String, Object)) - registerStrategies() - knownMapIds.each { mapId -> - output.put(mapId, project.layout.buildDirectory.dir(name).map { it.file(getOutputName(mapId))} ) - } arguments.convention(project.objects.mapProperty(String, Object)) catalogs.convention(['libs']) project.afterEvaluate { + registerStrategies() + arguments.put('buildProperties', project.extensions.extraProperties.properties) catalogs.get().forEach { String id -> arg(id, versionCatalogToMap(getLibsExtension(project, id))) @@ -111,6 +112,10 @@ if (ModsDotGroovy.metaClass.respondsTo(null,'setMixinRefMap')) { arg('platform', getPlatform()) arg('group', project.group) setupPlatformSpecificArguments() + + knownMapIds.each { mapId -> + output.put(mapId, project.layout.buildDirectory.dir(name).map { it.file(getOutputName(mapId))} ) + } } } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy index 20cecce4..829bee1d 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToQuiltJsonTask.groovy @@ -15,6 +15,12 @@ abstract class ConvertToQuiltJsonTask extends AbstractConvertTask { register('root', new Strategy( 'quilt.mod.json', '', JSON_WRITER )) + + mixinConfigs.get().forEach { String config, String refMap -> + register("mixinConfig_$config", new Strategy( + config, '', JSON_WRITER + )) + } } @Override diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy index b0d1aa1c..00fcb949 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ConvertToTomlTask.groovy @@ -18,9 +18,12 @@ abstract class ConvertToTomlTask extends AbstractConvertTask { register('packMcMeta', new Strategy( 'pack.mcmeta', '', JSON_WRITER )) - register('mixinConfig', new Strategy( - 'mixins.json', '', JSON_WRITER - )) + + mixinConfigs.get().forEach { String config, String refMap -> + register("mixinConfig_$config", new Strategy( + config, '', JSON_WRITER + )) + } } @Override diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/MDGExtension.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/MDGExtension.groovy index 417a5a47..fc01ed4c 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/MDGExtension.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/MDGExtension.groovy @@ -24,6 +24,7 @@ abstract class MDGExtension { abstract Property getMultiloader() abstract MapProperty getArguments() abstract ListProperty getCatalogs() + abstract MapProperty> getMixins() protected final Project project @@ -33,6 +34,7 @@ abstract class MDGExtension { platforms.set([Platform.FORGE]) arguments.set([:]) catalogs.set(['libs']) + mixins.convention([:]) } String mdgDsl(String version = null) { @@ -61,6 +63,15 @@ abstract class MDGExtension { multiloader.set(conf) } + void mixinConfig(String config, String refMap) { + final List cfgs = ((List)mixins.get().get(refMap)) ?: new ArrayList<>().tap { mixins.put(refMap, it) } + cfgs.add(config) + } + + void mixinConfig(String id) { + mixinConfig(id + '.mixins.json', id + '.refmap.json') + } + enum Platform { QUILT { @Override diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy index 1b8b1dcf..ef9cad6a 100644 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy +++ b/src/main/groovy/io/github/groovymc/modsdotgroovy/ModsDotGroovy.groovy @@ -9,7 +9,6 @@ import groovy.transform.Canonical import groovy.transform.CompileStatic import groovy.transform.stc.ClosureParams import groovy.transform.stc.SimpleType -import io.github.groovymc.modsdotgroovy.compat.MixinGradleSetup import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.repositories.MavenArtifactRepository @@ -17,7 +16,6 @@ import org.gradle.api.file.FileTreeElement import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.tasks.SourceSet -import org.gradle.internal.extensibility.DefaultExtraPropertiesExtension import org.gradle.language.jvm.tasks.ProcessResources import javax.annotation.Nullable @@ -40,6 +38,14 @@ class ModsDotGroovy implements Plugin { configuration.dependencies.add(project.dependencies.create(ext.mdgDsl())) + ext.mixins.get().forEach { refMap, ids -> + project.tasks.withType(AbstractConvertTask).configureEach { task -> + ids.forEach { + task.mixinConfigs.put(it, refMap) + } + } + } + if (ext.automaticConfiguration.get()) { final List platforms = ext.platforms.get() for (MDGExtension.Platform platform : platforms.unique(false)) { @@ -107,11 +113,6 @@ class ModsDotGroovy implements Plugin { } } } - - final mixinExt = project.extensions.findByName('mixin') - if (mixinExt !== null) { - MixinGradleSetup.setup(project, mixinExt) - } } } @@ -119,16 +120,21 @@ class ModsDotGroovy implements Plugin { final convertTask = project.getTasks().create('modsDotGroovyToToml', ConvertToTomlTask) { it.getInput().set(modsGroovy.file) } - project.tasks.named(modsGroovy.sourceSet.processResourcesTaskName, ProcessResources).configure { - convertTask.setupOnProcessResources(it, (FileTreeElement el) -> el.file == convertTask.input.get().asFile) - } final ext = modsGroovy.sourceSet.getExtensions().getByType(ExtraPropertiesExtension) if (ext.has('refMapFile')) { final String refMapName = ext.get('refMapFile') - convertTask.getArguments().put('mixinRefMap', refMapName) - convertTask.mixinConfigName.set(refMapName.substring(0, refMapName.indexOf('.refmap')) + '.mixins.json') + convertTask.mixinConfigs.put(refMapName.substring(0, refMapName.indexOf('.refmap')) + '.mixins.json', refMapName) + } else { + convertTask.mixinConfigs.get().entrySet().find()?.tap { + ext.set('refMapFile', it.value) + } } + + project.tasks.named(modsGroovy.sourceSet.processResourcesTaskName, ProcessResources).configure { + convertTask.setupOnProcessResources(it, (FileTreeElement el) -> el.file == convertTask.input.get().asFile) + } + return convertTask } diff --git a/src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy b/src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy deleted file mode 100644 index 9d2b4add..00000000 --- a/src/main/groovy/io/github/groovymc/modsdotgroovy/compat/MixinGradleSetup.groovy +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.groovymc.modsdotgroovy.compat - -import groovy.transform.CompileStatic -import org.gradle.api.Project -import org.spongepowered.asm.gradle.plugins.MixinExtension - -@CompileStatic -final class MixinGradleSetup { - static void setup(Project project, Object ext) { - setupInternal(project, (MixinExtension) ext) - } - - private static void setupInternal(Project project, MixinExtension extension) { - - } -}