mirror of
https://silica.codes/BedrockReverse/McTools.git
synced 2025-04-06 05:05:40 +12:00
221 lines
7.9 KiB
C#
221 lines
7.9 KiB
C#
using McCrypt.Properties;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace McCrypt
|
|
{
|
|
public class Config
|
|
{
|
|
public static string LocalAppdata = Environment.GetEnvironmentVariable("LOCALAPPDATA");
|
|
public static string RoamingAppdata = Environment.GetEnvironmentVariable("APPDATA");
|
|
|
|
public static string ApplicationDirectory;
|
|
private static List<string> searchFolders = new List<string>();
|
|
private static List<string> searchModules = new List<string>();
|
|
|
|
|
|
public static string MinecraftFolder;
|
|
|
|
public static string LocalState;
|
|
public static string LocalCache;
|
|
public static string ComMojang;
|
|
|
|
public static string KeysDbPath;
|
|
public static string PremiumCache;
|
|
public static string ServerPackCache;
|
|
public static string RealmsPremiumCache;
|
|
public static string WorldsFolder;
|
|
|
|
public static string OptionsTxt;
|
|
public static string OutFolder;
|
|
|
|
public static bool CrackPacks;
|
|
public static bool ZipPacks;
|
|
public static bool MultiThread;
|
|
public static bool DecryptExistingWorlds;
|
|
public static string[] SearchFolders
|
|
{
|
|
get
|
|
{
|
|
return searchFolders.ToArray();
|
|
}
|
|
}
|
|
|
|
public static string[] SearchModules
|
|
{
|
|
get
|
|
{
|
|
return searchModules.ToArray();
|
|
}
|
|
}
|
|
|
|
private static void rebaseSearchFolders()
|
|
{
|
|
searchFolders.Clear();
|
|
searchFolders.Add(ApplicationDirectory);
|
|
searchFolders.Add(PremiumCache);
|
|
searchFolders.Add(ServerPackCache);
|
|
searchFolders.Add(RealmsPremiumCache);
|
|
|
|
searchModules.Clear();
|
|
searchModules.Add("resource_packs");
|
|
searchModules.Add("skin_packs");
|
|
searchModules.Add("world_templates");
|
|
searchModules.Add("persona");
|
|
searchModules.Add("behavior_packs");
|
|
searchModules.Add("resource");
|
|
searchModules.Add("minecraftWorlds");
|
|
}
|
|
private static void rebaseLocalData()
|
|
{
|
|
PremiumCache = Path.Combine(LocalState, "premium_cache");
|
|
ServerPackCache = Path.Combine(LocalCache, "packcache");
|
|
RealmsPremiumCache = Path.Combine(LocalCache, "premiumcache");
|
|
ComMojang = Path.Combine(LocalState, "games", "com.mojang");
|
|
OptionsTxt = Path.Combine(ComMojang, "minecraftpe", "options.txt");
|
|
WorldsFolder = Path.Combine(ComMojang, "minecraftWorlds");
|
|
|
|
rebaseSearchFolders();
|
|
}
|
|
private static void rebaseAll()
|
|
{
|
|
LocalState = Path.Combine(MinecraftFolder, "LocalState");
|
|
LocalCache = Path.Combine(MinecraftFolder, "LocalCache", "minecraftpe");
|
|
rebaseLocalData();
|
|
}
|
|
private static string resolve(string str)
|
|
{
|
|
str = str.Trim();
|
|
str = str.Replace("$LOCALAPPDATA", LocalAppdata);
|
|
str = str.Replace("$APPDATA", RoamingAppdata);
|
|
|
|
str = str.Replace("$MCDIR", MinecraftFolder);
|
|
str = str.Replace("$EXECDIR", ApplicationDirectory);
|
|
|
|
str = str.Replace("$LOCALSTATE", LocalState);
|
|
str = str.Replace("$LOCALCACHE", LocalCache);
|
|
str = str.Replace("$COMMOJANG", ComMojang);
|
|
|
|
str = str.Replace("$PREMIUMCACHE", PremiumCache);
|
|
str = str.Replace("$SERVERPACKCACHE", ServerPackCache);
|
|
str = str.Replace("$REALMSPREMIUMCACHE", RealmsPremiumCache);
|
|
|
|
str = str.Replace("$OUTFOLDER", OutFolder);
|
|
return str;
|
|
}
|
|
|
|
public static void Init()
|
|
{
|
|
CrackPacks = true;
|
|
ZipPacks = false;
|
|
|
|
ApplicationDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
|
|
KeysDbPath = Path.Combine(ApplicationDirectory, "keys.db");
|
|
MinecraftFolder = Path.Combine(LocalAppdata, "Packages", "Microsoft.MinecraftUWP_8wekyb3d8bbwe");
|
|
|
|
rebaseAll();
|
|
}
|
|
|
|
public static void ReadConfig(string configFile)
|
|
{
|
|
if (File.Exists(configFile))
|
|
{
|
|
string[] configLines = File.ReadAllLines(configFile);
|
|
foreach(string line in configLines)
|
|
{
|
|
if (line.Trim().StartsWith("#"))
|
|
continue;
|
|
|
|
if (!line.Contains(":"))
|
|
continue;
|
|
|
|
string[] keyvalpair = line.Trim().Split(':');
|
|
|
|
if (keyvalpair.Length < 2)
|
|
continue;
|
|
|
|
switch(keyvalpair[0])
|
|
{
|
|
case "MinecraftFolder":
|
|
MinecraftFolder = resolve(keyvalpair[1]);
|
|
rebaseAll();
|
|
break;
|
|
|
|
case "LocalState":
|
|
LocalState = resolve(keyvalpair[1]);
|
|
rebaseLocalData();
|
|
break;
|
|
case "LocalCache":
|
|
LocalCache = resolve(keyvalpair[1]);
|
|
rebaseLocalData();
|
|
break;
|
|
|
|
case "PremiumCache":
|
|
PremiumCache = resolve(keyvalpair[1]);
|
|
rebaseSearchFolders();
|
|
break;
|
|
case "ServerPackCache":
|
|
ServerPackCache = resolve(keyvalpair[1]);
|
|
rebaseSearchFolders();
|
|
break;
|
|
case "RealmsPremiumCache":
|
|
RealmsPremiumCache = resolve(keyvalpair[1]);
|
|
rebaseSearchFolders();
|
|
break;
|
|
|
|
case "ComMojang":
|
|
ComMojang = resolve(keyvalpair[1]);
|
|
break;
|
|
|
|
case "WorldsFolder":
|
|
WorldsFolder = resolve(keyvalpair[1]);
|
|
break;
|
|
|
|
case "OutputFolder":
|
|
OutFolder = resolve(keyvalpair[1]);
|
|
break;
|
|
|
|
case "KeysDb":
|
|
KeysDbPath = resolve(keyvalpair[1]);
|
|
break;
|
|
|
|
case "OptionsTxt":
|
|
OptionsTxt = resolve(keyvalpair[1]);
|
|
break;
|
|
|
|
case "AdditionalSearchDir":
|
|
searchFolders.Add(resolve(keyvalpair[1]));
|
|
break;
|
|
case "AdditionalModuleDir":
|
|
searchModules.Add(resolve(keyvalpair[1]));
|
|
break;
|
|
|
|
case "CrackThePacks":
|
|
CrackPacks = (resolve(keyvalpair[1]).ToLower() == "yes");
|
|
break;
|
|
case "ZipThePacks":
|
|
ZipPacks = (resolve(keyvalpair[1]).ToLower() == "yes");
|
|
break;
|
|
case "MultiThread":
|
|
MultiThread = (resolve(keyvalpair[1]).ToLower() == "yes");
|
|
break;
|
|
case "DecryptExistingWorlds":
|
|
DecryptExistingWorlds = (resolve(keyvalpair[1]).ToLower() == "yes");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
File.WriteAllBytes(configFile, Resources.DefaultConfigFile);
|
|
ReadConfig(configFile);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|