mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-04-02 13:37:45 -05:00
Allow switching to fabric mixin in forge, allowing advanced refmap remapper, making yarn for forge working.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user