mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-03-28 04:07:01 -05:00
Merge remote-tracking branch 'origin/dev/1.4' into dev/1.5
# Conflicts: # gradle/libs.versions.toml
This commit is contained in:
@@ -186,6 +186,7 @@ dependencies {
|
||||
implementation libs.opencsv
|
||||
implementation libs.forge.diffpatch
|
||||
implementation libs.datafixerupper
|
||||
implementation libs.at
|
||||
|
||||
// Forge mods.toml parsing
|
||||
implementation libs.night.config.toml
|
||||
|
||||
@@ -28,6 +28,7 @@ opencsv = "5.4"
|
||||
forge-diffpatch = "2.0.7"
|
||||
night-config = "3.6.6"
|
||||
datafixerupper = "6.0.8"
|
||||
at = "1.0.1"
|
||||
|
||||
[libraries]
|
||||
# Loom compile libraries
|
||||
@@ -60,6 +61,7 @@ opencsv = { module = "com.opencsv:opencsv", version.ref = "opencsv" }
|
||||
forge-diffpatch = { module = "net.minecraftforge:DiffPatch", version.ref = "forge-diffpatch" }
|
||||
night-config-toml = { module = "com.electronwill.night-config:toml", version.ref = "night-config" }
|
||||
datafixerupper = { module = "com.mojang:datafixerupper", version.ref = "datafixerupper" }
|
||||
at = { module = "dev.architectury:at", version.ref = "at" }
|
||||
|
||||
[plugins]
|
||||
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||
|
||||
@@ -18,6 +18,7 @@ access-transformers = "3.0.1"
|
||||
access-transformers-new = "8.0.5"
|
||||
unprotect = "1.2.0"
|
||||
asm = "9.3"
|
||||
union-relauncher = "1.0.0"
|
||||
|
||||
[libraries]
|
||||
# Decompilers
|
||||
@@ -41,3 +42,4 @@ access-transformers = { module = "net.minecraftforge:accesstransformers", versio
|
||||
access-transformers-new = { module = "net.minecraftforge:accesstransformers", version.ref = "access-transformers-new" }
|
||||
unprotect = { module = "io.github.juuxel:unprotect", version.ref = "unprotect" }
|
||||
asm = { module = "org.ow2.asm:asm", version.ref = "asm" }
|
||||
union-relauncher = { module = "io.github.juuxel:union-relauncher", version.ref = "union-relauncher" }
|
||||
|
||||
@@ -16,9 +16,8 @@ import java.util.jar.Attributes;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
import org.cadixdev.at.AccessTransformSet;
|
||||
import org.cadixdev.at.io.AccessTransformFormats;
|
||||
import org.cadixdev.lorenz.MappingSet;
|
||||
import dev.architectury.at.AccessTransformSet;
|
||||
import dev.architectury.at.io.AccessTransformFormats;
|
||||
import org.gradle.api.provider.Property;
|
||||
import org.gradle.api.provider.SetProperty;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -29,7 +28,6 @@ import net.fabricmc.loom.util.FileSystemUtil;
|
||||
import net.fabricmc.loom.util.LfWriter;
|
||||
import net.fabricmc.loom.util.aw2at.Aw2At;
|
||||
import net.fabricmc.loom.util.service.UnsafeWorkQueueHelper;
|
||||
import net.fabricmc.lorenztiny.TinyMappingsReader;
|
||||
|
||||
public final class ModBuildExtensions {
|
||||
public static Set<String> readMixinConfigsFromManifest(File jarFile) {
|
||||
@@ -87,11 +85,7 @@ public final class ModBuildExtensions {
|
||||
}
|
||||
|
||||
MappingsService service = UnsafeWorkQueueHelper.get(mappingBuildServiceUuid, MappingsService.class);
|
||||
|
||||
try (TinyMappingsReader reader = new TinyMappingsReader(service.getMemoryMappingTree(), service.getFromNamespace(), service.getToNamespace())) {
|
||||
MappingSet mappingSet = reader.read();
|
||||
at = at.remap(mappingSet);
|
||||
}
|
||||
at = at.remap(service.getMemoryMappingTree(), service.getFromNamespace(), service.getToNamespace());
|
||||
|
||||
try (Writer writer = new LfWriter(Files.newBufferedWriter(atPath))) {
|
||||
AccessTransformFormats.FML.write(writer, at);
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
|
||||
public final class ArchitecturyCommonJson implements JsonBackedModMetadataFile, SingleIdModMetadataFile {
|
||||
public static final String FILE_NAME = "architectury.common.json";
|
||||
@@ -68,6 +69,11 @@ public final class ArchitecturyCommonJson implements JsonBackedModMetadataFile,
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getAccessTransformers(ModPlatform platform) {
|
||||
return Set.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InterfaceInjectionProcessor.InjectedInterface> getInjectedInterfaces(@Nullable String modId) {
|
||||
if (modId == null) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.VisibleForTesting;
|
||||
|
||||
import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
|
||||
/**
|
||||
* A fallback mod metadata file that represents a non-fatal format error
|
||||
@@ -31,6 +32,11 @@ public final class ErroringModMetadataFile implements ModMetadataFile {
|
||||
return Set.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getAccessTransformers(ModPlatform platform) {
|
||||
return Set.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InterfaceInjectionProcessor.InjectedInterface> getInjectedInterfaces(@Nullable String modId) {
|
||||
return List.of();
|
||||
|
||||
@@ -6,6 +6,7 @@ import java.util.Set;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
import net.fabricmc.loom.util.function.CollectionUtil;
|
||||
|
||||
/**
|
||||
@@ -32,6 +33,13 @@ public interface ModMetadataFile {
|
||||
*/
|
||||
Set<String> getAccessWideners();
|
||||
|
||||
/**
|
||||
* {@return the paths to the access transformer files of this mod, or an empty set if absent}.
|
||||
*
|
||||
* @param platform the platform to run the query on
|
||||
*/
|
||||
Set<String> getAccessTransformers(ModPlatform platform);
|
||||
|
||||
/**
|
||||
* {@return the injected interface data in this mod metadata file}.
|
||||
*
|
||||
|
||||
@@ -6,6 +6,7 @@ import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
@@ -19,6 +20,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor;
|
||||
import net.fabricmc.loom.util.ExceptionUtil;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
|
||||
public final class ModsToml implements ModMetadataFile {
|
||||
public static final String FILE_PATH = "META-INF/mods.toml";
|
||||
@@ -72,6 +74,26 @@ public final class ModsToml implements ModMetadataFile {
|
||||
return Set.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getAccessTransformers(ModPlatform platform) {
|
||||
if (platform == ModPlatform.NEOFORGE) {
|
||||
final List<? extends Config> ats = config.get("accessTransformers");
|
||||
|
||||
if (ats != null) {
|
||||
final Set<String> result = new HashSet<>();
|
||||
|
||||
for (Config atEntry : ats) {
|
||||
final String file = atEntry.get("file");
|
||||
if (file != null) result.add(file);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return Set.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InterfaceInjectionProcessor.InjectedInterface> getInjectedInterfaces(@Nullable String modId) {
|
||||
return List.of();
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
import net.fabricmc.loom.util.function.CollectionUtil;
|
||||
|
||||
public final class QuiltModJson implements JsonBackedModMetadataFile, SingleIdModMetadataFile {
|
||||
@@ -84,6 +85,11 @@ public final class QuiltModJson implements JsonBackedModMetadataFile, SingleIdMo
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getAccessTransformers(ModPlatform platform) {
|
||||
return Set.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InterfaceInjectionProcessor.InjectedInterface> getInjectedInterfaces(@Nullable String modId) {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package dev.architectury.loom.neoforge;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Set;
|
||||
|
||||
import dev.architectury.at.AccessTransformSet;
|
||||
import dev.architectury.at.io.AccessTransformFormats;
|
||||
import dev.architectury.loom.metadata.ModMetadataFile;
|
||||
import dev.architectury.loom.metadata.ModMetadataFiles;
|
||||
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.FileSystemUtil;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
import net.fabricmc.mappingio.tree.MappingTreeView;
|
||||
|
||||
public final class NeoForgeModDependencies {
|
||||
public static void remapAts(Path jar, MappingTreeView mappings, String from, String to) throws IOException {
|
||||
final ModMetadataFile modMetadata = ModMetadataFiles.fromJar(jar);
|
||||
Set<String> atPaths = Set.of(Constants.Forge.ACCESS_TRANSFORMER_PATH);
|
||||
|
||||
if (modMetadata != null) {
|
||||
final Set<String> modsTomlAts = modMetadata.getAccessTransformers(ModPlatform.NEOFORGE);
|
||||
|
||||
if (!modsTomlAts.isEmpty()) {
|
||||
atPaths = modsTomlAts;
|
||||
}
|
||||
}
|
||||
|
||||
try (FileSystemUtil.Delegate fs = FileSystemUtil.getJarFileSystem(jar)) {
|
||||
for (String atPathStr : atPaths) {
|
||||
final Path atPath = fs.getPath(atPathStr);
|
||||
|
||||
if (Files.exists(atPath)) {
|
||||
AccessTransformSet ats = AccessTransformFormats.FML.read(atPath);
|
||||
ats = ats.remap(mappings, from, to);
|
||||
AccessTransformFormats.FML.write(atPath, ats);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,7 @@ import net.fabricmc.loom.extension.LoomFiles;
|
||||
import net.fabricmc.loom.extension.LoomGradleExtensionImpl;
|
||||
import net.fabricmc.loom.task.LoomTasks;
|
||||
import net.fabricmc.loom.task.RemapTaskConfiguration;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.LibraryLocationLogger;
|
||||
|
||||
public class LoomGradlePlugin implements BootstrappedPlugin {
|
||||
@@ -85,7 +86,11 @@ public class LoomGradlePlugin implements BootstrappedPlugin {
|
||||
loggedVersions.add(LOOM_VERSION);
|
||||
System.setProperty("loom.printed.logged", String.join(",", loggedVersions));
|
||||
project.getLogger().lifecycle("Architectury Loom: " + LOOM_VERSION);
|
||||
project.getLogger().lifecycle("This version of Architectury Loom is in beta! Please report any issues you encounter: https://github.com/architectury/architectury-loom/issues");
|
||||
if (Constants.PLUGIN_BETA) {
|
||||
project.getLogger().lifecycle("This version of Architectury Loom is in beta! Please report any issues you encounter: https://github.com/architectury/architectury-loom/issues");
|
||||
} else if (Constants.PLUGIN_DEPRECATED) {
|
||||
project.getLogger().lifecycle("You are using an outdated version of Architectury Loom! This version will not receive any support, please consider updating!");
|
||||
}
|
||||
}
|
||||
|
||||
LibraryLocationLogger.logLibraryVersions();
|
||||
|
||||
@@ -40,9 +40,9 @@ import javax.inject.Inject;
|
||||
|
||||
import com.google.common.hash.Hashing;
|
||||
import com.google.common.io.MoreFiles;
|
||||
import dev.architectury.at.AccessTransformSet;
|
||||
import dev.architectury.at.io.AccessTransformFormats;
|
||||
import dev.architectury.loom.util.TempFiles;
|
||||
import org.cadixdev.at.AccessTransformSet;
|
||||
import org.cadixdev.at.io.AccessTransformFormats;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.file.FileCollection;
|
||||
import org.gradle.api.logging.Logger;
|
||||
@@ -61,7 +61,6 @@ import net.fabricmc.loom.util.ExceptionUtil;
|
||||
import net.fabricmc.loom.util.ForgeToolExecutor;
|
||||
import net.fabricmc.loom.util.LoomVersions;
|
||||
import net.fabricmc.loom.util.fmj.FabricModJson;
|
||||
import net.fabricmc.lorenztiny.TinyMappingsReader;
|
||||
|
||||
public class AccessTransformerJarProcessor implements MinecraftJarProcessor<AccessTransformerJarProcessor.Spec> {
|
||||
private static final Logger LOGGER = Logging.getLogger(AccessTransformerJarProcessor.class);
|
||||
@@ -139,7 +138,7 @@ public class AccessTransformerJarProcessor implements MinecraftJarProcessor<Acce
|
||||
}
|
||||
}
|
||||
|
||||
accessTransformSet = accessTransformSet.remap(new TinyMappingsReader(context.getMappings(), IntermediaryNamespaces.intermediary(project), MappingsNamespace.NAMED.toString()).read());
|
||||
accessTransformSet = accessTransformSet.remap(context.getMappings(), IntermediaryNamespaces.intermediary(project), MappingsNamespace.NAMED.toString());
|
||||
|
||||
final Path accessTransformerPath = tempFiles.file("accesstransformer-merged", ".cfg");
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
import net.fabricmc.loom.util.fmj.FabricModJson;
|
||||
import net.fabricmc.loom.util.fmj.FabricModJsonFactory;
|
||||
import net.fabricmc.loom.util.fmj.ModMetadataFabricModJson;
|
||||
|
||||
public class AccessWidenerUtils {
|
||||
/**
|
||||
@@ -63,6 +64,13 @@ public class AccessWidenerUtils {
|
||||
}
|
||||
|
||||
final FabricModJson fabricModJson = FabricModJsonFactory.createFromZip(inputJar);
|
||||
|
||||
if (platform.isForgeLike() && !(fabricModJson instanceof ModMetadataFabricModJson)) {
|
||||
// Ignore actual fabric.mod.json files on NeoForge and Forge.
|
||||
// See https://github.com/architectury/architectury-loom/issues/165.
|
||||
return null;
|
||||
}
|
||||
|
||||
final List<String> classTweakers = List.copyOf(fabricModJson.getClassTweakers().keySet());
|
||||
|
||||
if (classTweakers.isEmpty()) {
|
||||
|
||||
@@ -93,6 +93,12 @@ public record ArtifactMetadata(boolean isFabricMod, RemapRequirements remapRequi
|
||||
if (loomVersion != null && refmapRemapType != MixinRemapType.STATIC) {
|
||||
validateLoomVersion(loomVersion, currentLoomVersion);
|
||||
}
|
||||
|
||||
// Check to see if the jar was built with a newer version of loom.
|
||||
// This version of loom does not support the remap type value so throw an exception.
|
||||
if (mainAttributes.getValue("Fabric-Loom-Mixin-Remap-Type") != null) {
|
||||
throw new IllegalStateException("This version of loom does not support the mixin remap type value. Please update to the latest version of loom.");
|
||||
}
|
||||
}
|
||||
|
||||
final String installerFile = platform == ModPlatform.QUILT ? QUILT_INSTALLER_PATH : INSTALLER_PATH;
|
||||
|
||||
@@ -43,6 +43,7 @@ import java.util.regex.Pattern;
|
||||
|
||||
import com.google.common.base.Stopwatch;
|
||||
import com.google.gson.JsonObject;
|
||||
import dev.architectury.loom.neoforge.NeoForgeModDependencies;
|
||||
import dev.architectury.loom.util.MappingOption;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.artifacts.Configuration;
|
||||
@@ -64,7 +65,7 @@ import net.fabricmc.loom.util.ZipUtils;
|
||||
import net.fabricmc.loom.util.kotlin.KotlinClasspathService;
|
||||
import net.fabricmc.loom.util.kotlin.KotlinRemapperClassloader;
|
||||
import net.fabricmc.loom.util.service.SharedServiceManager;
|
||||
import net.fabricmc.loom.util.srg.AtRemapper;
|
||||
import net.fabricmc.loom.util.srg.AtClassRemapper;
|
||||
import net.fabricmc.loom.util.srg.CoreModClassRemapper;
|
||||
import net.fabricmc.mappingio.tree.MemoryMappingTree;
|
||||
import net.fabricmc.tinyremapper.InputTag;
|
||||
@@ -285,7 +286,14 @@ public class ModProcessor {
|
||||
remapJarManifestEntries(output);
|
||||
|
||||
if (extension.isForgeLike()) {
|
||||
AtRemapper.remap(project, output, mappings);
|
||||
if (extension.isNeoForge()) {
|
||||
// NeoForge: Fully map ATs
|
||||
NeoForgeModDependencies.remapAts(output, mappings, fromM, toM);
|
||||
} else {
|
||||
// Forge: only map class names, the rest are mapped srg -> named at runtime
|
||||
AtClassRemapper.remap(project, output, mappings);
|
||||
}
|
||||
|
||||
CoreModClassRemapper.remapJar(project, extension.getPlatform().get(), output, mappings);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.gradle.api.Project;
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.DependencyInfo;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.LoomVersions;
|
||||
import net.fabricmc.loom.util.ModPlatform;
|
||||
|
||||
public class ForgeProvider extends DependencyProvider {
|
||||
@@ -49,6 +50,10 @@ public class ForgeProvider extends DependencyProvider {
|
||||
version = new ForgeVersion(dependency.getResolvedVersion());
|
||||
addDependency(dependency.getDepString() + ":userdev", Constants.Configurations.FORGE_USERDEV);
|
||||
addDependency(dependency.getDepString() + ":installer", Constants.Configurations.FORGE_INSTALLER);
|
||||
|
||||
if (getExtension().isForge() && version.getMajorVersion() >= Constants.Forge.MIN_UNION_RELAUNCHER_VERSION) {
|
||||
addDependency(LoomVersions.UNION_RELAUNCHER.mavenNotation(), Constants.Configurations.FORGE_EXTRA);
|
||||
}
|
||||
}
|
||||
|
||||
public ForgeVersion getVersion() {
|
||||
@@ -86,6 +91,7 @@ public class ForgeProvider extends DependencyProvider {
|
||||
private final String combined;
|
||||
private final String minecraftVersion;
|
||||
private final String forgeVersion;
|
||||
private final int majorVersion;
|
||||
|
||||
public ForgeVersion(String combined) {
|
||||
this.combined = combined;
|
||||
@@ -93,6 +99,7 @@ public class ForgeProvider extends DependencyProvider {
|
||||
if (combined == null) {
|
||||
this.minecraftVersion = "NO_VERSION";
|
||||
this.forgeVersion = "NO_VERSION";
|
||||
this.majorVersion = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -105,6 +112,21 @@ public class ForgeProvider extends DependencyProvider {
|
||||
this.minecraftVersion = "NO_VERSION";
|
||||
this.forgeVersion = combined;
|
||||
}
|
||||
|
||||
int dotIndex = forgeVersion.indexOf('.');
|
||||
int major;
|
||||
|
||||
try {
|
||||
if (dotIndex >= 0) {
|
||||
major = Integer.parseInt(forgeVersion.substring(0, dotIndex));
|
||||
} else {
|
||||
major = Integer.parseInt(forgeVersion);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
major = -1;
|
||||
}
|
||||
|
||||
this.majorVersion = major;
|
||||
}
|
||||
|
||||
public String getCombined() {
|
||||
@@ -118,5 +140,9 @@ public class ForgeProvider extends DependencyProvider {
|
||||
public String getForgeVersion() {
|
||||
return forgeVersion;
|
||||
}
|
||||
|
||||
public int getMajorVersion() {
|
||||
return majorVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,5 +109,12 @@ public record ForgeRunTemplate(
|
||||
|
||||
// Add MOD_CLASSES, this is something that ForgeGradle does
|
||||
settings.getEnvironmentVariables().computeIfAbsent("MOD_CLASSES", $ -> ConfigValue.of("{source_roots}").resolve(configValueResolver));
|
||||
|
||||
final ForgeProvider forgeProvider = settings.getExtension().getForgeProvider();
|
||||
|
||||
if (settings.getExtension().isForge() && forgeProvider.getVersion().getMajorVersion() >= Constants.Forge.MIN_UNION_RELAUNCHER_VERSION) {
|
||||
settings.defaultMainClass(Constants.Forge.UNION_RELAUNCHER_MAIN_CLASS);
|
||||
settings.property(Constants.Forge.UNION_RELAUNCHER_MAIN_CLASS_PROPERTY, main);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.google.gson.JsonObject;
|
||||
/**
|
||||
* Data extracted from the MCPConfig JSON file.
|
||||
*
|
||||
* @param version the Minecraft version - the value of the {@code version} property
|
||||
* @param data the value of the {@code data} property
|
||||
* @param mappingsPath the path to srg mappings inside the MCP zip
|
||||
* @param official the value of the {@code official} property
|
||||
@@ -42,6 +43,7 @@ import com.google.gson.JsonObject;
|
||||
* @param functions the MCP function definitions by name
|
||||
*/
|
||||
public record McpConfigData(
|
||||
String version,
|
||||
JsonObject data,
|
||||
String mappingsPath,
|
||||
boolean official,
|
||||
@@ -49,6 +51,7 @@ public record McpConfigData(
|
||||
Map<String, McpConfigFunction> functions
|
||||
) {
|
||||
public static McpConfigData fromJson(JsonObject json) {
|
||||
String version = json.get("version").getAsString();
|
||||
JsonObject data = json.getAsJsonObject("data");
|
||||
String mappingsPath = data.get("mappings").getAsString();
|
||||
boolean official = json.has("official") && json.getAsJsonPrimitive("official").getAsBoolean();
|
||||
@@ -73,6 +76,6 @@ public record McpConfigData(
|
||||
functionsBuilder.put(key, McpConfigFunction.fromJson(functionsJson.getAsJsonObject(key)));
|
||||
}
|
||||
|
||||
return new McpConfigData(data, mappingsPath, official, stepsBuilder.build(), functionsBuilder.build());
|
||||
return new McpConfigData(version, data, mappingsPath, official, stepsBuilder.build(), functionsBuilder.build());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.LoomGradleExtension;
|
||||
import net.fabricmc.loom.configuration.providers.forge.ConfigValue;
|
||||
import net.fabricmc.loom.configuration.providers.forge.ForgeProvider;
|
||||
import net.fabricmc.loom.configuration.providers.forge.mcpconfig.steplogic.ConstantLogic;
|
||||
import net.fabricmc.loom.configuration.providers.forge.mcpconfig.steplogic.DownloadManifestFileLogic;
|
||||
import net.fabricmc.loom.configuration.providers.forge.mcpconfig.steplogic.FunctionLogic;
|
||||
@@ -69,6 +70,7 @@ import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.ForgeToolExecutor;
|
||||
import net.fabricmc.loom.util.download.DownloadBuilder;
|
||||
import net.fabricmc.loom.util.function.CollectionUtil;
|
||||
import net.fabricmc.loom.util.gradle.GradleUtils;
|
||||
|
||||
public final class McpExecutor {
|
||||
private static final LogLevel STEP_LOG_LEVEL = LogLevel.LIFECYCLE;
|
||||
@@ -92,9 +94,35 @@ public final class McpExecutor {
|
||||
this.dependencySet.skip(step -> getStepLogic(step.name(), step.type()) instanceof NoOpLogic);
|
||||
this.dependencySet.setIgnoreDependenciesFilter(step -> getStepLogic(step.name(), step.type()).hasNoContext());
|
||||
|
||||
checkMinecraftVersion(provider);
|
||||
addDefaultFiles(provider, environment);
|
||||
}
|
||||
|
||||
private void checkMinecraftVersion(McpConfigProvider provider) {
|
||||
final String expected = provider.getData().version();
|
||||
final String actual = minecraftProvider.minecraftVersion();
|
||||
|
||||
if (!expected.equals(actual)) {
|
||||
final LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
final ForgeProvider forgeProvider = extension.getForgeProvider();
|
||||
final String message = "%s %s is not for Minecraft %s (expected: %s)."
|
||||
.formatted(
|
||||
extension.getPlatform().get().displayName(),
|
||||
forgeProvider.getVersion().getCombined(),
|
||||
actual,
|
||||
expected
|
||||
);
|
||||
|
||||
if (GradleUtils.getBooleanProperty(project, Constants.Properties.ALLOW_MISMATCHED_PLATFORM_VERSION)) {
|
||||
project.getLogger().warn(message);
|
||||
} else {
|
||||
final String fullMessage = "%s\nYou can suppress this error by adding '%s = true' to gradle.properties."
|
||||
.formatted(message, Constants.Properties.ALLOW_MISMATCHED_PLATFORM_VERSION);
|
||||
throw new UnsupportedOperationException(fullMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addDefaultFiles(McpConfigProvider provider, String environment) {
|
||||
for (Map.Entry<String, JsonElement> entry : provider.getData().data().entrySet()) {
|
||||
if (entry.getValue().isJsonPrimitive()) {
|
||||
|
||||
@@ -28,6 +28,8 @@ import org.objectweb.asm.Opcodes;
|
||||
|
||||
public class Constants {
|
||||
public static final String PLUGIN_ID = "dev.architectury.loom";
|
||||
public static final boolean PLUGIN_BETA = false;
|
||||
public static final boolean PLUGIN_DEPRECATED = false;
|
||||
public static final String LIBRARIES_BASE = "https://libraries.minecraft.net/";
|
||||
public static final String RESOURCES_BASE = "https://resources.download.minecraft.net/";
|
||||
public static final String VERSION_MANIFESTS = "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json";
|
||||
@@ -148,6 +150,7 @@ public class Constants {
|
||||
public static final String DISABLE_REMAPPED_VARIANTS = "fabric.loom.disableRemappedVariants";
|
||||
public static final String DISABLE_PROJECT_DEPENDENT_MODS = "fabric.loom.disableProjectDependentMods";
|
||||
public static final String LIBRARY_PROCESSORS = "fabric.loom.libraryProcessors";
|
||||
public static final String ALLOW_MISMATCHED_PLATFORM_VERSION = "loom.allowMismatchedPlatformVersion";
|
||||
}
|
||||
|
||||
public static final class Manifest {
|
||||
@@ -175,6 +178,13 @@ public class Constants {
|
||||
public static final String ACCESS_TRANSFORMER_PATH = "META-INF/accesstransformer.cfg";
|
||||
public static final String MIXIN_CONFIGS_MANIFEST_KEY = "MixinConfigs";
|
||||
|
||||
/**
|
||||
* The minimum Forge version that needs Union Relauncher to use {@code MOD_CLASSES}.
|
||||
*/
|
||||
public static final int MIN_UNION_RELAUNCHER_VERSION = 49;
|
||||
public static final String UNION_RELAUNCHER_MAIN_CLASS = "juuxel.unionrelauncher.UnionRelauncher";
|
||||
public static final String UNION_RELAUNCHER_MAIN_CLASS_PROPERTY = "unionRelauncher.mainClass";
|
||||
|
||||
private Forge() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 FabricMC
|
||||
* Copyright (c) 2021-2023 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
|
||||
@@ -29,10 +29,10 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import org.cadixdev.at.AccessChange;
|
||||
import org.cadixdev.at.AccessTransform;
|
||||
import org.cadixdev.at.AccessTransformSet;
|
||||
import org.cadixdev.at.ModifierChange;
|
||||
import dev.architectury.at.AccessChange;
|
||||
import dev.architectury.at.AccessTransform;
|
||||
import dev.architectury.at.AccessTransformSet;
|
||||
import dev.architectury.at.ModifierChange;
|
||||
import org.cadixdev.bombe.type.signature.MethodSignature;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
|
||||
@@ -48,7 +48,7 @@ import net.fabricmc.mappingio.tree.MappingTree;
|
||||
*
|
||||
* @author Juuz
|
||||
*/
|
||||
public final class AtRemapper {
|
||||
public final class AtClassRemapper {
|
||||
public static void remap(Project project, Path jar, MappingTree mappings) throws IOException {
|
||||
final Logger logger = project.getLogger();
|
||||
final String sourceNamespace = IntermediaryNamespaces.intermediary(project);
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2022 FabricMC
|
||||
* Copyright (c) 2022-2023 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
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
package net.fabricmc.loom.test.unit.forge
|
||||
|
||||
import org.cadixdev.at.AccessChange
|
||||
import org.cadixdev.at.ModifierChange
|
||||
import dev.architectury.at.AccessChange
|
||||
import dev.architectury.at.ModifierChange
|
||||
import spock.lang.Specification
|
||||
|
||||
import net.fabricmc.accesswidener.AccessWidenerReader
|
||||
|
||||
Reference in New Issue
Block a user