diff --git a/gradle.properties b/gradle.properties index 13f81e2..194929d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ -version=1.4 -release=false -org.gradle.configuration-cache=true +version=1.5 +release=false +org.gradle.configuration-cache=true diff --git a/src/main/java/com/minecrafttas/discombobulator/Discombobulator.java b/src/main/java/com/minecrafttas/discombobulator/Discombobulator.java index 446819f..3aa415d 100644 --- a/src/main/java/com/minecrafttas/discombobulator/Discombobulator.java +++ b/src/main/java/com/minecrafttas/discombobulator/Discombobulator.java @@ -80,6 +80,11 @@ public class Discombobulator implements Plugin { */ private static String discoVersion; + /** + * Versions where the accessor is changed to official mappings + */ + public static List accessWidenerOfficialList = new ArrayList<>(); + /** * Apply the gradle plugin to the project */ @@ -111,7 +116,7 @@ public void apply(Project project) { List compileTaskList = new ArrayList<>(); Map buildDirs = new HashMap<>(); for (Project subProject : project.getSubprojects()) { - Task compileTask = subProject.getTasksByName("remapJar", false).iterator().next(); + Task compileTask = subProject.getTasksByName("build", false).iterator().next(); compileTaskList.add(compileTask); buildDirs.put(subProject.getName(), getBuildDir(subProject).resolve("libs")); @@ -153,12 +158,16 @@ public void apply(Project project) { return; } List versionStrings = new ArrayList<>(versionPairs.keySet()); - LinePreprocessor processor = new LinePreprocessor(versionStrings, config.getPatterns().get(), inverted); + LinePreprocessor lineProcessor = new LinePreprocessor(versionStrings, config.getPatterns().get(), inverted); List ignored = config.getIgnoredFileFormats().getOrElse(new ArrayList<>()); WildcardFileFilter fileFilter = WildcardFileFilter.builder().setWildcards(ignored).get(); - fileProcessor = new FilePreprocessor(processor, fileFilter); +// Map>> emergencyTransformConfig = config.getEmergencyTransform().getOrNull(); +// EmergencyTransformer emergencyTransformer = new EmergencyTransformer(emergencyTransformConfig, versionStrings); + accessWidenerOfficialList = config.getAccessWidenerOfficial().get(); + + fileProcessor = new FilePreprocessor(lineProcessor, fileFilter); // Yes this is yoinked from the gradle forums to get the disco version. Is there // a better method? Probably. Do I care? Currently, no. @@ -172,7 +181,7 @@ public void apply(Project project) { public static String getSplash() { return "\n" + (DISABLE_ANSI ? getColorLessSplash() : getColoredSplash()) + "\n\n" - + getCenterText(String.format("Enable configuration cache today!")) + "\n" + + getCenterText(String.format("Now with unobfuscated support!")) + "\n" + getCenterText("Created by Pancake and Scribble") + "\n" + getCenterText(discoVersion) + "\n\n"; diff --git a/src/main/java/com/minecrafttas/discombobulator/config/PreprocessingConfiguration.java b/src/main/java/com/minecrafttas/discombobulator/config/PreprocessingConfiguration.java index c56b0b0..738eefd 100644 --- a/src/main/java/com/minecrafttas/discombobulator/config/PreprocessingConfiguration.java +++ b/src/main/java/com/minecrafttas/discombobulator/config/PreprocessingConfiguration.java @@ -125,4 +125,16 @@ public abstract class PreprocessingConfiguration { * @return The line feed string */ public abstract Property getDefaultLineFeed(); + +// /** +// *

If a file needs transforming but does not support comments +// * @return A map with the version number as key and a map as value which contains the filename and a pair of strings with search and replace respectively +// */ +// public abstract MapProperty>> getEmergencyTransform(); + + /** + * @return Versions where the accesswidener is changed to official mappings + */ + public abstract ListProperty getAccessWidenerOfficial(); + } diff --git a/src/main/java/com/minecrafttas/discombobulator/processor/FilePreprocessor.java b/src/main/java/com/minecrafttas/discombobulator/processor/FilePreprocessor.java index 156b8d0..eaca2c1 100644 --- a/src/main/java/com/minecrafttas/discombobulator/processor/FilePreprocessor.java +++ b/src/main/java/com/minecrafttas/discombobulator/processor/FilePreprocessor.java @@ -20,6 +20,7 @@ import com.minecrafttas.discombobulator.Discombobulator; import com.minecrafttas.discombobulator.tasks.TaskPreprocessWatch.CurrentFilePreprocessAction; import com.minecrafttas.discombobulator.utils.BetterFileWalker; +import com.minecrafttas.discombobulator.utils.EmergencyTransformer; import com.minecrafttas.discombobulator.utils.LineFeedHelper; import com.minecrafttas.discombobulator.utils.SafeFileOperations; @@ -45,6 +46,7 @@ public class FilePreprocessor { * Creates a new {@link FilePreprocessor} * @param processor The {@link #lineProcessor} * @param fileFilter The {@link #fileFilter} + * @param emergencyTransformer The {@link EmergencyTransformer} */ public FilePreprocessor(LinePreprocessor processor, WildcardFileFilter fileFilter) { this.lineProcessor = processor; @@ -179,6 +181,7 @@ public CurrentFilePreprocessAction preprocessVersions(Path inFile, Map preprocessLines(List inLines, Path outFile, String version, String extension) throws Exception { List lines = lineProcessor.preprocess(version, inLines, extension); + writeLines(lines, outFile); return lines; } diff --git a/src/main/java/com/minecrafttas/discombobulator/processor/LinePreprocessor.java b/src/main/java/com/minecrafttas/discombobulator/processor/LinePreprocessor.java index d7eab75..e88f0df 100644 --- a/src/main/java/com/minecrafttas/discombobulator/processor/LinePreprocessor.java +++ b/src/main/java/com/minecrafttas/discombobulator/processor/LinePreprocessor.java @@ -8,6 +8,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.minecrafttas.discombobulator.Discombobulator; import com.minecrafttas.discombobulator.utils.Pair; /* @@ -227,6 +228,9 @@ public List preprocess(String targetVersion, List lines, String out.add(line); } + //TODO Very dumb, very temporary method to fix accesswideners + out = makeAccessWidenerOfficial(fileending, targetVersion, out); + return out; } @@ -1000,4 +1004,29 @@ private String searchPatternsInverted(int targetIndex, Map patte } return replacement; } + + /** + * Very temporary method to support unobfuscated mcversions, by changing the "named" in the first line of the accesswidener to "official" + * if a version is declared in the build.gradle + * + * @param extension + * @param targetVersion + * @param lines + * @return + */ + private List makeAccessWidenerOfficial(String extension, String targetVersion, List lines) { + if (!"accesswidener".equals(extension)) { + return lines; + } + + if (Discombobulator.accessWidenerOfficialList.contains(targetVersion)) { + String line = lines.get(0).replace("named", "official"); + lines.set(0, line); + } else { + String line = lines.get(0).replace("official", "named"); + lines.set(0, line); + } + + return lines; + } } diff --git a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskCollectBuilds.java b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskCollectBuilds.java index 4854655..a603324 100644 --- a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskCollectBuilds.java +++ b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskCollectBuilds.java @@ -9,6 +9,7 @@ import org.gradle.api.DefaultTask; import org.gradle.api.provider.MapProperty; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; @@ -19,6 +20,7 @@ * * @author Pancake */ +@CacheableTask public abstract class TaskCollectBuilds extends DefaultTask { /** diff --git a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessBase.java b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessBase.java index c332dbd..a46ef53 100644 --- a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessBase.java +++ b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessBase.java @@ -8,6 +8,7 @@ import org.apache.commons.io.FilenameUtils; import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.TaskAction; import com.minecrafttas.discombobulator.Discombobulator; @@ -30,6 +31,7 @@ * * @author Pancake, Scribble */ +@CacheableTask public class TaskPreprocessBase extends DefaultTask { @TaskAction diff --git a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersion.java b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersion.java index 1b3acc0..efa6e89 100644 --- a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersion.java +++ b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersion.java @@ -12,7 +12,10 @@ import org.apache.commons.io.FilenameUtils; import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.PathSensitive; +import org.gradle.api.tasks.PathSensitivity; import org.gradle.api.tasks.TaskAction; import com.minecrafttas.discombobulator.Discombobulator; @@ -35,8 +38,10 @@ * * @author Scribble */ +@CacheableTask public abstract class TaskPreprocessVersion extends DefaultTask { + @PathSensitive(PathSensitivity.RELATIVE) @InputDirectory abstract DirectoryProperty getVersionDirectory(); diff --git a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersionError.java b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersionError.java index e4ddf2a..2f6b81e 100644 --- a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersionError.java +++ b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessVersionError.java @@ -1,6 +1,7 @@ package com.minecrafttas.discombobulator.tasks; import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.TaskAction; /** @@ -11,6 +12,7 @@ *

But you can register separate tasks to the root project, that will execute before everything else, so to stop it,
* we just need to throw an exception and it will stop all following tasks. Thanks Gradle! */ +@CacheableTask public class TaskPreprocessVersionError extends DefaultTask { /** diff --git a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessWatch.java b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessWatch.java index 2f941ce..69e8c18 100644 --- a/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessWatch.java +++ b/src/main/java/com/minecrafttas/discombobulator/tasks/TaskPreprocessWatch.java @@ -25,6 +25,7 @@ import org.apache.commons.io.FilenameUtils; import org.gradle.api.DefaultTask; import org.gradle.api.provider.Property; +import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; @@ -42,6 +43,7 @@ * * @author Pancake, Scribble */ +@CacheableTask public abstract class TaskPreprocessWatch extends DefaultTask { private List threads = new ArrayList<>(); @@ -152,7 +154,7 @@ protected void onModifyFile(Path path) { // Get path relative to the root dir String extension = FilenameUtils.getExtension(path.getFileName().toString()); try { - System.out.println(String.format("[%s%s%s]", PURPLE_BRIGHT, TaskPreprocessWatch.findVersionFromPath(path, versions), WHITE)); + System.out.println(String.format("\n[%s%s%s]", PURPLE_BRIGHT, TaskPreprocessWatch.findVersionFromPath(path, versions), WHITE)); // Preprocess in all sub versions currentFileAction = Discombobulator.fileProcessor.preprocessVersions(path, versions, extension, subSourceDir, true); diff --git a/src/main/java/com/minecrafttas/discombobulator/utils/EmergencyTransformer.java b/src/main/java/com/minecrafttas/discombobulator/utils/EmergencyTransformer.java new file mode 100644 index 0000000..90515da --- /dev/null +++ b/src/main/java/com/minecrafttas/discombobulator/utils/EmergencyTransformer.java @@ -0,0 +1,48 @@ +package com.minecrafttas.discombobulator.utils; + +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.io.filefilter.WildcardFileFilter; + +public class EmergencyTransformer { + + private Map>> config; + + public EmergencyTransformer(Map>> config, List versionStrings) { + this.config = config; + } + + public List transform(String sourceVersion, String targetVersion, Path file, List lines) { + + for (Entry>> filePattern : config.entrySet()) { + WildcardFileFilter filter = WildcardFileFilter.builder().setWildcards(filePattern.getKey()).get(); + if (filter.matches(file)) { + Map> versions = filePattern.getValue(); + replaceVersion(targetVersion, lines, versions); + } + } + + return lines; + } + + private void replaceVersion(String targetVersion, List lines, Map> versions) { + for (Entry> version : versions.entrySet()) { + if (targetVersion.equals(version.getKey())) { + replaceLines(lines, version); + } + } + } + + private void replaceLines(List lines, Entry> version) { + Pair searchReplace = version.getValue(); + String search = searchReplace.left(); + String replace = searchReplace.right(); + + lines.forEach(line -> { + line = line.replace(search, replace); + }); + } +} diff --git a/src/test/java/com/minecrafttas/discombobulator/test/ProcessorTestAccessWidener.java b/src/test/java/com/minecrafttas/discombobulator/test/ProcessorTestAccessWidener.java index 8d50fbe..6c88a38 100644 --- a/src/test/java/com/minecrafttas/discombobulator/test/ProcessorTestAccessWidener.java +++ b/src/test/java/com/minecrafttas/discombobulator/test/ProcessorTestAccessWidener.java @@ -7,12 +7,13 @@ import org.junit.jupiter.api.Test; +import com.minecrafttas.discombobulator.Discombobulator; import com.minecrafttas.discombobulator.processor.LinePreprocessor; import com.minecrafttas.discombobulator.utils.Pair; class ProcessorTestAccessWidener extends TestBase { - private List allVersions = Arrays.asList("1.20.0", "1.19.3", "1.19.2", "1.19.0", "1.18.2", "1.18.1", "1.17.1", "1.16.5", "1.16.1", "infinity", "1.15.2", "1.14.4"); + private List allVersions = Arrays.asList("26.1", "1.20.0", "1.19.3", "1.19.2", "1.19.0", "1.18.2", "1.18.1", "1.17.1", "1.16.5", "1.16.1", "infinity", "1.15.2", "1.14.4"); private LinePreprocessor processor = new LinePreprocessor(allVersions, null); @@ -81,4 +82,22 @@ void testTargetVersionBeingNull() throws Exception { assertEquals(expected, actual); } + + @Test + void testAccessWidenerChange() throws Exception { + String folder = "TestAccesswidener"; + String actualName = "test.accesswidener"; + String expectedName = "Expected26.1.txt"; + String targetVersion = "26.1"; + + Discombobulator.accessWidenerOfficialList.add("26.1"); + Pair, List> lines = getLines(folder, actualName, expectedName); + + List linesActual = processor.preprocess(targetVersion, lines.left(), getExtension(actualName)); + + String actual = String.join("\n", linesActual); + String expected = String.join("\n", lines.right()); + + assertEquals(expected, actual); + } } diff --git a/src/test/resources/TestAccesswidener/Expected26.1.txt b/src/test/resources/TestAccesswidener/Expected26.1.txt new file mode 100644 index 0000000..8a580eb --- /dev/null +++ b/src/test/resources/TestAccesswidener/Expected26.1.txt @@ -0,0 +1,11 @@ +accessWidener v1 official + +# Savestate Mod +## 1.16.1 +Ac code for 1.16.1 +## 1.14.4 +#$$Ac code for 1.14.4 +## end + +# Dragon Manipulation +accessible field net/minecraft/world/level/pathfinder/Path nodes Ljava/util/List;