package mwt.tools;
import java.io.File;
import java.io.IOException;
import mwt.wow.mpq.MpqArchive;
import mwt.wow.mpq.ReadWriteMpqArchive;
public class PackMpq {
public static void main(String[] args) throws IOException {
File mpqFile = new File(args[0]);
File dir = new File(args[1]);
dir.mkdirs();
mpqFile.delete();
long start = System.currentTimeMillis();
ReadWriteMpqArchive mpqArchive = new MpqArchive(mpqFile, true);
int count = countFiles(dir);
int hashTableSize = Integer.highestOneBit(count * 4 / 3) << 1;
mpqArchive.initHashtable(hashTableSize);
addDir(mpqArchive, dir, "");
mpqArchive.saveMetadata();
mpqArchive.close();
long end = System.currentTimeMillis();
System.out.println("Took: " + (end - start) + "ms");
}
private static int countFiles(File dir) throws IOException {
int count = 0;
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
count += countFiles(file);
} else {
count++;
}
}
return count;
}
private static void addDir(ReadWriteMpqArchive mpqArchive, File dir,
String baseName) throws IOException {
for (File file : dir.listFiles()) {
String name = baseName + file.getName();
if (file.isDirectory()) {
addDir(mpqArchive, file, name + '\\');
} else {
if (!name.equalsIgnoreCase("(attributes)")) {
mpqArchive.addFile(file, name, 0, 0);
}
}
}
}
}