diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aed02fc074..6280560b1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,9 @@ jobs: steps: - uses: actions/checkout@v4 - run: ./gradlew build javadocJar checkMappings --stacktrace --warning-mode fail + - run: ./gradlew formatMappings --stacktrace --warning-mode fail + - name: Check mapping format + run: if [ -n "$(git status --porcelain)" ]; then exit 1; fi - name: Build artifacts if: ${{ matrix.java == '21-jdk' }} continue-on-error: true diff --git a/README.md b/README.md index 7b566e17bc..8e35ee26d5 100644 --- a/README.md +++ b/README.md @@ -56,3 +56,6 @@ Downloads the client and server Minecraft jars for the current Minecraft version ### `mergeJars` Merges the client and server jars into one merged jar, located at `VERSION-merged.jar` in the mappings directory where `VERSION` is the current Minecraft version. + +### `formatMappings` +Formats and sorts the mappings, ensuring that they are in a consistent order. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 88fa692086..9b01c1e0d1 100644 --- a/build.gradle +++ b/build.gradle @@ -106,6 +106,7 @@ import net.fabricmc.filament.task.base.WithFileOutput import net.fabricmc.filament.task.enigma.MapSpecializedMethodsTask import net.fabricmc.filament.task.mappingio.CompleteMappingsTask import net.fabricmc.filament.task.mappingio.ConvertMappingsTask +import net.fabricmc.filament.task.mappingio.FormatMappingsTask import net.fabricmc.filament.task.mappingio.MergeMappingsTask import net.fabricmc.mappingio.format.MappingFormat import net.fabricmc.nameproposal.MappingNameCompleter @@ -458,6 +459,10 @@ tasks.register('decompileCFR', JavaExec) { } } +tasks.register("formatMappings", FormatMappingsTask) { + input = file("mappings") +} + javadoc { dependsOn genFakeSource group = "javadoc generation" diff --git a/filament/gradle.properties b/filament/gradle.properties index af3f073a8d..0a148a20aa 100644 --- a/filament/gradle.properties +++ b/filament/gradle.properties @@ -1 +1 @@ -filament_version=0.7.1 \ No newline at end of file +filament_version=0.8.0 \ No newline at end of file diff --git a/filament/src/main/java/net/fabricmc/filament/task/mappingio/FormatMappingsTask.java b/filament/src/main/java/net/fabricmc/filament/task/mappingio/FormatMappingsTask.java new file mode 100644 index 0000000000..ff351f5ee8 --- /dev/null +++ b/filament/src/main/java/net/fabricmc/filament/task/mappingio/FormatMappingsTask.java @@ -0,0 +1,41 @@ +package net.fabricmc.filament.task.mappingio; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Objects; + +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +import net.fabricmc.filament.task.base.FilamentTask; +import net.fabricmc.mappingio.MappingReader; +import net.fabricmc.mappingio.MappingWriter; +import net.fabricmc.mappingio.format.MappingFormat; +import net.fabricmc.mappingio.tree.MemoryMappingTree; +import net.fabricmc.mappingio.tree.VisitOrder; + +public abstract class FormatMappingsTask extends FilamentTask { + @InputDirectory + public abstract DirectoryProperty getInput(); + + @OutputDirectory + protected abstract DirectoryProperty getOutput(); + + public FormatMappingsTask() { + getOutput().set(getInput()); + } + + @TaskAction + void run() throws IOException { + Path path = getInput().get().getAsFile().toPath(); + + MappingWriter writer = MappingWriter.create(path, MappingFormat.ENIGMA_DIR); + Objects.requireNonNull(writer, "writer"); + + MemoryMappingTree tree = new MemoryMappingTree(); + MappingReader.read(path, MappingFormat.ENIGMA_DIR, tree); + tree.accept(writer, VisitOrder.createByName()); + } +}