Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.gradle.api.artifacts.ConfigurationContainer;

import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftJar;
import net.fabricmc.loom.configuration.providers.minecraft.mapped.MappedMinecraftProvider;
Expand Down Expand Up @@ -63,5 +64,6 @@ protected final void configureUnpick(GenerateSourcesTask task, File unpickOutput
task.getUnpickConstantJar().setFrom(configurations.getByName(Constants.Configurations.MAPPING_CONSTANTS));
task.getUnpickClasspath().setFrom(configurations.getByName(Constants.Configurations.MINECRAFT_COMPILE_LIBRARIES));
task.getUnpickClasspath().from(configurations.getByName(Constants.Configurations.MOD_COMPILE_CLASSPATH_MAPPED));
extension.getMinecraftJars(MappingsNamespace.NAMED).forEach(task.getUnpickClasspath()::from);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public final void afterEvaluation() {
// Decompiler will be passed to the constructor of GenerateSourcesTask
project.getTasks().register(taskName, GenerateSourcesTask.class, options).configure(task -> {
task.getInputJarName().set(minecraftJar.getName());
task.getOutputJar().fileValue(GenerateSourcesTask.getJarFileWithSuffix("-sources.jar", minecraftJar.getPath()));
task.getSourcesOutputJar().fileValue(GenerateSourcesTask.getJarFileWithSuffix("-sources.jar", minecraftJar.getPath()));

task.dependsOn(project.getTasks().named("validateAccessWidener"));
task.setDescription("Decompile minecraft using %s.".formatted(decompilerName));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void afterEvaluation() {

final TaskProvider<Task> commonDecompileTask = createDecompileTasks("Common", task -> {
task.getInputJarName().set(commonJar.getName());
task.getOutputJar().fileValue(GenerateSourcesTask.getJarFileWithSuffix("-sources.jar", commonJar.getPath()));
task.getSourcesOutputJar().fileValue(GenerateSourcesTask.getJarFileWithSuffix("-sources.jar", commonJar.getPath()));

if (mappingConfiguration.hasUnpickDefinitions()) {
File unpickJar = new File(extension.getMappingConfiguration().mappingsWorkingDir().toFile(), "minecraft-common-unpicked.jar");
Expand All @@ -65,7 +65,7 @@ public void afterEvaluation() {

final TaskProvider<Task> clientOnlyDecompileTask = createDecompileTasks("ClientOnly", task -> {
task.getInputJarName().set(clientOnlyJar.getName());
task.getOutputJar().fileValue(GenerateSourcesTask.getJarFileWithSuffix("-sources.jar", clientOnlyJar.getPath()));
task.getSourcesOutputJar().fileValue(GenerateSourcesTask.getJarFileWithSuffix("-sources.jar", clientOnlyJar.getPath()));

if (mappingConfiguration.hasUnpickDefinitions()) {
File unpickJar = new File(extension.getMappingConfiguration().mappingsWorkingDir().toFile(), "minecraft-clientonly-unpicked.jar");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -76,11 +77,18 @@ public List<MinecraftJar.Type> getDependencyTypes() {

public List<MinecraftJar> provide(ProvideContext context) throws Exception {
final List<RemappedJars> remappedJars = getRemappedJars();
assert !remappedJars.isEmpty();
final List<MinecraftJar> minecraftJars = remappedJars.stream()
.map(RemappedJars::outputJar)
.toList();

if (!areOutputsValid(remappedJars) || context.refreshOutputs()) {
if (remappedJars.isEmpty()) {
throw new IllegalStateException("No remapped jars provided");
}

if (!areOutputsValid(remappedJars) || context.refreshOutputs() || !hasBackupJars(minecraftJars)) {
try {
remapInputs(remappedJars, context.configContext());
createBackupJars(minecraftJars);
} catch (Throwable t) {
cleanOutputs(remappedJars);

Expand All @@ -99,9 +107,29 @@ public List<MinecraftJar> provide(ProvideContext context) throws Exception {
}
}

return remappedJars.stream()
.map(RemappedJars::outputJar)
.toList();
return minecraftJars;
}

// Create two copies of the remapped jar, the backup jar is used as the input of genSources
public static Path getBackupJarPath(MinecraftJar minecraftJar) {
final Path outputJarPath = minecraftJar.getPath();
return outputJarPath.resolveSibling(outputJarPath.getFileName() + ".backup");
}

protected boolean hasBackupJars(List<MinecraftJar> minecraftJars) {
for (MinecraftJar minecraftJar : minecraftJars) {
if (!Files.exists(getBackupJarPath(minecraftJar))) {
return false;
}
}

return true;
}

protected void createBackupJars(List<MinecraftJar> minecraftJars) throws IOException {
for (MinecraftJar minecraftJar : minecraftJars) {
Files.copy(minecraftJar.getPath(), getBackupJarPath(minecraftJar), StandardCopyOption.REPLACE_EXISTING);
}
}

public record ProvideContext(boolean applyDependencies, boolean refreshOutputs, ConfigContext configContext) {
Expand Down Expand Up @@ -234,6 +262,7 @@ public static void configureSplitRemapper(RemappedJars remappedJars, TinyRemappe
private void cleanOutputs(List<RemappedJars> remappedJars) throws IOException {
for (RemappedJars remappedJar : remappedJars) {
Files.deleteIfExists(remappedJar.outputJarPath());
Files.deleteIfExists(getBackupJarPath(remappedJar.outputJar()));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,20 @@ public ProcessedNamedMinecraftProvider(P parentMinecraftProvide, MinecraftJarPro

@Override
public List<MinecraftJar> provide(ProvideContext context) throws Exception {
final List<MinecraftJar> parentMinecraftJars = parentMinecraftProvider.getMinecraftJars();
final Map<MinecraftJar, MinecraftJar> minecraftJarOutputMap = parentMinecraftJars.stream()
.collect(Collectors.toMap(Function.identity(), this::getProcessedJar));
final List<MinecraftJar> minecraftJars = List.copyOf(minecraftJarOutputMap.values());

parentMinecraftProvider.provide(context.withApplyDependencies(false));

boolean requiresProcessing = context.refreshOutputs() || parentMinecraftProvider.getMinecraftJars().stream()
boolean requiresProcessing = context.refreshOutputs() || !hasBackupJars(minecraftJars) || parentMinecraftJars.stream()
.map(this::getProcessedPath)
.anyMatch(jarProcessorManager::requiresProcessingJar);

final Map<MinecraftJar, MinecraftJar> minecraftJarOutputMap = parentMinecraftProvider.getMinecraftJars().stream()
.collect(Collectors.toMap(Function.identity(), this::getProcessedJar));

if (requiresProcessing) {
processJars(minecraftJarOutputMap, context.configContext());
createBackupJars(minecraftJars);
}

if (context.applyDependencies()) {
Expand Down
Loading