60 lines
2.7 KiB
Java
60 lines
2.7 KiB
Java
package io.gitlab.jfronny.respackopts.mixin;
|
|
|
|
import io.gitlab.jfronny.respackopts.util.MetaCache;
|
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
|
import io.gitlab.jfronny.respackopts.model.PackMeta;
|
|
import net.minecraft.resource.*;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
|
|
import java.io.InputStream;
|
|
import java.io.InputStreamReader;
|
|
import java.nio.file.Path;
|
|
import java.util.Map;
|
|
|
|
@Mixin(ResourcePackManager.class)
|
|
public class ResourcePackManagerMixin {
|
|
@Shadow private Map<String, ResourcePackProfile> profiles;
|
|
|
|
@Inject(at = @At("TAIL"), method = "scanPacks()V")
|
|
private void scanPacks(CallbackInfo info) {
|
|
MetaCache.clear();
|
|
profiles.forEach((s, v) -> {
|
|
ResourcePack rpi = v.createResourcePack();
|
|
ResourceType packConfType = null;
|
|
for (ResourceType type : ResourceType.values()) {
|
|
if (rpi.contains(type, Respackopts.CONF_ID)) {
|
|
packConfType = type;
|
|
}
|
|
}
|
|
if (packConfType != null) {
|
|
try (InputStream is = rpi.open(packConfType, Respackopts.CONF_ID); InputStreamReader isr = new InputStreamReader(is)) {
|
|
String displayName = v.getDisplayName().asString();
|
|
String packName = rpi.getName();
|
|
PackMeta conf = Respackopts.GSON.fromJson(isr, PackMeta.class);
|
|
if (Respackopts.CONFIG.debugLogs)
|
|
Respackopts.LOGGER.info("Discovered pack: " + conf.id);
|
|
if (Respackopts.META_VERSION < conf.version) {
|
|
Respackopts.LOGGER.error(displayName + " was not loaded as it specifies a newer respackopts version than is installed");
|
|
return;
|
|
}
|
|
if (rpi instanceof AbstractFileResourcePack arr) {
|
|
Path pack = ((AbstractFileResourcePackAccessor)arr).getBase().toPath();
|
|
Path packData = pack.getParent().resolve(pack.getFileName().toString() + Respackopts.FILE_EXTENSION);
|
|
MetaCache.addFromScan(displayName, packName, conf, packData);
|
|
}
|
|
else {
|
|
MetaCache.addFromScan(displayName, packName, conf, Respackopts.FALLBACK_CONF_DIR.resolve(conf.id + ".json"));
|
|
}
|
|
} catch (Throwable e) {
|
|
Respackopts.LOGGER.error("Could not initialize pack meta for " + s, e);
|
|
}
|
|
}
|
|
});
|
|
MetaCache.save();
|
|
}
|
|
}
|