diff --git a/src/main/java/com/skcraft/launcher/builder/ClientFileCollector.java b/src/main/java/com/skcraft/launcher/builder/ClientFileCollector.java index c2f6fd4..de8862a 100644 --- a/src/main/java/com/skcraft/launcher/builder/ClientFileCollector.java +++ b/src/main/java/com/skcraft/launcher/builder/ClientFileCollector.java @@ -17,6 +17,7 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; /** * Walks a path and adds hashed path versions to the given @@ -25,6 +26,8 @@ @Log public class ClientFileCollector extends DirectoryWalker { + public static final String URL_FILE_SUFFIX = ".url.txt"; + private final Manifest manifest; private final PropertiesApplicator applicator; private final File destDir; @@ -51,17 +54,26 @@ @Override protected void onFile(File file, String relPath) throws IOException { - if (file.getName().endsWith(FileInfoScanner.FILE_SUFFIX)) { + if (file.getName().endsWith(FileInfoScanner.FILE_SUFFIX) || file.getName().endsWith(URL_FILE_SUFFIX)) { return; } + // url.txt override file + File urlFile = new File(file.getAbsoluteFile().getParentFile(), file.getName() + URL_FILE_SUFFIX); + String to; + if (urlFile.exists()) { + to = Files.readFirstLine(urlFile, Charset.defaultCharset()); + } else { + to = FilenameUtils.separatorsToUnix(FilenameUtils.normalize(relPath)); + } + FileInstall entry = new FileInstall(); String hash = Files.hash(file, hf).toString(); String hashedPath = hash.substring(0, 2) + "/" + hash.substring(2, 4) + "/" + hash; File destPath = new File(destDir, hashedPath); entry.setHash(hash); entry.setLocation(hashedPath); - entry.setTo(FilenameUtils.separatorsToUnix(FilenameUtils.normalize(relPath))); + entry.setTo(to); entry.setSize(file.length()); applicator.apply(entry); destPath.getParentFile().mkdirs();