From ae5bc4df15748155adddb1b654a7cac02ef6a07f Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:44:02 +0300 Subject: [PATCH 01/10] Separate Forge runtime into its own subproject --- .gitignore | 3 +- build.gradle | 39 +-------- forge-runtime/.gitignore | 6 ++ forge-runtime/build.gradle | 82 +++++++++++++++++++ .../mcp/MethodsReturnNonnullByDefault.java | 3 +- .../java/net/fabricmc/loom/inject/Pair.java | 0 .../loom/inject/YarnNamingService.java | 0 ...ForgeLoomMixinRemapperInjectorService.java | 0 .../mixin/MixinIntermediaryDevRemapper.java | 0 ...w.mods.modlauncher.api.INameMappingService | 0 ...ods.modlauncher.api.ITransformationService | 0 settings.gradle | 3 +- .../providers/LaunchProvider.java | 3 +- .../forge/MinecraftPatchedProvider.java | 19 ----- .../net/fabricmc/loom/util/Constants.java | 2 + 15 files changed, 101 insertions(+), 59 deletions(-) create mode 100644 forge-runtime/.gitignore create mode 100644 forge-runtime/build.gradle rename {src/forgeInject => forge-runtime/src/main}/java/mcp/MethodsReturnNonnullByDefault.java (90%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/Pair.java (100%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/YarnNamingService.java (100%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java (100%) rename {src/forgeInject => forge-runtime/src/main}/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java (100%) rename {src/forgeInject => forge-runtime/src/main}/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService (100%) rename {src/forgeInject => forge-runtime/src/main}/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService (100%) diff --git a/.gitignore b/.gitignore index 4354f60f..6a36faa2 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ !/Jenkinsfile !/checkstyle.xml !/codenarc.groovy -!/bootstrap \ No newline at end of file +!/bootstrap +!/forge-runtime diff --git a/build.gradle b/build.gradle index 087850a4..42442548 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,7 @@ plugins { id 'codenarc' id "org.cadixdev.licenser" version "0.5.0" id 'com.github.johnrengelman.shadow' version '7.0.0' + id 'net.kyori.blossom' version '1.3.0' } sourceCompatibility = 16 @@ -40,20 +41,6 @@ if (!isSnapshot) { logger.lifecycle(":building plugin v${version}") -configurations { - forgeInjectShadow - forgeInjectCompileClasspath.extendsFrom(forgeInjectShadow) - forgeInjectRuntimeClasspath.extendsFrom(forgeInjectShadow) -} - -sourceSets { - forgeInject -} - -tasks.compileForgeInjectJava { - options.release = 8 -} - repositories { mavenCentral() maven { url "https://maven.fabricmc.net/" } @@ -159,14 +146,6 @@ dependencies { implementation ('de.oceanlabs.mcp:mcinjector:3.8.0') implementation ('com.opencsv:opencsv:5.4') - // Forge injection - forgeInjectShadow ('net.fabricmc:tiny-mappings-parser:0.2.2.14') - forgeInjectImplementation ('cpw.mods:modlauncher:6.1.3') - forgeInjectImplementation ('org.spongepowered:mixin:0.8.2') - forgeInjectImplementation ('com.google.code.gson:gson:2.8.6') - forgeInjectImplementation ('com.google.guava:guava:21.0') - forgeInjectImplementation ('org.apache.logging.log4j:log4j-api:2.11.2') - // Testing testImplementation(gradleTestKit()) testImplementation('org.spockframework:spock-core:2.0-groovy-3.0') { @@ -177,13 +156,8 @@ dependencies { compileOnly 'org.jetbrains:annotations:20.1.0' } -task forgeInjectJar(type: ShadowJar, dependsOn: [compileForgeInjectJava, processForgeInjectResources]) { - relocate 'net.fabricmc.mapping', 'net.fabricmc.loom.mapping' - relocate 'net.fabricmc.mappings', 'net.fabricmc.loom.mappings' - configurations = [project.configurations.forgeInjectShadow] - classifier = 'forgeinject' - from compileForgeInjectJava.outputs - from processForgeInjectResources.outputs +blossom { + replaceToken '$LOOM_VERSION', version } jar { @@ -191,13 +165,7 @@ jar { } task mainJar(type: Jar, dependsOn: jar) { - dependsOn forgeInjectJar - from zipTree(jar.archiveFile) - from(forgeInjectJar.outputs) { - into "inject" - rename { "injection.jar" } - } manifest { attributes 'Implementation-Version': project.version + ' Build(' + buildNum + ')' @@ -225,7 +193,6 @@ license { exclude '**/loom/util/DownloadUtil.java' exclude '**/projects' exclude '**/loom/util/FileSystemUtil.java' - exclude '**/loom/inject/mixin/MixinIntermediaryDevRemapper.java' } checkstyle { diff --git a/forge-runtime/.gitignore b/forge-runtime/.gitignore new file mode 100644 index 00000000..31ecb657 --- /dev/null +++ b/forge-runtime/.gitignore @@ -0,0 +1,6 @@ +# Ignore everything +/* + +!/src +!/build.gradle +!/.gitignore diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle new file mode 100644 index 00000000..34303aea --- /dev/null +++ b/forge-runtime/build.gradle @@ -0,0 +1,82 @@ +plugins { + id 'java' + id 'maven-publish' + id 'com.github.johnrengelman.shadow' + id 'org.cadixdev.licenser' +} + +group = rootProject.group +archivesBaseName = 'architectury-loom-forge-runtime' +version = rootProject.version + +sourceCompatibility = 8 +targetCompatibility = 8 + +configurations { + include + compileOnly.extendsFrom include +} + +tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + it.options.release = 8 +} + +repositories { + mavenCentral() + maven { url "https://maven.fabricmc.net/" } + maven { + url "https://maven.minecraftforge.net/" + content { + excludeGroupByRegex "org\\.eclipse\\.?.*" + } + } +} + +dependencies { + include ('net.fabricmc:tiny-mappings-parser:0.2.2.14') + compileOnly ('cpw.mods:modlauncher:6.1.3') + compileOnly ('org.spongepowered:mixin:0.8.2') + compileOnly ('com.google.code.gson:gson:2.8.6') + compileOnly ('com.google.guava:guava:21.0') + compileOnly ('org.apache.logging.log4j:log4j-api:2.11.2') +} + +jar { + archiveClassifier = "slim" +} + +shadowJar { + archiveClassifier = "" + configurations = [project.configurations.include] + relocate "net.fabricmc.mapping", "dev.architectury.loom.forgeruntime.shadow.mapping" + relocate "net.fabricmc.mappings", "dev.architectury.loom.forgeruntime.shadow.mappings" +} + +assemble.dependsOn shadowJar + +license { + header rootProject.file("HEADER") + include "**/*.java" + exclude '**/loom/inject/mixin/MixinIntermediaryDevRemapper.java' +} + +publishing { + publications { + maven(MavenPublication) { + from components.java + } + } + + repositories { + if (System.getenv("MAVEN_PASS") != null) { + maven { + url = "https://deploy.shedaniel.me/" + credentials { + username = "shedaniel" + password = System.getenv("MAVEN_PASS") + } + } + } + } +} diff --git a/src/forgeInject/java/mcp/MethodsReturnNonnullByDefault.java b/forge-runtime/src/main/java/mcp/MethodsReturnNonnullByDefault.java similarity index 90% rename from src/forgeInject/java/mcp/MethodsReturnNonnullByDefault.java rename to forge-runtime/src/main/java/mcp/MethodsReturnNonnullByDefault.java index 8fbac050..8ec54e47 100644 --- a/src/forgeInject/java/mcp/MethodsReturnNonnullByDefault.java +++ b/forge-runtime/src/main/java/mcp/MethodsReturnNonnullByDefault.java @@ -25,7 +25,8 @@ package mcp; /** - * A dummy class, required for some Forge classes to load. + * A dummy class, required for some Forge classes to load + * because {@code MethodsReturnNonnullByDefault} in MCP has runtime retention. * * @deprecated Don't use this in your mods. JetBrains annotations are there for you. */ diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/Pair.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/Pair.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/YarnNamingService.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/YarnNamingService.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java diff --git a/src/forgeInject/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java similarity index 100% rename from src/forgeInject/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java rename to forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java diff --git a/src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService similarity index 100% rename from src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService rename to forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService diff --git a/src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService similarity index 100% rename from src/forgeInject/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService rename to forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService diff --git a/settings.gradle b/settings.gradle index 26763f4c..0b542936 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = "architectury-loom" -include "bootstrap" \ No newline at end of file +include "bootstrap" +include "forge-runtime" diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java index 9aeb74d1..4cf96b94 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java @@ -136,7 +136,8 @@ public class LaunchProvider extends DependencyProvider { annotationDependency = addDependency(Constants.Dependencies.JETBRAINS_ANNOTATIONS + Constants.Dependencies.Versions.JETBRAINS_ANNOTATIONS, JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME); if (getExtension().isForge()) { - addDependency(Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS, "compileOnly"); + addDependency(Constants.Dependencies.FORGE_RUNTIME + Constants.Dependencies.Versions.FORGE_RUNTIME, JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME); + addDependency(Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS, JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME); } postPopulationScheduler.accept(this::writeRemapClassPath); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java index 108450a6..995cb208 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java @@ -339,25 +339,6 @@ public class MinecraftPatchedProvider extends DependencyProvider { copyAll(getExtension().getForgeUniversalProvider().getForge(), environment.patchedSrgJar.apply(this)); copyUserdevFiles(getExtension().getForgeUserdevProvider().getUserdevJar(), environment.patchedSrgJar.apply(this)); }); - - logger.lifecycle(":injecting loom classes into minecraft"); - File injection = File.createTempFile("loom-injection", ".jar"); - - try (InputStream in = MinecraftProvider.class.getResourceAsStream("/inject/injection.jar")) { - FileUtils.copyInputStreamToFile(in, injection); - } - - for (Environment environment : Environment.values()) { - String side = environment.side(); - File target = environment.patchedSrgJar.apply(this); - walkFileSystems(injection, target, it -> { - if (it.getFileName().toString().equals("MANIFEST.MF")) { - return false; - } - - return getExtension().useFabricMixin || !it.getFileName().toString().endsWith("cpw.mods.modlauncher.api.ITransformationService"); - }, this::copyReplacing); - } } private void accessTransformForge(Logger logger) throws Exception { diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index f4d12355..6f6f4f45 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -91,6 +91,7 @@ public class Constants { public static final String TERMINAL_CONSOLE_APPENDER = "net.minecrell:terminalconsoleappender:"; public static final String JETBRAINS_ANNOTATIONS = "org.jetbrains:annotations:"; public static final String JAVAX_ANNOTATIONS = "com.google.code.findbugs:jsr305:"; // I hate that I have to add these. + public static final String FORGE_RUNTIME = "dev.architectury:architectury-loom-forge-runtime:"; private Dependencies() { } @@ -104,6 +105,7 @@ public class Constants { public static final String TERMINAL_CONSOLE_APPENDER = "1.2.0"; public static final String JETBRAINS_ANNOTATIONS = "19.0.0"; public static final String JAVAX_ANNOTATIONS = "3.0.2"; + public static final String FORGE_RUNTIME = "$LOOM_VERSION"; // replaced with current version at build time private Versions() { } From 758333595efc7da6a8b3f81e13278d5aa04b00c5 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:47:47 +0300 Subject: [PATCH 02/10] Use AbstractMap.SimpleImmutableEntry instead of a custom Pair class --- .../java/net/fabricmc/loom/inject/Pair.java | 52 ------------------- .../loom/inject/YarnNamingService.java | 3 +- 2 files changed, 2 insertions(+), 53 deletions(-) delete mode 100644 forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java diff --git a/forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java deleted file mode 100644 index 0206cb5d..00000000 --- a/forge-runtime/src/main/java/net/fabricmc/loom/inject/Pair.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of fabric-loom, licensed under the MIT License (MIT). - * - * Copyright (c) 2016, 2017, 2018 FabricMC - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package net.fabricmc.loom.inject; - -import java.util.Map; - -final class Pair implements Map.Entry { - private final A first; - private final B second; - - Pair(A first, B second) { - this.first = first; - this.second = second; - } - - @Override - public A getKey() { - return first; - } - - @Override - public B getValue() { - return second; - } - - @Override - public B setValue(B value) { - throw new UnsupportedOperationException("Pairs are immutable!"); - } -} diff --git a/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java b/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java index 2b62dc53..dea0428f 100644 --- a/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java +++ b/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java @@ -30,6 +30,7 @@ import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.AbstractMap; import java.util.Map; import java.util.Optional; import java.util.function.BiFunction; @@ -56,7 +57,7 @@ public class YarnNamingService implements INameMappingService { @Override public Map.Entry understanding() { - return new Pair<>("srg", "mcp"); + return new AbstractMap.SimpleImmutableEntry<>("srg", "mcp"); } @Override From 31495c1ca6e2253bfef1fbb12754250f941c88d2 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:50:04 +0300 Subject: [PATCH 03/10] Add checkstyle to forge-runtime --- forge-runtime/build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle index 34303aea..8c6e5fff 100644 --- a/forge-runtime/build.gradle +++ b/forge-runtime/build.gradle @@ -1,6 +1,7 @@ plugins { id 'java' id 'maven-publish' + id 'checkstyle' id 'com.github.johnrengelman.shadow' id 'org.cadixdev.licenser' } @@ -61,6 +62,11 @@ license { exclude '**/loom/inject/mixin/MixinIntermediaryDevRemapper.java' } +checkstyle { + configFile = rootProject.checkstyle.configFile + toolVersion = rootProject.checkstyle.toolVersion +} + publishing { publications { maven(MavenPublication) { From 8146d775a1026283cfa73581bc829932173d34f1 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:52:43 +0300 Subject: [PATCH 04/10] net.fabricmc.loom.inject -> dev.architectury.loom.forgeruntime --- .../architectury/loom/forgeruntime}/YarnNamingService.java | 2 +- .../mixin/ForgeLoomMixinRemapperInjectorService.java | 2 +- .../loom/forgeruntime}/mixin/MixinIntermediaryDevRemapper.java | 2 +- .../services/cpw.mods.modlauncher.api.INameMappingService | 2 +- .../services/cpw.mods.modlauncher.api.ITransformationService | 2 +- .../fabricmc/loom/configuration/providers/LaunchProvider.java | 1 + 6 files changed, 6 insertions(+), 5 deletions(-) rename forge-runtime/src/main/java/{net/fabricmc/loom/inject => dev/architectury/loom/forgeruntime}/YarnNamingService.java (98%) rename forge-runtime/src/main/java/{net/fabricmc/loom/inject => dev/architectury/loom/forgeruntime}/mixin/ForgeLoomMixinRemapperInjectorService.java (98%) rename forge-runtime/src/main/java/{net/fabricmc/loom/inject => dev/architectury/loom/forgeruntime}/mixin/MixinIntermediaryDevRemapper.java (99%) diff --git a/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java b/forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/YarnNamingService.java similarity index 98% rename from forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java rename to forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/YarnNamingService.java index dea0428f..9d3c2aa9 100644 --- a/forge-runtime/src/main/java/net/fabricmc/loom/inject/YarnNamingService.java +++ b/forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/YarnNamingService.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package net.fabricmc.loom.inject; +package dev.architectury.loom.forgeruntime; import java.io.BufferedReader; import java.io.IOException; diff --git a/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java b/forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/mixin/ForgeLoomMixinRemapperInjectorService.java similarity index 98% rename from forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java rename to forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/mixin/ForgeLoomMixinRemapperInjectorService.java index 1fe961c6..c32f6724 100644 --- a/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/ForgeLoomMixinRemapperInjectorService.java +++ b/forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/mixin/ForgeLoomMixinRemapperInjectorService.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -package net.fabricmc.loom.inject.mixin; +package dev.architectury.loom.forgeruntime.mixin; import java.io.BufferedReader; import java.nio.file.Files; diff --git a/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java b/forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/mixin/MixinIntermediaryDevRemapper.java similarity index 99% rename from forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java rename to forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/mixin/MixinIntermediaryDevRemapper.java index ef5724dc..f331a9ca 100644 --- a/forge-runtime/src/main/java/net/fabricmc/loom/inject/mixin/MixinIntermediaryDevRemapper.java +++ b/forge-runtime/src/main/java/dev/architectury/loom/forgeruntime/mixin/MixinIntermediaryDevRemapper.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.fabricmc.loom.inject.mixin; +package dev.architectury.loom.forgeruntime.mixin; import java.util.ArrayDeque; import java.util.Collection; diff --git a/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService index 45290566..ec41d220 100644 --- a/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService +++ b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.INameMappingService @@ -1 +1 @@ -net.fabricmc.loom.inject.YarnNamingService +dev.architectury.loom.forgeruntime.YarnNamingService diff --git a/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService index 0fb04144..679794d7 100644 --- a/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService +++ b/forge-runtime/src/main/resources/META-INF/services/cpw.mods.modlauncher.api.ITransformationService @@ -1 +1 @@ -net.fabricmc.loom.inject.mixin.ForgeLoomMixinRemapperInjectorService \ No newline at end of file +dev.architectury.loom.forgeruntime.mixin.ForgeLoomMixinRemapperInjectorService \ No newline at end of file diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java index 4cf96b94..6325162c 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/LaunchProvider.java @@ -72,6 +72,7 @@ public class LaunchProvider extends DependencyProvider { if (getExtension().isForge()) { launchConfig + // Should match YarnNamingService.PATH_TO_MAPPINGS in forge-runtime .property("fabric.yarnWithSrg.path", getExtension().getMappingsProvider().tinyMappingsWithSrg.toAbsolutePath().toString()) .argument("--fml.mcVersion") From 479594deab21180651ee315ef15ce23bebf938c0 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:57:19 +0300 Subject: [PATCH 05/10] Update TMP and fix license check --- forge-runtime/build.gradle | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle index 8c6e5fff..8155b279 100644 --- a/forge-runtime/build.gradle +++ b/forge-runtime/build.gradle @@ -35,7 +35,10 @@ repositories { } dependencies { - include ('net.fabricmc:tiny-mappings-parser:0.2.2.14') + // shadowed + include ('net.fabricmc:tiny-mappings-parser:0.3.0+build.17') + + // guaranteed to be there at runtime compileOnly ('cpw.mods:modlauncher:6.1.3') compileOnly ('org.spongepowered:mixin:0.8.2') compileOnly ('com.google.code.gson:gson:2.8.6') @@ -59,7 +62,7 @@ assemble.dependsOn shadowJar license { header rootProject.file("HEADER") include "**/*.java" - exclude '**/loom/inject/mixin/MixinIntermediaryDevRemapper.java' + exclude '**/loom/forgeruntime/mixin/MixinIntermediaryDevRemapper.java' } checkstyle { From 8bba3fe765245c1ff29417533b6824dceb95d07d Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:01:47 +0300 Subject: [PATCH 06/10] Fix publication coordinates --- forge-runtime/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle index 8155b279..ea477a1f 100644 --- a/forge-runtime/build.gradle +++ b/forge-runtime/build.gradle @@ -73,6 +73,7 @@ checkstyle { publishing { publications { maven(MavenPublication) { + artifactId = 'architectury-loom-forge-runtime' from components.java } } From 20f1e9460186a46b509a976d54ff0f3b74224989 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:10:40 +0300 Subject: [PATCH 07/10] Use typesafe constants instead of ints --- forge-runtime/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle index ea477a1f..031bdb5d 100644 --- a/forge-runtime/build.gradle +++ b/forge-runtime/build.gradle @@ -10,8 +10,8 @@ group = rootProject.group archivesBaseName = 'architectury-loom-forge-runtime' version = rootProject.version -sourceCompatibility = 8 -targetCompatibility = 8 +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 configurations { include From 9bdd99282e9ff2b55f5f20b99cf6f3f8ede4bff9 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:58:00 +0300 Subject: [PATCH 08/10] Fix publishing --- forge-runtime/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-runtime/build.gradle b/forge-runtime/build.gradle index 031bdb5d..f7bf4e4a 100644 --- a/forge-runtime/build.gradle +++ b/forge-runtime/build.gradle @@ -74,7 +74,7 @@ publishing { publications { maven(MavenPublication) { artifactId = 'architectury-loom-forge-runtime' - from components.java + shadow.component it } } From 2a47b28fde45db3d43dc12aa69f5d606912bff00 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Tue, 29 Jun 2021 00:15:16 +0300 Subject: [PATCH 09/10] Ignore Forge name mapping service provider --- .../providers/forge/MinecraftPatchedProvider.java | 12 +++++++++--- .../providers/mappings/MappingsProviderImpl.java | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java index 995cb208..786d5509 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java @@ -28,7 +28,6 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.UncheckedIOException; @@ -76,7 +75,6 @@ import org.objectweb.asm.tree.ClassNode; import org.zeroturnaround.zip.ZipUtil; import net.fabricmc.loom.configuration.DependencyProvider; -import net.fabricmc.loom.configuration.providers.MinecraftProvider; import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider; import net.fabricmc.loom.util.Checksum; @@ -92,6 +90,8 @@ import net.fabricmc.loom.util.srg.SpecialSourceExecutor; import net.fabricmc.mapping.tree.TinyTree; public class MinecraftPatchedProvider extends DependencyProvider { + private static final String NAME_MAPPING_SERVICE_PATH = "/META-INF/services/cpw.mods.modlauncher.api.INameMappingService"; + // Step 1: Remap Minecraft to SRG private File minecraftClientSrgJar; private File minecraftServerSrgJar; @@ -557,7 +557,13 @@ public class MinecraftPatchedProvider extends DependencyProvider { } private void copyUserdevFiles(File source, File target) throws IOException { - walkFileSystems(source, target, file -> true, fs -> Collections.singleton(fs.getPath("inject")), (sourceFs, targetFs, sourcePath, targetPath) -> { + // Removes the Forge name mapping service definition so that our own is used. + // If there are multiple name mapping services with the same "understanding" pair + // (source -> target namespace pair), modlauncher throws a fit and will crash. + // To use our YarnNamingService instead of MCPNamingService, we have to remove this file. + Predicate filter = file -> !file.toString().equals(NAME_MAPPING_SERVICE_PATH); + + walkFileSystems(source, target, filter, fs -> Collections.singleton(fs.getPath("inject")), (sourceFs, targetFs, sourcePath, targetPath) -> { Path parent = targetPath.getParent(); if (parent != null) { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java index 8f319f61..373f6ab5 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java @@ -46,7 +46,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import com.google.common.net.UrlEscapers; import com.google.gson.JsonObject; -import dev.architectury.mappingslayers.api.utils.MappingsUtils; import org.apache.commons.io.FileUtils; import org.apache.tools.ant.util.StringUtils; import org.gradle.api.Project; From f240b0f39f7984f596a45ee0b4eaf7941e62ce9a Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Tue, 29 Jun 2021 01:12:52 +0300 Subject: [PATCH 10/10] Fix the previous --- .../configuration/providers/forge/MinecraftPatchedProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java index 786d5509..eaf1c825 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java @@ -90,7 +90,7 @@ import net.fabricmc.loom.util.srg.SpecialSourceExecutor; import net.fabricmc.mapping.tree.TinyTree; public class MinecraftPatchedProvider extends DependencyProvider { - private static final String NAME_MAPPING_SERVICE_PATH = "/META-INF/services/cpw.mods.modlauncher.api.INameMappingService"; + private static final String NAME_MAPPING_SERVICE_PATH = "/inject/META-INF/services/cpw.mods.modlauncher.api.INameMappingService"; // Step 1: Remap Minecraft to SRG private File minecraftClientSrgJar;