diff --git a/build.gradle b/build.gradle index 40bae95..7735038 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,10 @@ repositories { name = 'MinecraftForge' url = 'https://maven.minecraftforge.net/' } + maven { + name = 'FabricMC' + url = 'https://maven.fabricmc.net/' + } gradlePluginPortal() mavenCentral() } @@ -26,6 +30,7 @@ dependencies { implementation 'net.minecraftforge:srgutils:0.4.9' implementation 'org.parchmentmc.feather:io-moshi:1.0.0.3' implementation 'com.google.guava:guava:31.1-jre' + implementation 'net.fabricmc.unpick:unpick-format-utils:2.3.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' diff --git a/src/main/java/org/parchmentmc/compass/tasks/GenerateUnpickData.java b/src/main/java/org/parchmentmc/compass/tasks/GenerateUnpickData.java new file mode 100644 index 0000000..a692ab2 --- /dev/null +++ b/src/main/java/org/parchmentmc/compass/tasks/GenerateUnpickData.java @@ -0,0 +1,47 @@ +package org.parchmentmc.compass.tasks; + +import com.google.common.io.Files; +import daomephsta.unpick.constantmappers.datadriven.parser.v2.UnpickV2Reader; +import daomephsta.unpick.constantmappers.datadriven.parser.v2.UnpickV2Writer; +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +public abstract class GenerateUnpickData extends DefaultTask { + @TaskAction + public void run() throws IOException { + List files = new ArrayList<>(getInputDirectory().getAsFileTree().getFiles()); + files.sort(Comparator.comparing(File::getName)); + + UnpickV2Writer writer = new UnpickV2Writer(); + for (File file : files) { + if (!file.getName().endsWith(".unpick")) { + continue; + } + + try (UnpickV2Reader reader = new UnpickV2Reader(new FileInputStream(file))) { + reader.accept(writer); + } + } + + Files.asCharSink(getOutput().get().getAsFile(), StandardCharsets.UTF_8) + .write(writer.getOutput().replace(System.lineSeparator(), "\n")); + } + + @InputDirectory + public abstract DirectoryProperty getInputDirectory(); + + @OutputFile + public abstract RegularFileProperty getOutput(); +}