Respackopts/src/main/java/io/gitlab/jfronny/respackopts/filters/util/FileRpoSearchProvider.java

51 lines
2.0 KiB
Java
Raw Normal View History

2021-09-15 17:13:14 +02:00
package io.gitlab.jfronny.respackopts.filters.util;
import io.gitlab.jfronny.libjf.ResourcePath;
import io.gitlab.jfronny.respackopts.Respackopts;
2021-11-14 15:37:01 +01:00
import io.gitlab.jfronny.respackopts.model.FileRpo;
import io.gitlab.jfronny.respackopts.util.MetaCache;
import net.minecraft.resource.ResourcePack;
2021-09-15 17:13:14 +02:00
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Map;
2021-09-15 17:13:14 +02:00
public class FileRpoSearchProvider {
public static boolean isRpo(String fileName) {
return fileName.endsWith(Respackopts.FILE_EXTENSION);
2021-09-15 17:13:14 +02:00
}
public static <T> T modifyWithRpo(String fileName, ResourcePack pack, ModifiedGenerator<T> getModified, T defaultValue) {
2021-09-15 17:13:14 +02:00
if (FileRpoSearchProvider.isRpo(fileName))
return defaultValue;
Map<String, FileRpo> frpReg = MetaCache.FILE_RPOS.get(MetaCache.getId(pack));
String rpPathName = fileName + Respackopts.FILE_EXTENSION;
if (frpReg.containsKey(rpPathName))
return getModified.getModified(frpReg.get(rpPathName));
2021-09-15 17:13:14 +02:00
ResourcePath rpoPath;
try {
rpoPath = new ResourcePath(rpPathName);
2021-09-15 17:13:14 +02:00
if (!pack.contains(rpoPath.getType(), rpoPath.getId()))
return defaultValue;
} catch (Throwable e) {
Respackopts.LOGGER.error("Could not check file filter status", e);
2021-09-15 17:13:14 +02:00
return defaultValue;
}
try (InputStream stream = pack.open(rpoPath.getType(), rpoPath.getId()); Reader w = new InputStreamReader(stream)) {
FileRpo frp = Respackopts.GSON.fromJson(w, FileRpo.class);
frp.path = rpPathName;
frpReg.put(rpPathName, frp);
return getModified.getModified(frp);
2021-09-15 17:13:14 +02:00
}
catch (Exception e) {
Respackopts.LOGGER.error("Could not generate replacement for " + rpoPath.getName() + " in " + pack.getName(), e);
2021-09-15 17:13:14 +02:00
return defaultValue;
}
}
public interface ModifiedGenerator<T> {
T getModified(FileRpo rpo);
}
}