From 29e5d02eb0d7eda700df1d1e27e9e1afba7c7406 Mon Sep 17 00:00:00 2001 From: Clansty Date: Sat, 21 Jun 2025 02:37:31 +0800 Subject: [PATCH] [F] Handle LocalAssets read only --- AquaMai.Mods/Enhancement/ServerResources.cs | 55 ++++++++++++++++++--- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/AquaMai.Mods/Enhancement/ServerResources.cs b/AquaMai.Mods/Enhancement/ServerResources.cs index bf520c40..67bc2854 100644 --- a/AquaMai.Mods/Enhancement/ServerResources.cs +++ b/AquaMai.Mods/Enhancement/ServerResources.cs @@ -81,7 +81,14 @@ public class ServerResources #if DEBUG MelonLogger.Msg("[ServerResources] Invalid signature for existed file"); #endif - File.Delete(cacheFile); + try + { + File.Delete(cacheFile); + } + catch + { + // ignored + } } blinktimer.Start(); @@ -153,21 +160,53 @@ public class ServerResources if (!VerifySignature(bytes, _entry.sign)) { MelonLogger.Warning("[ServerResources] Invalid signature for file"); - // yield break; + yield break; } - // 没有文件夹就新建 - if (!Directory.Exists(Path.GetDirectoryName(cacheFile))) + try { - Directory.CreateDirectory(Path.GetDirectoryName(cacheFile)); + // 没有文件夹就新建 + if (!Directory.Exists(Path.GetDirectoryName(cacheFile))) + { + Directory.CreateDirectory(Path.GetDirectoryName(cacheFile)); + } + File.WriteAllBytes(cacheFile, bytes); + LoadFile(); + } + catch + { + LoadBytes(bytes); } - File.WriteAllBytes(cacheFile, bytes); - LoadFile(); } private static void LoadFile() { - bundle = AssetBundle.LoadFromFile(Path.Combine(Environment.CurrentDirectory, cacheFile)); + try + { + bundle = AssetBundle.LoadFromFile(Path.Combine(Environment.CurrentDirectory, cacheFile)); + LoadFromAssetBundle(); + } + catch + { + // ignored + } + } + + private static void LoadBytes(byte[] bytes) + { + try + { + bundle = AssetBundle.LoadFromMemory(bytes); + LoadFromAssetBundle(); + } + catch + { + // ignored + } + } + + private static void LoadFromAssetBundle() + { if (bundle == null) { MelonLogger.Error($"[ServerResources] Failed to load asset bundle from {Path.Combine(Environment.CurrentDirectory, cacheFile)}");