aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-01-13 20:32:37 +0800
committershedaniel <daniel@shedaniel.me>2021-01-13 20:32:37 +0800
commit6f10845562dd1fdb87e8cd842e75c649a127ce3b (patch)
tree7f642a55d758efa68c9912c0b24a0ffa5a860925 /src/main/java
parent3986279215804dfdb2e3cb4dbaabdeeaeda6a211 (diff)
downloadarchitectury-loom-6f10845562dd1fdb87e8cd842e75c649a127ce3b.tar.gz
architectury-loom-6f10845562dd1fdb87e8cd842e75c649a127ce3b.tar.bz2
architectury-loom-6f10845562dd1fdb87e8cd842e75c649a127ce3b.zip
Allow switching to fabric mixin in forge, allowing advanced refmap remapper, making yarn for forge working.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java1
-rw-r--r--src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java25
-rw-r--r--src/main/java/net/fabricmc/loom/providers/LaunchProvider.java9
-rw-r--r--src/main/java/net/fabricmc/loom/providers/MinecraftPatchedProvider.java11
4 files changed, 30 insertions, 16 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index e9dccbc0..3edffd42 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -71,6 +71,7 @@ public class LoomGradleExtension {
public boolean shareCaches = false;
public String mixinConfig = null; // FORGE: Passed to Minecraft
public List<String> mixinConfigs = null; // FORGE: Passed to Minecraft
+ public boolean useFabricMixin = false; // FORGE: Use Fabric Mixin for better refmap resolutions
private final ConfigurableFileCollection unmappedMods;
diff --git a/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java b/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java
index 03b03f6d..b3481c18 100644
--- a/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/ForgeUserdevProvider.java
@@ -24,24 +24,19 @@
package net.fabricmc.loom.providers;
-import java.io.File;
-import java.io.Reader;
-import java.net.URI;
-import java.nio.file.FileSystem;
-import java.nio.file.FileSystems;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.util.function.Consumer;
-
import com.google.common.collect.ImmutableMap;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
-import org.gradle.api.Project;
-
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.DependencyProvider;
+import org.gradle.api.Project;
+
+import java.io.File;
+import java.io.Reader;
+import java.net.URI;
+import java.nio.file.*;
+import java.util.function.Consumer;
public class ForgeUserdevProvider extends DependencyProvider {
private File userdevJar;
@@ -79,7 +74,11 @@ public class ForgeUserdevProvider extends DependencyProvider {
addDependency(json.get("universal").getAsString(), Constants.Configurations.FORGE_UNIVERSAL);
for (JsonElement lib : json.get("libraries").getAsJsonArray()) {
- addDependency(lib.getAsString(), Constants.Configurations.FORGE_DEPENDENCIES);
+ if (!getExtension().useFabricMixin || !lib.getAsString().startsWith("org.spongepowered:mixin:")) {
+ addDependency(lib.getAsString(), Constants.Configurations.FORGE_DEPENDENCIES);
+ } else {
+ addDependency("net.fabricmc:sponge-mixin:0.8+build.18", Constants.Configurations.FORGE_DEPENDENCIES);
+ }
}
// TODO: Read launch configs from the JSON too
diff --git a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java
index 855cc507..16ef415b 100644
--- a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java
@@ -83,8 +83,13 @@ public class LaunchProvider extends DependencyProvider {
.argument("server", "--launchTarget")
.argument("server", "fmluserdevserver")
- .property("mixin.env.remapRefMap", "true")
- .property("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", getExtension().getMappingsProvider().srgToNamedSrg.getAbsolutePath());
+ .property("mixin.env.remapRefMap", "true");
+
+ if (getExtension().useFabricMixin) {
+ launchConfig.property("mixin.forgeloom.inject.mappings.srg-named", getExtension().getMappingsProvider().mixinTinyMappingsWithSrg.getAbsolutePath());
+ } else {
+ launchConfig.property("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", getExtension().getMappingsProvider().srgToNamedSrg.getAbsolutePath());
+ }
String mixinConfig = getExtension().mixinConfig;
List<String> mixinConfigs = getExtension().mixinConfigs;
diff --git a/src/main/java/net/fabricmc/loom/providers/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/providers/MinecraftPatchedProvider.java
index 1e6ea739..efcd3781 100644
--- a/src/main/java/net/fabricmc/loom/providers/MinecraftPatchedProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/MinecraftPatchedProvider.java
@@ -128,6 +128,10 @@ public class MinecraftPatchedProvider extends DependencyProvider {
PatchProvider patchProvider = getExtension().getPatchProvider();
String minecraftVersion = minecraftProvider.getMinecraftVersion();
String jarSuffix = "-patched-forge-" + patchProvider.forgeVersion;
+ if (getExtension().useFabricMixin) {
+ jarSuffix += "-fabric-mixin";
+ }
+
minecraftProvider.setJarSuffix(jarSuffix);
File globalCache = getExtension().getUserCache();
@@ -301,7 +305,12 @@ public class MinecraftPatchedProvider extends DependencyProvider {
for (Environment environment : Environment.values()) {
String side = environment.side();
File target = environment.patchedSrgJar.apply(this);
- walkFileSystems(injection, target, it -> !it.getFileName().toString().equals("MANIFEST.MF"), this::copyReplacing);
+ 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);
}
}