70 lines
2.3 KiB
Java
70 lines
2.3 KiB
Java
package net.minecraft.client.resources;
|
|
|
|
import com.google.common.base.Splitter;
|
|
import com.google.gson.JsonElement;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonParseException;
|
|
import com.mojang.logging.LogUtils;
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.List;
|
|
import java.util.Map.Entry;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.server.packs.linkfs.LinkFileSystem;
|
|
import net.minecraft.util.GsonHelper;
|
|
import org.slf4j.Logger;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class IndexedAssetSource {
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
public static final Splitter PATH_SPLITTER = Splitter.on('/');
|
|
|
|
public static Path createIndexFs(Path assetDirectory, String assetIndex) {
|
|
Path path = assetDirectory.resolve("objects");
|
|
LinkFileSystem.Builder builder = LinkFileSystem.builder();
|
|
Path path2 = assetDirectory.resolve("indexes/" + assetIndex + ".json");
|
|
|
|
try {
|
|
BufferedReader bufferedReader = Files.newBufferedReader(path2, StandardCharsets.UTF_8);
|
|
|
|
try {
|
|
JsonObject jsonObject = GsonHelper.parse(bufferedReader);
|
|
JsonObject jsonObject2 = GsonHelper.getAsJsonObject(jsonObject, "objects", null);
|
|
if (jsonObject2 != null) {
|
|
for (Entry<String, JsonElement> entry : jsonObject2.entrySet()) {
|
|
JsonObject jsonObject3 = (JsonObject)entry.getValue();
|
|
String string = (String)entry.getKey();
|
|
List<String> list = PATH_SPLITTER.splitToList(string);
|
|
String string2 = GsonHelper.getAsString(jsonObject3, "hash");
|
|
Path path3 = path.resolve(string2.substring(0, 2) + "/" + string2);
|
|
builder.put(list, path3);
|
|
}
|
|
}
|
|
} catch (Throwable var16) {
|
|
if (bufferedReader != null) {
|
|
try {
|
|
bufferedReader.close();
|
|
} catch (Throwable var15) {
|
|
var16.addSuppressed(var15);
|
|
}
|
|
}
|
|
|
|
throw var16;
|
|
}
|
|
|
|
if (bufferedReader != null) {
|
|
bufferedReader.close();
|
|
}
|
|
} catch (JsonParseException var17) {
|
|
LOGGER.error("Unable to parse resource index file: {}", path2);
|
|
} catch (IOException var18) {
|
|
LOGGER.error("Can't open the resource index file: {}", path2);
|
|
}
|
|
|
|
return builder.build("index-" + assetIndex).getPath("/");
|
|
}
|
|
}
|