diff options
author | shedaniel <daniel@shedaniel.me> | 2021-01-13 20:32:37 +0800 |
---|---|---|
committer | shedaniel <daniel@shedaniel.me> | 2021-01-13 20:32:37 +0800 |
commit | 6f10845562dd1fdb87e8cd842e75c649a127ce3b (patch) | |
tree | 7f642a55d758efa68c9912c0b24a0ffa5a860925 /src/main/java | |
parent | 3986279215804dfdb2e3cb4dbaabdeeaeda6a211 (diff) | |
download | architectury-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')
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); } } |