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;