This should be done now

This commit is contained in:
Juuz
2022-01-19 17:02:55 +02:00
parent 1bedce942e
commit 47cbcbcd36
29 changed files with 339 additions and 116 deletions

View File

@@ -42,6 +42,8 @@ if (!isSnapshot) {
version = baseVersion + "-PR." + System.getenv("PR_NUM") + "." + runNumber
}
version = '0.11.0-juuz.2'
logger.lifecycle(":building plugin v${version}")
repositories {
@@ -244,7 +246,6 @@ publishing {
from components.java
artifact downgradeJava
artifact sourcesJar
}
maven(MavenPublication) { publication ->

View File

@@ -54,9 +54,9 @@ import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider;
import net.fabricmc.loom.extension.LoomFiles;
import net.fabricmc.loom.extension.MixinExtension;
import net.fabricmc.loom.util.FunnyTodoException;
public interface LoomGradleExtension extends LoomGradleExtensionAPI {
static LoomGradleExtension get(Project project) {
@@ -108,12 +108,16 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI {
void setIntermediaryMinecraftProvider(IntermediaryMinecraftProvider<?> intermediaryMinecraftProvider);
SrgMinecraftProvider<?> getSrgMinecraftProvider();
void setSrgMinecraftProvider(SrgMinecraftProvider<?> srgMinecraftProvider);
default List<Path> getMinecraftJars(MappingsNamespace mappingsNamespace) {
return switch (mappingsNamespace) {
case NAMED -> getNamedMinecraftProvider().getMinecraftJars();
case INTERMEDIARY -> getIntermediaryMinecraftProvider().getMinecraftJars();
case OFFICIAL -> getMinecraftProvider().getMinecraftJars();
case SRG -> throw new FunnyTodoException("SRG minecraft jars");
case SRG -> getSrgMinecraftProvider().getMinecraftJars();
};
}

View File

@@ -25,6 +25,7 @@
package net.fabricmc.loom.configuration;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Set;
@@ -32,7 +33,6 @@ import org.gradle.api.NamedDomainObjectProvider;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.AbstractCopyTask;
import org.gradle.api.tasks.SourceSet;
@@ -61,8 +61,11 @@ import net.fabricmc.loom.configuration.providers.minecraft.MinecraftJarConfigura
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider;
import net.fabricmc.loom.configuration.sources.ForgeSourcesRemapper;
import net.fabricmc.loom.extension.MixinExtension;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.OperatingSystem;
public final class CompileConfiguration {
private CompileConfiguration() {
@@ -77,7 +80,7 @@ public final class CompileConfiguration {
}
if (extension.isDataGenEnabled()) {
project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName("main").resources(files -> {
project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().getByName("main").resources(files -> {
files.srcDir(project.file("src/generated/resources"));
});
}
@@ -192,8 +195,8 @@ public final class CompileConfiguration {
project.getDependencies().add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Dependencies.JETBRAINS_ANNOTATIONS + Constants.Dependencies.Versions.JETBRAINS_ANNOTATIONS);
if (extension.isForge()) {
project.getDependencies().add(Constants.Dependencies.FORGE_RUNTIME + Constants.Dependencies.Versions.FORGE_RUNTIME, Constants.Configurations.FORGE_EXTRA);
project.getDependencies().add(Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS, JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME);
project.getDependencies().add(Constants.Configurations.FORGE_EXTRA, Constants.Dependencies.FORGE_RUNTIME + Constants.Dependencies.Versions.FORGE_RUNTIME);
project.getDependencies().add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Dependencies.JAVAX_ANNOTATIONS + Constants.Dependencies.Versions.JAVAX_ANNOTATIONS);
}
}
@@ -213,27 +216,8 @@ public final class CompileConfiguration {
throw new RuntimeException("Failed to setup minecraft", e);
}
DependencyProviders dependencyProviders = new DependencyProviders();
LoomDependencyManager dependencyManager = new LoomDependencyManager();
extension.setDependencyProviders(dependencyProviders);
extension.setDependencyManager(dependencyManager);
if (extension.isForge()) {
dependencyProviders.addProvider(new ForgeProvider(project));
dependencyProviders.addProvider(new ForgeUserdevProvider(project));
}
if (extension.shouldGenerateSrgTiny()) {
dependencyProviders.addProvider(new SrgProvider(project));
}
if (extension.isForge()) {
dependencyProviders.addProvider(new McpConfigProvider(project));
dependencyProviders.addProvider(new PatchProvider(project));
dependencyProviders.addProvider(new ForgeUniversalProvider(project));
}
dependencyProviders.handleDependencies(project);
dependencyManager.handleDependencies(project);
extension.getRemapArchives().finalizeValue();
@@ -286,6 +270,10 @@ public final class CompileConfiguration {
extension.setMappingsProvider(mappingsProvider);
mappingsProvider.applyToProject(project, mappingsDep);
if (minecraftProvider instanceof MinecraftPatchedProvider patched) {
patched.remapJar();
}
// Provide the remapped mc jars
final IntermediaryMinecraftProvider<?> intermediaryMinecraftProvider = jarConfiguration.getIntermediaryMinecraftProviderBiFunction().apply(project, minecraftProvider);
NamedMinecraftProvider<?> namedMinecraftProvider = jarConfiguration.getNamedMinecraftProviderBiFunction().apply(project, minecraftProvider);
@@ -302,6 +290,20 @@ public final class CompileConfiguration {
extension.setNamedMinecraftProvider(namedMinecraftProvider);
namedMinecraftProvider.provide(true);
if (extension.isForge()) {
final SrgMinecraftProvider<?> srgMinecraftProvider = jarConfiguration.getSrgMinecraftProviderBiFunction().apply(project, minecraftProvider);
extension.setSrgMinecraftProvider(srgMinecraftProvider);
// TODO: Find a better place for this?
if (!OperatingSystem.isCIBuild()) {
try {
ForgeSourcesRemapper.addBaseForgeSources(project);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static JarProcessorManager createJarProcessorManager(Project project) {
@@ -379,4 +381,26 @@ public final class CompileConfiguration {
private static void finalizedBy(Project project, String a, String b) {
project.getTasks().named(a).configure(task -> task.finalizedBy(project.getTasks().named(b)));
}
public static void setupDependencyProviders(Project project, LoomGradleExtension extension) {
DependencyProviders dependencyProviders = new DependencyProviders();
extension.setDependencyProviders(dependencyProviders);
if (extension.isForge()) {
dependencyProviders.addProvider(new ForgeProvider(project));
dependencyProviders.addProvider(new ForgeUserdevProvider(project));
}
if (extension.shouldGenerateSrgTiny()) {
dependencyProviders.addProvider(new SrgProvider(project));
}
if (extension.isForge()) {
dependencyProviders.addProvider(new McpConfigProvider(project));
dependencyProviders.addProvider(new PatchProvider(project));
dependencyProviders.addProvider(new ForgeUniversalProvider(project));
}
dependencyProviders.handleDependencies(project);
}
}

View File

@@ -75,6 +75,10 @@ public class LoomDependencyManager {
}
}
}
if (extension.getInstallerData() == null) {
project.getLogger().warn("fabric-installer.json not found in classpath!");
}
}
SourceRemapper sourceRemapper = new SourceRemapper(project, true);
@@ -85,10 +89,6 @@ public class LoomDependencyManager {
sourceRemapper.remapAll();
if (extension.getInstallerData() == null) {
project.getLogger().warn("fabric-installer.json not found in classpath!");
}
for (Runnable runnable : afterTasks) {
runnable.run();
}

View File

@@ -112,7 +112,8 @@ public final class AccessTransformerJarProcessor implements JarProcessor {
@Override
public void process(File file) {
try {
Path tempInput = Files.createTempFile(null, "loom-at.jar");
Path tempDir = Files.createTempDirectory("loom-access-transforming");
Path tempInput = tempDir.resolve("input.jar");
Files.copy(file.toPath(), tempInput);
executeAt(project, tempInput, file.toPath(), args -> {
@@ -123,6 +124,7 @@ public final class AccessTransformerJarProcessor implements JarProcessor {
});
Files.delete(tempInput);
Files.delete(tempDir);
} catch (IOException e) {
throw new UncheckedIOException("Could not access transform " + file.getAbsolutePath(), e);
}

View File

@@ -174,16 +174,10 @@ public class ModProcessor {
final TinyRemapper remapper = builder.build();
for (Path minecraftJar : extension.getMinecraftJars(MappingsNamespace.INTERMEDIARY)) {
for (Path minecraftJar : extension.getMinecraftJars(extension.isForge() ? MappingsNamespace.SRG : MappingsNamespace.INTERMEDIARY)) {
remapper.readClassPathAsync(minecraftJar);
}
remapper.readClassPathAsync(intermediaryJar);
if (extension.isForgeAndNotOfficial()) {
remapper.readClassPathAsync(mappedProvider.getForgeSrgJar().toPath());
}
remapper.readClassPathAsync(mcDeps);
final Map<ModDependencyInfo, InputTag> tagMap = new HashMap<>();

View File

@@ -25,6 +25,7 @@
package net.fabricmc.loom.configuration.providers.forge;
import java.io.File;
import java.util.function.Consumer;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Dependency;
@@ -44,7 +45,7 @@ public abstract class DependencyProvider {
this.extension = LoomGradleExtension.get(project);
}
public abstract void provide(DependencyInfo dependency) throws Exception;
public abstract void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception;
public abstract String getTargetConfig();

View File

@@ -1,3 +1,27 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2022 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package net.fabricmc.loom.configuration.providers.forge;
import java.util.ArrayList;
@@ -82,7 +106,7 @@ public class DependencyProviders {
DependencyInfo info = DependencyInfo.create(project, dependency, configuration);
try {
provider.provide(info);
provider.provide(info, afterTasks::add);
} catch (Exception e) {
throw new RuntimeException("Failed to provide " + dependency.getGroup() + ":" + dependency.getName() + ":" + dependency.getVersion() + " : " + e.toString(), e);
}

View File

@@ -25,6 +25,7 @@
package net.fabricmc.loom.configuration.providers.forge;
import java.io.File;
import java.util.function.Consumer;
import org.gradle.api.Project;
@@ -41,7 +42,7 @@ public class ForgeProvider extends DependencyProvider {
}
@Override
public void provide(DependencyInfo dependency) throws Exception {
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
version = new ForgeVersion(dependency.getResolvedVersion());
addDependency(dependency.getDepString() + ":userdev", Constants.Configurations.FORGE_USERDEV);
addDependency(dependency.getDepString() + ":installer", Constants.Configurations.FORGE_INSTALLER);

View File

@@ -25,6 +25,7 @@
package net.fabricmc.loom.configuration.providers.forge;
import java.io.File;
import java.util.function.Consumer;
import org.apache.commons.io.FileUtils;
import org.gradle.api.Project;
@@ -40,7 +41,7 @@ public class ForgeUniversalProvider extends DependencyProvider {
}
@Override
public void provide(DependencyInfo dependency) throws Exception {
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
forge = new File(getExtension().getForgeProvider().getGlobalCache(), "forge-universal.jar");
if (!forge.exists() || isRefreshDeps()) {

View File

@@ -78,7 +78,7 @@ public class ForgeUserdevProvider extends DependencyProvider {
}
@Override
public void provide(DependencyInfo dependency) throws Exception {
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
this.postPopulationScheduler = postPopulationScheduler;
Attribute<Boolean> transformed = Attribute.of("architectury-loom-forge-dependencies-transformed", Boolean.class);

View File

@@ -33,6 +33,7 @@ import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.function.Consumer;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import java.util.stream.Collectors;
@@ -62,7 +63,7 @@ public class McpConfigProvider extends DependencyProvider {
}
@Override
public void provide(DependencyInfo dependency) throws Exception {
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
init(dependency.getDependency().getVersion());
Path mcpZip = dependency.resolveFile().orElseThrow(() -> new RuntimeException("Could not resolve MCPConfig")).toPath();

View File

@@ -1,3 +1,27 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2020-2022 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package net.fabricmc.loom.configuration.providers.forge;
import java.io.ByteArrayInputStream;
@@ -30,7 +54,6 @@ import java.util.jar.Manifest;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableList;
@@ -86,7 +109,8 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
// Step 5: Remap Patched AT & Forge to Official
private File minecraftMergedPatchedJar;
@Nullable
private File forgeMergedJar;
@Deprecated
private final File forgeMergedJar = null; // TODO: Remove
private File minecraftClientExtra;
private boolean dirty;
@@ -109,10 +133,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
super(project);
}
@Override
protected void initFiles() {
super.initFiles();
private void initPatchedFiles() {
String patchId = "forge-" + getExtension().getForgeProvider().getVersion().getCombined() + "-";
if (getExtension().isForgeAndOfficial()) {
@@ -124,12 +145,19 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
minecraftClientPatchedSrgJar = file("client-srg-patched.jar");
minecraftServerPatchedSrgJar = file("server-srg-patched.jar");
minecraftMergedPatchedSrgJar = file("merged-srg-patched.jar");
forgeMergedJar = getExtension().isForgeAndOfficial() ? null : file("forge-official.jar");
minecraftMergedPatchedSrgAtJar = file("merged-srg-at-patched.jar");
minecraftMergedPatchedJar = file("merged-patched.jar");
minecraftClientExtra = file("forge-client-extra.jar");
}
private File getEffectiveServerJar() {
if (getServerBundleMetadata() != null) {
return getMinecraftExtractedServerJar();
} else {
return getMinecraftServerJar();
}
}
public void cleanAllCache() {
for (File file : getGlobalCaches()) {
file.delete();
@@ -166,6 +194,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
@Override
public void provide() throws Exception {
super.provide();
initPatchedFiles();
checkCache();
this.dirty = false;
@@ -193,7 +222,9 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
if (forgeMergedJar != null && !forgeMergedJar.exists()) {
this.dirty = true;
}
}
public void remapJar() throws Exception {
if (dirty) {
remapPatchedJar(getProject().getLogger());
@@ -245,7 +276,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
}
private void createSrgJars(Logger logger) throws Exception {
produceSrgJar(getExtension().isForgeAndOfficial(), super.getMinecraftClientJar().toPath(), MoreObjects.firstNonNull(super.getMinecraftExtractedServerJar(), super.getMinecraftServerJar()).toPath());
produceSrgJar(getExtension().isForgeAndOfficial(), super.getMinecraftClientJar().toPath(), getEffectiveServerJar().toPath());
}
private void produceSrgJar(boolean official, Path clientJar, Path serverJar) throws IOException {
@@ -529,7 +560,7 @@ public class MinecraftPatchedProvider extends MergedMinecraftProvider {
if (getExtension().isForgeAndNotOfficial()) {
// Copy resources
copyNonClassFiles(super.getMinecraftClientJar(), minecraftMergedPatchedSrgJar);
copyNonClassFiles(MoreObjects.firstNonNull(super.getMinecraftExtractedServerJar(), super.getMinecraftServerJar()), minecraftMergedPatchedSrgJar);
copyNonClassFiles(getEffectiveServerJar(), minecraftMergedPatchedSrgJar);
}
}

View File

@@ -32,6 +32,7 @@ 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 org.gradle.api.Project;
@@ -49,7 +50,7 @@ public class PatchProvider extends DependencyProvider {
}
@Override
public void provide(DependencyInfo dependency) throws Exception {
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
init(dependency.getDependency().getVersion());
if (Files.notExists(clientPatches) || Files.notExists(serverPatches) || isRefreshDeps()) {

View File

@@ -41,6 +41,7 @@ import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableMap;
@@ -79,7 +80,7 @@ public class SrgProvider extends DependencyProvider {
}
@Override
public void provide(DependencyInfo dependency) throws Exception {
public void provide(DependencyInfo dependency, Consumer<Runnable> postPopulationScheduler) throws Exception {
init(dependency.getDependency().getVersion());
if (!Files.exists(srg) || isRefreshDeps()) {

View File

@@ -333,7 +333,9 @@ public class MappingsProviderImpl implements MappingsProvider, SharedService {
provider = new SrgProvider(project);
project.getDependencies().add(provider.getTargetConfig(), "de.oceanlabs.mcp:mcp_config:" + extension.getMinecraftProvider().minecraftVersion());
Configuration configuration = project.getConfigurations().getByName(provider.getTargetConfig());
provider.provide(DependencyInfo.create(project, configuration.getDependencies().iterator().next(), configuration));
provider.provide(DependencyInfo.create(project, configuration.getDependencies().iterator().next(), configuration), runnable -> {
throw new UnsupportedOperationException("No postPopulationScheduler available");
});
}
Path srgPath = getRawSrgFile(project);

View File

@@ -39,12 +39,14 @@ import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMi
import net.fabricmc.loom.configuration.providers.minecraft.mapped.MappedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.ProcessedNamedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider;
public enum MinecraftJarConfiguration {
MERGED(
MinecraftPatchedProvider::createMergedMinecraftProvider,
IntermediaryMinecraftProvider.MergedImpl::new,
NamedMinecraftProvider.MergedImpl::new,
SrgMinecraftProvider.MergedImpl::new,
ProcessedNamedMinecraftProvider.MergedImpl::new,
SingleJarDecompileConfiguration::new,
List.of("client", "server")
@@ -53,6 +55,7 @@ public enum MinecraftJarConfiguration {
ServerOnlyMinecraftProvider::new,
IntermediaryMinecraftProvider.ServerOnlyImpl::new,
NamedMinecraftProvider.ServerOnlyImpl::new,
SrgMinecraftProvider.ServerOnlyImpl::new,
ProcessedNamedMinecraftProvider.ServerOnlyImpl::new,
SingleJarDecompileConfiguration::new,
List.of("server")
@@ -61,6 +64,7 @@ public enum MinecraftJarConfiguration {
SplitMinecraftProvider::new,
IntermediaryMinecraftProvider.SplitImpl::new,
NamedMinecraftProvider.SplitImpl::new,
SrgMinecraftProvider.SplitImpl::new,
ProcessedNamedMinecraftProvider.SplitImpl::new,
SplitDecompileConfiguration::new,
List.of("client", "server")
@@ -69,6 +73,7 @@ public enum MinecraftJarConfiguration {
private final Function<Project, MinecraftProvider> minecraftProviderFunction;
private final BiFunction<Project, MinecraftProvider, IntermediaryMinecraftProvider<?>> intermediaryMinecraftProviderBiFunction;
private final BiFunction<Project, MinecraftProvider, NamedMinecraftProvider<?>> namedMinecraftProviderBiFunction;
private final BiFunction<Project, MinecraftProvider, SrgMinecraftProvider<?>> srgMinecraftProviderBiFunction;
private final BiFunction<NamedMinecraftProvider<?>, JarProcessorManager, ProcessedNamedMinecraftProvider<?, ?>> processedNamedMinecraftProviderBiFunction;
private final BiFunction<Project, MappedMinecraftProvider, DecompileConfiguration<?>> decompileConfigurationBiFunction;
private final List<String> supportedEnvironments;
@@ -78,6 +83,7 @@ public enum MinecraftJarConfiguration {
Function<Project, M> minecraftProviderFunction,
BiFunction<Project, M, IntermediaryMinecraftProvider<M>> intermediaryMinecraftProviderBiFunction,
BiFunction<Project, M, P> namedMinecraftProviderBiFunction,
BiFunction<Project, M, SrgMinecraftProvider<M>> srgMinecraftProviderBiFunction,
BiFunction<P, JarProcessorManager, ProcessedNamedMinecraftProvider<M, P>> processedNamedMinecraftProviderBiFunction,
BiFunction<Project, Q, DecompileConfiguration<?>> decompileConfigurationBiFunction,
List<String> supportedEnvironments
@@ -85,6 +91,7 @@ public enum MinecraftJarConfiguration {
this.minecraftProviderFunction = (Function<Project, MinecraftProvider>) minecraftProviderFunction;
this.intermediaryMinecraftProviderBiFunction = (BiFunction<Project, MinecraftProvider, IntermediaryMinecraftProvider<?>>) (Object) intermediaryMinecraftProviderBiFunction;
this.namedMinecraftProviderBiFunction = (BiFunction<Project, MinecraftProvider, NamedMinecraftProvider<?>>) namedMinecraftProviderBiFunction;
this.srgMinecraftProviderBiFunction = (BiFunction<Project, MinecraftProvider, SrgMinecraftProvider<?>>) (Object) srgMinecraftProviderBiFunction;
this.processedNamedMinecraftProviderBiFunction = (BiFunction<NamedMinecraftProvider<?>, JarProcessorManager, ProcessedNamedMinecraftProvider<?, ?>>) (Object) processedNamedMinecraftProviderBiFunction;
this.decompileConfigurationBiFunction = (BiFunction<Project, MappedMinecraftProvider, DecompileConfiguration<?>>) decompileConfigurationBiFunction;
this.supportedEnvironments = supportedEnvironments;
@@ -110,6 +117,10 @@ public enum MinecraftJarConfiguration {
return decompileConfigurationBiFunction;
}
public BiFunction<Project, MinecraftProvider, SrgMinecraftProvider<?>> getSrgMinecraftProviderBiFunction() {
return srgMinecraftProviderBiFunction;
}
public List<String> getSupportedEnvironments() {
return supportedEnvironments;
}

View File

@@ -42,6 +42,7 @@ import org.jetbrains.annotations.Nullable;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.LoomGradlePlugin;
import net.fabricmc.loom.configuration.CompileConfiguration;
import net.fabricmc.loom.configuration.DependencyInfo;
import net.fabricmc.loom.configuration.providers.BundleMetadata;
import net.fabricmc.loom.util.Constants;
@@ -79,7 +80,7 @@ public abstract class MinecraftProvider {
minecraftVersion = dependency.getDependency().getVersion();
if (getExtension().shouldGenerateSrgTiny() && !getExtension().isForge()) {
getProject().getDependencies().add("de.oceanlabs.mcp:mcp_config:" + minecraftVersion, Constants.Configurations.SRG);
getProject().getDependencies().add(Constants.Configurations.SRG, "de.oceanlabs.mcp:mcp_config:" + minecraftVersion);
}
boolean offline = getProject().getGradle().getStartParameter().isOffline();
@@ -106,6 +107,12 @@ public abstract class MinecraftProvider {
libraryProvider = new MinecraftLibraryProvider();
libraryProvider.provide(this, getProject());
// TODO: Find a better place for this. This needs to run after MinecraftProvider.initFiles
// but before MinecraftPatchedProvider.provide, so it's a bit tough.
// Honestly, the ForgeProvider stuff that uses the results of initFiles could be moved to
// MinecraftPatchedProvider.
CompileConfiguration.setupDependencyProviders(getProject(), getExtension());
}
protected void initFiles() {

View File

@@ -89,11 +89,11 @@ public abstract class AbstractMappedMinecraftProvider<M extends MinecraftProvide
}
protected String getName(String name) {
return "minecraft-%s-%s".formatted(name, getTargetNamespace().toString());
return "%sminecraft-%s-%s".formatted(minecraftProvider.getJarPrefix(), name, getTargetNamespace().toString());
}
protected String getDependencyNotation(String name) {
return "net.minecraft:%s%s:%s/%s".formatted(getName(name), extension.getMinecraftProvider().getJarPrefix(), extension.getMinecraftProvider().minecraftVersion(), extension.getMappingsProvider().mappingsIdentifier());
return "net.minecraft:%s:%s/%s".formatted(getName(name), extension.getMinecraftProvider().minecraftVersion(), extension.getMappingsProvider().mappingsIdentifier());
}
private boolean areOutputsValid(List<RemappedJars> remappedJars) {

View File

@@ -0,0 +1,101 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2022 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package net.fabricmc.loom.configuration.providers.minecraft.mapped;
import java.nio.file.Path;
import java.util.List;
import dev.architectury.tinyremapper.TinyRemapper;
import org.gradle.api.Project;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.configuration.providers.minecraft.MergedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.ServerOnlyMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.SplitMinecraftProvider;
import net.fabricmc.loom.util.SidedClassVisitor;
public abstract sealed class SrgMinecraftProvider<M extends MinecraftProvider> extends AbstractMappedMinecraftProvider<M> permits SrgMinecraftProvider.MergedImpl, SrgMinecraftProvider.ServerOnlyImpl, SrgMinecraftProvider.SplitImpl {
public SrgMinecraftProvider(Project project, M minecraftProvider) {
super(project, minecraftProvider);
}
@Override
protected Path getDirectory() {
return extension.getMinecraftProvider().workingDir().toPath();
}
@Override
public final MappingsNamespace getTargetNamespace() {
return MappingsNamespace.SRG;
}
public static final class MergedImpl extends SrgMinecraftProvider<MergedMinecraftProvider> implements Merged {
public MergedImpl(Project project, MergedMinecraftProvider minecraftProvider) {
super(project, minecraftProvider);
}
@Override
public List<RemappedJars> getRemappedJars() {
return List.of(
new RemappedJars(minecraftProvider.getMergedJar(), getMergedJar(), MappingsNamespace.OFFICIAL)
);
}
}
public static final class SplitImpl extends SrgMinecraftProvider<SplitMinecraftProvider> implements Split {
public SplitImpl(Project project, SplitMinecraftProvider minecraftProvider) {
super(project, minecraftProvider);
}
@Override
public List<RemappedJars> getRemappedJars() {
return List.of(
new RemappedJars(minecraftProvider.getMinecraftCommonJar(), getCommonJar(), MappingsNamespace.OFFICIAL),
new RemappedJars(minecraftProvider.getMinecraftClientOnlyJar(), getClientOnlyJar(), MappingsNamespace.OFFICIAL, minecraftProvider.getMinecraftCommonJar())
);
}
@Override
protected void configureRemapper(RemappedJars remappedJars, TinyRemapper.Builder tinyRemapperBuilder) {
if (remappedJars.outputJar().equals(getClientOnlyJar())) {
tinyRemapperBuilder.extraPostApplyVisitor(SidedClassVisitor.CLIENT);
}
}
}
public static final class ServerOnlyImpl extends SrgMinecraftProvider<ServerOnlyMinecraftProvider> implements ServerOnly {
public ServerOnlyImpl(Project project, ServerOnlyMinecraftProvider minecraftProvider) {
super(project, minecraftProvider);
}
@Override
public List<RemappedJars> getRemappedJars() {
return List.of(
new RemappedJars(minecraftProvider.getMinecraftServerOnlyJar(), getServerOnlyJar(), MappingsNamespace.OFFICIAL)
);
}
}
}

View File

@@ -50,6 +50,7 @@ import org.gradle.api.logging.LogLevel;
import org.gradle.api.logging.configuration.ShowStacktrace;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.build.ModCompileRemapper;
import net.fabricmc.loom.task.GenerateSourcesTask;
import net.fabricmc.loom.util.Constants;
@@ -62,8 +63,21 @@ import net.fabricmc.loom.util.ZipUtils;
import net.fabricmc.lorenztiny.TinyMappingsReader;
public class ForgeSourcesRemapper {
public static void addBaseForgeSources(Project project, boolean isOfficial) throws IOException {
Path sourcesJar = GenerateSourcesTask.getMappedJarFileWithSuffix(project, "-sources.jar", !isOfficial).toPath();
public static void addBaseForgeSources(Project project) throws IOException {
List<Path> minecraftJars = LoomGradleExtension.get(project).getMinecraftJars(MappingsNamespace.NAMED);
Path minecraftJar;
if (minecraftJars.isEmpty()) {
// ???
throw new IllegalStateException("Could not find Minecraft jar for Forge sources");
} else if (minecraftJars.size() > 1) {
// Cannot add Forge sources to split jars
return;
} else {
minecraftJar = minecraftJars.get(0);
}
Path sourcesJar = GenerateSourcesTask.getMappedJarFileWithSuffix(minecraftJar.toFile(), "-sources.jar").toPath();
if (!Files.exists(sourcesJar)) {
addForgeSources(project, sourcesJar);
@@ -202,11 +216,7 @@ public class ForgeSourcesRemapper {
}
// Distinct and add the srg jar at the top, so it gets prioritized
mercury.getClassPath().add(0, extension.getMinecraftMappedProvider().getSrgJar().toPath());
if (extension.isForgeAndNotOfficial()) {
mercury.getClassPath().add(0, extension.getMinecraftMappedProvider().getForgeSrgJar().toPath());
}
mercury.getClassPath().addAll(0, extension.getMinecraftJars(MappingsNamespace.SRG));
List<Path> newClassPath = mercury.getClassPath().stream()
.distinct()

View File

@@ -33,9 +33,6 @@ import java.util.Objects;
import java.util.function.Supplier;
import com.google.common.base.Suppliers;
import net.fabricmc.loom.configuration.providers.forge.DependencyProviders;
import org.cadixdev.lorenz.MappingSet;
import org.cadixdev.mercury.Mercury;
import org.gradle.api.Action;
@@ -46,16 +43,18 @@ import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.FileCollection;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.api.ForgeExtensionAPI;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.configuration.InstallerData;
import net.fabricmc.loom.configuration.LoomDependencyManager;
import net.fabricmc.loom.configuration.accesswidener.AccessWidenerFile;
import net.fabricmc.loom.configuration.processors.JarProcessorManager;
import net.fabricmc.loom.configuration.providers.forge.DependencyProviders;
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.IntermediaryMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.NamedMinecraftProvider;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.SrgMinecraftProvider;
import net.fabricmc.loom.util.ModPlatform;
import net.fabricmc.loom.util.function.LazyBool;
@@ -77,6 +76,7 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
private MappingsProviderImpl mappingsProvider;
private NamedMinecraftProvider<?> namedMinecraftProvider;
private IntermediaryMinecraftProvider<?> intermediaryMinecraftProvider;
private SrgMinecraftProvider<?> srgMinecraftProvider;
private InstallerData installerData;
// +-------------------+
@@ -167,6 +167,16 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
this.intermediaryMinecraftProvider = intermediaryMinecraftProvider;
}
@Override
public SrgMinecraftProvider<?> getSrgMinecraftProvider() {
return Objects.requireNonNull(srgMinecraftProvider, "Cannot get SrgMinecraftProvider before it has been setup");
}
@Override
public void setSrgMinecraftProvider(SrgMinecraftProvider<?> srgMinecraftProvider) {
this.srgMinecraftProvider = srgMinecraftProvider;
}
@Override
public FileCollection getMinecraftJarsCollection(MappingsNamespace mappingsNamespace) {
return getProject().files(

View File

@@ -1,3 +1,27 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
* Copyright (c) 2022 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
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package net.fabricmc.loom.task;
import org.gradle.api.Task;

View File

@@ -295,7 +295,11 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask implements De
}
static File getMappedJarFileWithSuffix(RegularFileProperty runtimeJar, String suffix) {
String path = runtimeJar.get().getAsFile().getAbsolutePath();
return getMappedJarFileWithSuffix(runtimeJar.get().getAsFile(), suffix);
}
public static File getMappedJarFileWithSuffix(File runtimeJar, String suffix) {
String path = runtimeJar.getAbsolutePath();
if (!path.toLowerCase(Locale.ROOT).endsWith(".jar")) {
throw new RuntimeException("Invalid mapped JAR path: " + path);

View File

@@ -34,9 +34,6 @@ import java.util.Set;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import net.fabricmc.loom.util.FunnyTodoException;
import org.cadixdev.lorenz.MappingSet;
import org.cadixdev.mercury.Mercury;
import org.cadixdev.mercury.remapper.MercuryRemapper;
@@ -184,16 +181,9 @@ public class MigrateMappingsTask extends AbstractLoomTask {
mercury.getClassPath().add(intermediaryJar);
}
FunnyTodoException.yes("Forge jars");
/*if (extension.isForge()) {
mercury.getClassPath().add(minecraftMappedProvider.getSrgJar().toPath());
if (extension.isForgeAndNotOfficial()) {
mercury.getClassPath().add(minecraftMappedProvider.getForgeMappedJar().toPath());
mercury.getClassPath().add(minecraftMappedProvider.getForgeIntermediaryJar().toPath());
mercury.getClassPath().add(minecraftMappedProvider.getForgeSrgJar().toPath());
}
}*/
for (Path srgJar : extension.getMinecraftJars(MappingsNamespace.SRG)) {
mercury.getClassPath().add(srgJar);
}
mercury.getProcessors().add(MercuryRemapper.create(mappingSet));

View File

@@ -41,8 +41,8 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;
import java.util.Set;
import java.util.function.Supplier;
import java.util.jar.Manifest;
import java.util.stream.Collectors;
@@ -53,11 +53,6 @@ import com.google.common.base.Suppliers;
import com.google.gson.JsonObject;
import dev.architectury.tinyremapper.OutputConsumerPath;
import dev.architectury.tinyremapper.TinyRemapper;
import net.fabricmc.loom.task.service.MappingsService;
import net.fabricmc.loom.util.FunnyTodoException;
import org.cadixdev.at.AccessTransformSet;
import org.cadixdev.at.io.AccessTransformFormats;
import org.cadixdev.lorenz.MappingSet;
@@ -67,7 +62,6 @@ import org.gradle.api.file.FileCollection;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.provider.SetProperty;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFiles;
@@ -87,14 +81,15 @@ import net.fabricmc.loom.build.nesting.JarNester;
import net.fabricmc.loom.configuration.accesswidener.AccessWidenerFile;
import net.fabricmc.loom.extension.MixinExtension;
import net.fabricmc.loom.task.service.JarManifestService;
import net.fabricmc.loom.task.service.MappingsService;
import net.fabricmc.loom.task.service.TinyRemapperService;
import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.FileSystemUtil;
import net.fabricmc.loom.util.LfWriter;
import net.fabricmc.loom.util.ZipUtils;
import net.fabricmc.loom.util.aw2at.Aw2At;
import net.fabricmc.lorenztiny.TinyMappingsReader;
import net.fabricmc.loom.util.service.UnsafeWorkQueueHelper;
import net.fabricmc.lorenztiny.TinyMappingsReader;
public abstract class RemapJarTask extends AbstractRemapJarTask {
private static final String MANIFEST_PATH = "META-INF/MANIFEST.MF";
@@ -125,8 +120,10 @@ public abstract class RemapJarTask extends AbstractRemapJarTask {
getClasspath().from(getProject().getConfigurations().getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME));
getAddNestedDependencies().convention(true).finalizeValueOnRead();
Configuration includeConfiguration = getProject().getConfigurations().getByName(Constants.Configurations.INCLUDE);
getNestedJars().from(new IncludedJarFactory(getProject()).getNestedJars(includeConfiguration));
if (LoomGradleExtension.get(getProject()).supportsInclude()) {
Configuration includeConfiguration = getProject().getConfigurations().getByName(Constants.Configurations.INCLUDE);
getNestedJars().from(new IncludedJarFactory(getProject()).getNestedJars(includeConfiguration));
}
setupPreparationTask();
}

View File

@@ -56,10 +56,6 @@ public abstract class GenerateRemapClasspathTask extends AbstractLoomTask {
remapClasspath.add(minecraftJar.toFile());
}
if (getExtension().isForgeAndNotOfficial()) {
remapClasspath.add(getExtension().getMinecraftMappedProvider().getForgeIntermediaryJar());
}
String str = remapClasspath.stream()
.map(File::getAbsolutePath)
.collect(Collectors.joining(File.pathSeparator));

View File

@@ -1,12 +0,0 @@
package net.fabricmc.loom.util;
@Deprecated
public class FunnyTodoException extends UnsupportedOperationException {
public FunnyTodoException(String message) {
super("TODO: " + message);
}
public static void yes(String message) {
throw new FunnyTodoException(message);
}
}

View File

@@ -40,6 +40,7 @@ import org.gradle.api.Project;
import org.slf4j.Logger;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.configuration.RemappedConfigurationEntry;
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
import net.fabricmc.loom.util.gradle.ProgressLoggerHelper;
@@ -211,12 +212,8 @@ public class SourceRemapper {
}
if (extension.isForge()) {
m.getClassPath().add(extension.getMinecraftMappedProvider().getSrgJar().toPath());
if (extension.isForgeAndNotOfficial()) {
m.getClassPath().add(extension.getMinecraftMappedProvider().getForgeMappedJar().toPath());
m.getClassPath().add(extension.getMinecraftMappedProvider().getForgeIntermediaryJar().toPath());
m.getClassPath().add(extension.getMinecraftMappedProvider().getForgeSrgJar().toPath());
for (Path srgJar : extension.getMinecraftJars(MappingsNamespace.SRG)) {
m.getClassPath().add(srgJar);
}
}