From 3618a724e320ec8297e13d976d8d8c4e2af60b4a Mon Sep 17 00:00:00 2001 From: blowfish Date: Sat, 19 Jan 2019 23:15:57 -0800 Subject: [PATCH] Blacklist for excluding replaced files All .restockblacklist files will be read to prevent KSP from loading these files (i.e. models and textures). Any .restockwhitelist files will be read to prevent them from being blacklisted (e.g. if a mod actually uses the squad files). Each line in those files should be a GameData path that follows these rules: * If it ends with a / then all files in that directory (or sibdirectories) will be matched * A * can match anything in a directory or file name * Files can optionally take an extension, but it is not required to match --- .../GameData/ReStock/Plugins/Restock.dll | Bin 8192 -> 13824 bytes .../GameData/ReStock/Restock.restockblacklist | 96 +++++++++++++ Source/Restock/ResourceBlacklist.cs | 130 ++++++++++++++++++ Source/Restock/Restock.csproj | 1 + 4 files changed, 227 insertions(+) create mode 100644 Distribution/Restock/GameData/ReStock/Restock.restockblacklist create mode 100644 Source/Restock/ResourceBlacklist.cs diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index e323f09e6e189cb296d1cc01a6e7ec0a6f461fa6..58bc0f480c7f8bf64862db2311c5568926c53653 100644 GIT binary patch literal 13824 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 Ute^a^!LG&Q)`GvYWA*0$08ia8Z~y=R diff --git a/Distribution/Restock/GameData/ReStock/Restock.restockblacklist b/Distribution/Restock/GameData/ReStock/Restock.restockblacklist new file mode 100644 index 00000000..0ba3bde2 --- /dev/null +++ b/Distribution/Restock/GameData/ReStock/Restock.restockblacklist @@ -0,0 +1,96 @@ +Squad/Parts/Aero/aerodynamicNoseCone/ +Squad/Parts/Aero/cones/ConeA.mu +Squad/Parts/Aero/cones/ConeB.mu +Squad/Parts/Aero/cones/ConesDiffuse*.dds +Squad/Parts/Aero/cones/ConesHeat*.dds +Squad/Parts/Aero/cones/TinyCone.mu +Squad/Parts/Aero/fairings/fairingSize2.mu +Squad/Parts/Aero/HeatShield/HeatShield0.mu +Squad/Parts/Aero/HeatShield/HeatShield1.mu +Squad/Parts/Aero/HeatShield/HeatShield3.mu +Squad/Parts/Aero/protectiveRocketNoseMk7_v2/ +Squad/Parts/Command/cupola/ +Squad/Parts/Command/hitchhikerStorageContainer/ +Squad/Parts/Command/inlineReactionWheel/ +Squad/Parts/Command/Mk1-3Pod/ +Squad/Parts/Command/mk1LanderCan/ +Squad/Parts/Command/mk2LanderCan_v2/ +Squad/Parts/Command/probeCoreCube/probeCoreCube.mu +Squad/Parts/Command/probeCoreHex_v2/ +Squad/Parts/Command/probeCoreOcto2_v2/ +Squad/Parts/Command/probeCoreOcto_v2/ +Squad/Parts/Command/probeStackLarge/ +Squad/Parts/Command/probeStackSmall/ +Squad/Parts/Command/probeStackSphere_v2/ +Squad/Parts/Electrical/RTG/ +Squad/Parts/Electrical/z-100Battery/ +Squad/Parts/Electrical/z-1kBattery/ +Squad/Parts/Electrical/z-200Battery/ +Squad/Parts/Electrical/z-400Battery/ +Squad/Parts/Electrical/z-4kBattery/ +Squad/Parts/Engine/ionEngine/ +Squad/Parts/Engine/liquidEngine24-77/ +Squad/Parts/Engine/liquidEngine48-7S_v2/ +Squad/Parts/Engine/liquidEngineLV-1/ +Squad/Parts/Engine/liquidEngineLV-1R/ +Squad/Parts/Engine/liquidEngineLV-909_v2/ +Squad/Parts/Engine/liquidEngineLV-N/ +Squad/Parts/Engine/liquidEngineLV-T30/ +Squad/Parts/Engine/liquidEngineLV-T45/ +Squad/Parts/Engine/liquidEngineMainsail/ +Squad/Parts/Engine/liquidEnginePoodle_v2/ +Squad/Parts/Engine/liquidEngineSkipper/ +Squad/Parts/Engine/liquidEngineSSME/ +Squad/Parts/Engine/MassiveSRB/ +Squad/Parts/Engine/OMSEngine/ +Squad/Parts/Engine/Size1_SRBs/ +Squad/Parts/Engine/Size1_SRBs/ +Squad/Parts/Engine/Size2LFB/ +Squad/Parts/Engine/Size3AdvancedEngine/ +Squad/Parts/Engine/Size3EngineCluster/ +Squad/Parts/Engine/solidBoosterBACC/ +Squad/Parts/Engine/solidBoosterSep/ +Squad/Parts/FuelTank/FoilTanks/ +Squad/Parts/FuelTank/FoilTanks/ +Squad/Parts/FuelTank/FoilTanks/ +Squad/Parts/FuelTank/fuelTankOscarB/ +Squad/Parts/FuelTank/RCSFuelTankR1/ +Squad/Parts/FuelTank/RCSFuelTankR10/ +Squad/Parts/FuelTank/RCSFuelTankR25/ +Squad/Parts/FuelTank/RCSTankRadial/ +Squad/Parts/FuelTank/RCStankRadialLong/ +Squad/Parts/FuelTank/RockomaxTanks/ +Squad/Parts/FuelTank/Size1_Tanks/ +Squad/Parts/FuelTank/Size3Tanks/ +Squad/Parts/FuelTank/xenonTank/ +Squad/Parts/FuelTank/xenonTankLarge/ +Squad/Parts/FuelTank/xenonTankRadial/ +Squad/Parts/Misc/AsteroidDay/HECS2.mu +Squad/Parts/Misc/AsteroidDay/hecs*.dds +Squad/Parts/Science/AtmosphereSensor/ +Squad/Parts/Science/GooExperiment/ +Squad/Parts/Science/LargeCrewedLab/ +Squad/Parts/Science/MaterialBay/ +Squad/Parts/Science/sensorAccelerometer/ +Squad/Parts/Science/sensorBarometer/ +Squad/Parts/Science/sensorGravimeter/ +Squad/Parts/Science/sensorThermometer/ +Squad/Parts/Structural/FLAdapters/ +Squad/Parts/Structural/Size3To2Adapter_v2/ +Squad/Parts/Structural/structuralMicronode/ +Squad/Parts/Structural/strutCubicOcto/ +Squad/Parts/Structural/strutOcto/ +Squad/Parts/Utility/commDish88-88/ +Squad/Parts/Utility/DirectAntennas/HGAntenna.mu +Squad/Parts/Utility/dockingPort/ +Squad/Parts/Utility/dockingPortInline/ +Squad/Parts/Utility/dockingPortJr/ +Squad/Parts/Utility/dockingPortShielded/ +Squad/Parts/Utility/dockingPortSr/ +Squad/Parts/Utility/linearRCS/ +Squad/Parts/Utility/rcsBlockRV-105/ +Squad/Parts/Utility/RelayAntennas/ +Squad/Parts/Utility/rockomaxAdapters/ +Squad/Parts/Utility/ServiceBay/ +Squad/Parts/Utility/spotLightMk1/ +Squad/Parts/Utility/spotLightMk2/ diff --git a/Source/Restock/ResourceBlacklist.cs b/Source/Restock/ResourceBlacklist.cs new file mode 100644 index 00000000..2f3fc98d --- /dev/null +++ b/Source/Restock/ResourceBlacklist.cs @@ -0,0 +1,130 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace Restock +{ + [KSPAddon(KSPAddon.Startup.Instantly, true)] + public class ResourceBlacklist : MonoBehaviour + { + private void Start() + { + HashSet blacklist = new HashSet(); + HashSet whitelist = new HashSet(); + + UrlDir gameData = GameDatabase.Instance.root.children.Find(dir => dir.type == UrlDir.DirectoryType.GameData); + + foreach (UrlDir.UrlFile file in GameDatabase.Instance.root.AllFiles) + { + if (file.fileExtension == "restockblacklist") + { + Debug.Log($"[Restock] Reading blacklist {file.url}.{file.fileExtension}"); + foreach (string line in File.ReadAllLines(file.fullPath)) + { + foreach (UrlDir.UrlFile blacklistFile in FindFiles(line, gameData)) + { + blacklist.Add(blacklistFile); + } + } + } + else if (file.fileExtension == "restockwhitelist") + { + Debug.Log($"[Restock] Reading whitelist {file.url}.{file.fileExtension}"); + foreach (string line in File.ReadAllLines(file.fullPath)) + { + foreach (UrlDir.UrlFile whitelistFile in FindFiles(line, gameData)) + { + whitelist.Add(whitelistFile); + } + } + } + } + + Debug.Log("[Restock] Removing blacklisted assets"); + foreach (UrlDir.UrlFile file in blacklist) + { + if (whitelist.Contains(file)) continue; + + Debug.Log($"[Restock] Removing {file.url}.{file.fileExtension}"); + UrlDir.UrlFile newFile2 = new UrlDir.UrlFile(file.parent, new FileInfo(file.fullPath + ".disabled")); + file.parent.files[file.parent.files.IndexOf(file)] = newFile2; + } + + Destroy(gameObject); + } + + private readonly char[] sep = new[] { '/' }; + private IEnumerable FindFiles(string url, UrlDir dir) + { + string[] splits = url.Split(sep, 2); + + if (splits.Length == 1) + { + if (splits[0] == string.Empty) + { + foreach (UrlDir.UrlFile file in dir.files) + { + if (file.fileType == UrlDir.FileType.Config) continue; + yield return file; + } + + // Already excludes configs + foreach (UrlDir.UrlFile file in dir.AllFiles) + { + yield return file; + } + } + else + { + int idx = splits[0].LastIndexOf('.'); + string fileName; + string fileExtension; + + if (idx != -1) + { + fileName = splits[0].Substring(0, idx); + fileExtension = splits[0].Substring(idx + 1); + } + else + { + fileName = splits[0]; + fileExtension = null; + } + + string pattern = '^' + Regex.Escape(fileName).Replace(@"\*", ".*") + '$'; + Regex regex = new Regex(pattern); + + foreach (UrlDir.UrlFile file in dir.files) + { + if (file.fileType == UrlDir.FileType.Config) continue; + if (!regex.IsMatch(file.name)) continue; + if (fileExtension != null && fileExtension != file.fileExtension) continue; + yield return file; + } + } + } + else if (splits.Length == 2) + { + string pattern = '^' + Regex.Escape(splits[0]).Replace(@"\*", ".*") + '$'; + Regex regex = new Regex(pattern); + + foreach (UrlDir subDir in dir.children) + { + if (regex.IsMatch(subDir.name)) + { + foreach (UrlDir.UrlFile file in FindFiles(splits[1], subDir)) + { + yield return file; + } + } + } + } + else + { + throw new NotImplementedException("This code should never be reached"); + } + } + } +} diff --git a/Source/Restock/Restock.csproj b/Source/Restock/Restock.csproj index 5f036689..edf1073e 100644 --- a/Source/Restock/Restock.csproj +++ b/Source/Restock/Restock.csproj @@ -44,6 +44,7 @@ +