Allow switching to fabric mixin in forge, allowing advanced refmap remapper, making yarn for forge working.

This commit is contained in:
shedaniel
2021-01-13 20:32:37 +08:00
parent 3986279215
commit 6f10845562
8 changed files with 325 additions and 16 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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);
}
}