first commit
This commit is contained in:
commit
5cc50a8a4e
BIN
AssetsEncoderIndex.jar
Normal file
BIN
AssetsEncoderIndex.jar
Normal file
Binary file not shown.
3
README.md
Normal file
3
README.md
Normal file
@ -0,0 +1,3 @@
|
||||
Converts raw assets dir to encoded folders and files. Also creates indexes json file.
|
||||
Assets dir must contain "minecraft" dir (with "sounds", "lang" and other dirs) and "pack.mcmeta" file!
|
||||
Example: java -jar AssetsEncoder.jar 1.7.10.json assets converted
|
171
src/com/multi/assetsencoder/Core.java
Normal file
171
src/com/multi/assetsencoder/Core.java
Normal file
@ -0,0 +1,171 @@
|
||||
package com.multi.assetsencoder;
|
||||
|
||||
import java.io.*;
|
||||
import java.math.BigInteger;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Core {
|
||||
|
||||
public static void doWork(String jsonfile, String dir, String outputDir) throws IOException { //говнокод
|
||||
System.out.println("Started.");
|
||||
|
||||
BufferedWriter writer;
|
||||
File assetsDir = new File(dir);
|
||||
List<File> fileList;
|
||||
|
||||
|
||||
if (assetsDir.isDirectory()) {
|
||||
fileList = getFileListRecursive(assetsDir);
|
||||
}else {
|
||||
System.out.println("Assets dir is not dir or not exists =O");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Creating " + outputDir + "/indexes/" + jsonfile );
|
||||
File json = new File(outputDir + File.separator + "indexes");
|
||||
json.mkdirs();
|
||||
writer = new BufferedWriter(new FileWriter(new File(outputDir + File.separator + "indexes", jsonfile)));
|
||||
|
||||
writer.write("{");
|
||||
writer.newLine();
|
||||
|
||||
writer.write(" \"objects\": {");
|
||||
writer.newLine();
|
||||
|
||||
int num = 0;
|
||||
for (File f : fileList) {
|
||||
if (f.exists()) {
|
||||
String hash = getMD5(f);
|
||||
String path = getRelativePath(f, assetsDir, true);
|
||||
String hashDir = hash.substring(0, 2);
|
||||
|
||||
File hashOutput = new File(outputDir + File.separator + "objects", hashDir + File.separator + hash);
|
||||
File hashOutputDir = new File(outputDir + File.separator + "objects", hashDir);
|
||||
|
||||
System.out.println("[File " + (num+1) + " of " + fileList.size() + "] - " + f.getName() + ", hash is " + hash + ", size is " + f.length() + " putting in objects/" + hashDir + " dir");
|
||||
writeObject(writer, path, hash, f.length(), num<fileList.size()-1);
|
||||
|
||||
hashOutputDir.mkdirs();
|
||||
copyFile(f, hashOutput);
|
||||
}
|
||||
num++;
|
||||
}
|
||||
|
||||
writer.write(" }");
|
||||
writer.newLine();
|
||||
|
||||
writer.write("}");
|
||||
|
||||
writer.close();
|
||||
|
||||
System.out.println("Finished.");
|
||||
}
|
||||
|
||||
public static void writeObject(BufferedWriter writer, String path, String hash, long size, boolean cont) throws IOException{
|
||||
writer.write(" \""+ path +"\": {");
|
||||
writer.newLine();
|
||||
writer.write(" \"hash\": \"" + hash + "\",");
|
||||
writer.newLine();
|
||||
writer.write(" \"size\": " + size);
|
||||
writer.newLine();
|
||||
writer.write(" }");
|
||||
if(cont)writer.write(",");
|
||||
writer.newLine();
|
||||
|
||||
}
|
||||
|
||||
public static String getMD5(File file) {
|
||||
String s = null;
|
||||
MessageDigest md = null;
|
||||
try {
|
||||
md = MessageDigest.getInstance("SHA1");
|
||||
InputStream is = new FileInputStream(file);
|
||||
byte[] buffer = new byte[8192];
|
||||
int read;
|
||||
while ((read = is.read(buffer)) > 0)
|
||||
md.update(buffer, 0, read);
|
||||
byte[] md5 = md.digest();
|
||||
BigInteger bi = new BigInteger(1, md5);
|
||||
s = bi.toString(16);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public static void copyFile(File sourceFile, File destFile) throws IOException {
|
||||
if (!destFile.exists()) {
|
||||
destFile.createNewFile();
|
||||
}
|
||||
|
||||
FileChannel source = null;
|
||||
FileChannel destination = null;
|
||||
|
||||
try {
|
||||
source = new FileInputStream(sourceFile).getChannel();
|
||||
destination = new FileOutputStream(destFile).getChannel();
|
||||
destination.transferFrom(source, 0, source.size());
|
||||
} finally {
|
||||
if (source != null) {
|
||||
source.close();
|
||||
}
|
||||
if (destination != null) {
|
||||
destination.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String getRelativePath(File file, File folder, boolean slashes) {
|
||||
String filePath = file.getAbsolutePath();
|
||||
String folderPath = folder.getAbsolutePath();
|
||||
if (filePath.startsWith(folderPath)) {
|
||||
String s = filePath.substring(folderPath.length() + 1);
|
||||
if (slashes) s = s.replace('\\', '/');
|
||||
return s;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<File> getFileListRecursive(File dir) {
|
||||
List<File> list = new ArrayList<File>();
|
||||
File[] files = dir.listFiles();
|
||||
|
||||
if (files != null)
|
||||
for (File file : files) {
|
||||
|
||||
if (file.isDirectory()) {
|
||||
list.addAll(getFileListRecursive(file));
|
||||
} else list.add(file);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
if (args.length < 3) {
|
||||
System.out.println("Usage: outputJsonFile assetsDir outputDir");
|
||||
System.out.println("Usage example: java -jar AssetsEncoder.jar 1.7.10.json assets converted");
|
||||
System.out.println("THIS JAR MUST BE IN SAME PATH AS ASSETS DIR!");
|
||||
System.out.println("ASSETS DIR MUST CONTAIN \"minecraft\" DIR (WITH \"sounds\", \"lang\" AND OTHER DIRS) AND \"pack.mcmeta\" FILE!");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
doWork(args[0], args[1], args[2]);
|
||||
// doWork("1.7.10.json", "assets", "converted");
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user